English 中文(简体)
我该如何使用PostThreadMessage从C ++关闭Internet Explorer?
原标题:
  • 时间:2008-11-11 08:36:50
  •  标签:

我正在尝试启动 iexplore.exe,让它运行5秒钟,然后再关闭它。

iexplore opens just fine however it doesn t close when I call the PostThreadMessage. Can anyone see what I m doing wrong? Here is my code:

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!

有人知道我哪里做错了吗?还是有更好的方法可以解决这个问题吗?

最佳回答

如果您能枚举桌面上的窗口并向 IE 窗口发送 WM_CLOSE,它可能会起作用。您可以使用间谍程序获取 IE 窗口的窗口类。

问题回答

从PostThreadMessage调用中返回什么值?这可能会给出一些线索。

对我来说,这非常完美。

TerminateProcess(procinfo.hProcess, 0);

尝试向主(顶层)窗口发送WM_CLOSE。这相当于正常的Alt + F4退出。

我没有具体的答案为什么PostThreadMessage没有工作。但是,也许如果您详细说明为什么要这样做,可能会有更好的解决方案?

例如,如果您只想显示一个网页5秒钟,您可以创建并显示自己的窗口,其中包含嵌入式Internet Explorer ActiveX控件。您还可以添加汇流排以检测网页何时加载到ActiveX控件中,以便在网页加载和显示后才启动您的5秒计数器。

I ended up doing an enumeration of the windows (As serval of you mentioned i should do) I was inspired of http://simplesamples.info/Windows/EnumWindows.php.

不要使用PostThreadMessage(),它将消息发送到目标进程中的特定线程,而不是进程的Windows消息泵。相反,请改用PostMessage()或SendMessage(),它们会将消息放置在目标进程的Windows消息泵中--这正是您想要的。

No, never use SendMessage() (basic win32 rule) Don t use EnmWindows() (horrible)





相关问题
热门标签