如何使用PostThreadMessage从C ++closuresInternet Explorer

我试图启动iexplore.exe让它运行5秒,然后再closures它。

iexplore打开就好,但是当我调用PostThreadMessage时,它不会closures。 任何人都可以看到我做错了什么? 这是我的代码:

 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! 

任何人都知道我做错了什么? 还是有更好的办法做什么伎俩?

Solutions Collecting From Web of "如何使用PostThreadMessage从C ++closuresInternet Explorer"

如果你可以枚举桌面上的窗口,并发送一个WM_CLOSE到IE窗口,它可能会工作..你可以使用间谍程序来获得IE窗口的窗口类

什么是PostThreadMessage调用的返回值? 这可能会提供一个线索。

对我而言,这是完美的作品:

 TerminateProcess(procinfo.hProcess, 0); 

尝试发送WM_CLOSE到主(顶级)窗口。 这相当于正常的Alt-F4退出。

为什么PostThreadMessage不起作用,我没有特别的答案。 但是,也许如果你详细说明为什么你想这样做,有一个更好的解决方案?

例如,如果您只想显示网页5秒钟,则可以使用嵌入式Internet Explorer ActiveX控件创建并显示自己的窗口。 您还可以添加接收器来检测网页何时加载到ActiveX控件中,以便在加载并显示网页后启动5秒计数器。

我最终做了一个窗口的枚举(正如你所提到的,我应该这样做)我受到了http://simplesamples.info/Windows/EnumWindows.php的启发&#x3002;

不要使用PostThreadMessage(),它将消息发送到目标进程中的特定线程,而不是进程的Windows消息泵。 使用PostMessage()或SendMessage()来代替,它将消息放置在目标进程的Windows消息泵中 – 这正是您想要的。

不,从不使用SendMessage()(基本的win32规则)不要使用EnmWindows()(可怕的)