1

iexplore.exe5秒間実行してから、もう一度閉じようとしています。

iexplore問題なく開きますが、PostThreadMessage を呼び出しても閉じません。誰かが私が間違っていることを見ることができますか? これが私のコードです:

CString IEPath = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";//GetIEPath();
//IEPath += ' ' + url;
std::string strCommand((LPCTSTR)IEPath);
PROCESS_INFORMATION    procinfo;
STARTUPINFO    startupinfo;    
GetStartupInfo(&startupinfo);

CreateProcess(
        NULL,       
        (char *)strCommand.c_str(),// name of executable module
        NULL,           // lpProcessAttributes
        NULL,           // lpThreadAttributes
        false,          // handle inheritance option
        CREATE_SHARED_WOW_VDM,              // creation flags
        NULL,           // new environment block
        NULL,           // current directory name
        &startupinfo,    // startup information
        &procinfo        // process information
        );


Sleep(5000);
    ::PostThreadMessage(procinfo.dwThreadId, WM_QUIT, 0, 0); //<---Dosent Close internet explorer!

誰が私が間違っているのか考えていますか? または、トリックを行うためのより良い方法はありますか?

4

8 に答える 8

2

デスクトップ上のウィンドウを列挙し、WM_CLOSE を IE ウィンドウに送信できる場合は、動作する可能性があります。スパイ プログラムを使用して、IE ウィンドウのウィンドウ クラスを取得できます。

于 2008-11-11T08:46:50.453 に答える
1

メイン (最上位) ウィンドウに WM_CLOSE を送信してみてください。これは、通常の Alt-F4 の終了と同等です。

于 2008-11-11T09:48:41.110 に答える
1

PostThreadMessage 呼び出しからの戻り値は何ですか? それは手がかりを与えるかもしれません。

于 2008-11-11T08:50:42.083 に答える
1

私にとって、これは完璧に機能します:

TerminateProcess(procinfo.hProcess, 0);
于 2008-11-11T08:56:20.437 に答える
0

私は最終的にウィンドウの列挙を行いました(あなたのサーバルが言ったように、私はすべきです)私はhttp://simplesamples.info/Windows/EnumWindows.phpに触発されました。

于 2008-11-11T12:36:15.843 に答える
0

いいえ、SendMessage()を使用しないでください(基本的なwin32ルール)EnmWindows()を使用しないでください(恐ろしい)

于 2008-11-15T10:50:58.310 に答える
0

プロセスの Windows メッセージ ポンプではなく、ターゲット プロセスの特定のスレッドにメッセージを送信する PostThreadMessage() は使用しないでください。代わりに PostMessage() または SendMessage() を使用してください。これにより、ターゲット プロセスの Windows メッセージ ポンプにメッセージが配置されます。これはまさに必要なものです。

于 2008-11-11T15:10:46.530 に答える
0

PostThreadMessage が機能しなかった理由について、具体的な答えはありません。しかし、なぜこれを行いたいのかを詳しく説明すると、より良い解決策があるでしょうか?

たとえば、Web ページを 5 秒間だけ表示したい場合は、Internet Explorer ActiveX コントロールが埋め込まれた独自のウィンドウを作成して表示できます。Web ページが ActiveX コントロールにロードされたときに検出するシンクを追加して、Web ページがロードされて表示された後にのみ 5 秒カウンターを開始することもできます。

于 2008-11-11T08:58:30.710 に答える