質問

iexplore.exe を起動して5秒間実行させてから、もう一度閉じます。

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!

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

役に立ちましたか?

解決

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

他のヒント

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

私にとって、これは完璧に動作します:

TerminateProcess(procinfo.hProcess, 0);

メイン(トップレベル)ウィンドウにWM_CLOSEを送信してみてください。これは通常のAlt-F4 exitと同等です。

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

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

ウィンドウの列挙を行うことになりました(あなたのサーバルが私がすべきだと述べたように) http://simplesamples.info/Windows/EnumWindows.php に触発されました。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top