1

我试图开始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!

任何人都知道我做错了什么?还是有更好的方法来解决这个问题?

4

8 回答 8

2

如果您可以枚举桌面上的窗口并将 WM_CLOSE 发送到 IE 窗口,它可能会起作用..您可以使用 spy 程序获取 IE 窗口的窗口类

于 2008-11-11T08:46:50.453 回答
1

PostThreadMessage 调用的返回值是多少?这可能会提供线索。

于 2008-11-11T08:50:42.083 回答
1

对我来说,这很完美:

TerminateProcess(procinfo.hProcess, 0);
于 2008-11-11T08:56:20.437 回答
1

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

于 2008-11-11T09:48:41.110 回答
0

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

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

于 2008-11-11T08:58:30.710 回答
0

我最终对窗口进行了枚举(正如你们中提到的我应该做的那样),我受到了http://simplesamples.info/Windows/EnumWindows.php的启发。

于 2008-11-11T12:36:15.843 回答
0

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

于 2008-11-11T15:10:46.530 回答
0

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

于 2008-11-15T10:50:58.310 回答