ShellExecuteExがIDE実行で中断する

解決


Syake  2007-04-04 23:43:18  No: 25605

皆様お世話になります。
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 です。


風来坊  2007-04-05 06:25:29  No: 25606

lpParameters := '';
lpDirectory  := '';

これに nil を入れてみたらどうでしょう…


かふぇ  2007-04-05 17:53:32  No: 25607

私も同じ環境で同じ現象が出ます。
nil入れても駄目だったような・・・
しょうがないのでデバッグ環境ではShellExecute関係(CreateProcessも同様)はスルーするようにしました。

C++で申し訳ないのですが、コードは
#ifndef _DEBUG
ShellExecute(...);
#endif

という感じ。何故でしょうね?


Syake  2007-04-05 18:08:04  No: 25608

風来坊さん  ありがとうございます。
    lpParameters := nil;
    lpDirectory  := nil;
う〜む、同じですね。
やっぱり、CPUのデバック表示で止まってしまう。
同じ箇所の様です。


Syake  2007-04-05 18:12:36  No: 25609

かふぇさんありがとうございます。
>私も同じ環境で同じ現象が出ます。
そうですか・・・
無視しちゃう、ってのが得策なのでしょうか。


風来坊  2007-04-06 00:23:15  No: 25610

ダメでしたか…
適当なことを言って申し訳ないです。
でも D7 ではどちらでも OK なんですけどね。
バージョン関係あるのかな?


Syake  2007-04-06 02:45:10  No: 25611

>適当なことを言って申し訳ないです。
とんでもございません。
>でも D7 ではどちらでも OK なんですけどね。
という事は、D7ではこの様な現象は起きないという事ですね。
D2006のIDEの固有の問題と勝手に解釈する事にします。
(  動けば正解(^_^;)  )
でも、気持ち悪い結末ではありますが、取り敢えず解決に・・・
皆様、ありがとうございました。


Mr.XRAY  URL  2007-04-06 07:18:12  No: 25612

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)
です.


Syake  2007-04-06 18:48:37  No: 25613

マスターじゃなくて、XRayさんいつもお世話になります。
同じ環境、同じコード・・・・
何が違うんじゃろ(・・?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加