皆様お世話になります。
ShellExecuteExで、IDEで実行するとCPUのデバック表示!?で、一旦中断
されます。(この表示が出ても何がなんだか・・・)
再度、実行ボタンをクリックして継続すると、目的のプログラムは起動
するのですが、何か気持ち悪いです。
function AppRun(strFileName:String; ObjFrmHwnd :THandle):THandle;
var
ShellExecuteInfo: TShellExecuteInfo;
begin
FillChar(ShellExecuteInfo, SizeOf(TShellExecuteInfo), 0);
with ShellExecuteInfo do
begin
cbSize := SizeOf(TShellExecuteInfo);
fMask := SEE_MASK_NOCLOSEPROCESS;
wnd := ObjFrmHwnd;//MainフォームでのSelf.Handle
lpVerb := 'OPEN';
lpFile := PChar(strFileName);//フルパス
lpParameters := '';
lpDirectory := '';
nShow := SW_SHOWNORMAL;
hInstApp := 0;
lpIDList := nil;
lpClass := nil;
hkeyClass := 0;
dwHotKey := 0;
hIcon := 0;
end;
if ShellExecuteEx(@ShellExecuteInfo) then
begin
Result := ShellExecuteInfo.hProcess;
end else begin
Result := 0;
end;
end;
何か、私が間違ってるのでしょうか?
ちなみに、D2006ENT、WinXP SP2 です。
lpParameters := '';
lpDirectory := '';
これに nil を入れてみたらどうでしょう…
私も同じ環境で同じ現象が出ます。
nil入れても駄目だったような・・・
しょうがないのでデバッグ環境ではShellExecute関係(CreateProcessも同様)はスルーするようにしました。
C++で申し訳ないのですが、コードは
#ifndef _DEBUG
ShellExecute(...);
#endif
という感じ。何故でしょうね?
風来坊さん ありがとうございます。
lpParameters := nil;
lpDirectory := nil;
う〜む、同じですね。
やっぱり、CPUのデバック表示で止まってしまう。
同じ箇所の様です。
かふぇさんありがとうございます。
>私も同じ環境で同じ現象が出ます。
そうですか・・・
無視しちゃう、ってのが得策なのでしょうか。
ダメでしたか…
適当なことを言って申し訳ないです。
でも D7 ではどちらでも OK なんですけどね。
バージョン関係あるのかな?
>適当なことを言って申し訳ないです。
とんでもございません。
>でも D7 ではどちらでも OK なんですけどね。
という事は、D7ではこの様な現象は起きないという事ですね。
D2006のIDEの固有の問題と勝手に解釈する事にします。
( 動けば正解(^_^;) )
でも、気持ち悪い結末ではありますが、取り敢えず解決に・・・
皆様、ありがとうございました。
Syakeさん以下のコードでやってみました.
いくつかEXEファイルを選択して実行しましたが,
<デバック表示!?で、一旦中断>
というのはありませんでした.
私,何か設定を変えたかな〜(ゴメンなさい.記憶なし).
AppRunのコードはコピペして使用したので省略
procedure TForm1.Button1Click(Sender: TObject);
var
AFile : String;
begin
if OpenTextFileDialog1.Execute then begin
AFile:=OpenTextFileDialog1.FileName;
AppRun(AFile,Handle);
end;
end;
当方の環境は
Delphi Versin 10.0.2151.25345(バージョン情報) Delphi2006 Win32
Windows XP (ビルド2600; Service Pack2)
です.
マスターじゃなくて、XRayさんいつもお世話になります。
同じ環境、同じコード・・・・
何が違うんじゃろ(・・?
ツイート | ![]() |