目前需要做的是启动IE时,设置其特定的大小跟位置,并且需要保存其进程ID,用以程序结束时关闭启动的IE进程。
我现在有两种方法,但都有问题。希望哪位大侠能够指点,多谢多谢!!!
1。使用CreateProcess、FindWindowEx、SetWindowPos、ShowWindow。
代码如下:
char sPath[255];
CString m_sIEPath="C:\\Program Files\\Internet Explorer\\iexplore.exe";
strcpy(sPath,m_sIEPath);
PROCESS_INFORMATION pi;
STARTUPINFO si={sizeof(si)};
si.dwFlags=STARTF_USESHOWWINDOW;
si.wShowWindow=SW_HIDE;
//si.wShowWindow=SW_SHOW;
BOOL bExec=CreateProcess(sPath,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
HWND hIE=FindWindowEx(NULL,NULL,"IEFrame",NULL);
if (hIE!=NULL)
{
  ::SetWindowPos(hIE,HWND_TOP,256,0,1024,856,SWP_NOZORDER|SWP_SHOWWINDOW);
  ::ShowWindow(hIE,SW_SHOW);
}这种方法的问题是当另外一个进程占用将近100%CPU时,无法全部显示启动的IE(资源管理器中显示此进程已经存在了)。当系统正常时(即CPU不是占用这么大时)一切正常。
在这个方法中,如果去掉FindWindowEx、SetWindowPos、ShowWindow(自然si.wShowWindow=SW_SHOW),则在另外一个进程占用将近100%CPU时,不会出现
无法显示IE的问题。所以我怀疑问题出现在FindWindowEx、SetWindowPos、ShowWindow上面。不知道对不对?2。通过更改注册表的方法设置启动IE的大小位置。
通过每次启动IE进程前,更改注册表中“SOFTWARE\\MICROSOFT\\INTERNET EXPLORER\\MAIN”的Window_Placement值,设置IE的位置大小。
但这个方法存在一个很奇怪的问题:
第一次启动IE间,位置大小都是正常的,但如果不关闭它,再次启动IE时,它的位置总是在最左边,我每次都是设置Window_Placement同样的值啊,为什么会出现这种问题呢?有哪位大侠对Window_Placement比较熟悉的请告知一声,多谢多谢了!!!
真诚希望各位高手不吝指教!!!!!
非常急,在线等~~~!!!

解决方案 »

  1.   

    1、CreateProcess之后,要等待WaitForInputIdle(pi.hProcess);
      

  2.   

    to flyelf(空谷清音) 
    谢谢你的想法,不过CreateProcess之后,加入等待WaitForInputIdle,我快速连续启动IE的情况下,仍然会出现IE进程已经启动,但没有显示的情况。
    我现在就是想解决进程启动但没有显示的情况。着急啊~~~
      

  3.   

    建议使用COM的方法在进程内创建浏览器对象。创建之后,可以通过枚举窗口来查找创建的浏览器窗口,然后调用MoveWindow,以及插入退出事件处理代码,参见http://msdn.microsoft.com/library/en-us/dnwebgen/html/bho.asp。但是更加方便的方法是使用浏览器控件。
    CSDN技术中心在应用程序中集成浏览器控件(Update) ...
    ... 创建并且操纵IE浏览器. 可以使用CoCreateInstance来创建一个浏览器对象,
    使用的CLSID是CLSID_InternetExplorer。创建成功之后,可以查询浏览器对象的
    其他接口,例如IWebBrowser2,IOleObject等等。. 分析网页和自动提交网页表
    单. ... 
    dev.csdn.net/article/30/30329.shtm - 28k - 网页快照 - 类似网页 
      

  4.   

    to  smile_cc(笑笑) 
    应该是这里的问题,因为我在没有启动一个占用100%CPU进程的情况下,第一种方法不会出现问题,而另外启动占用100%CPU进程后,我TRACE的结果就是得到的窗口HWND为空。to  jiangsheng(蒋晟.MSMVP2004Jan)
    我们刚开始的时候也是使用的CoCreateInstance,在CPU被占用100%的情况下,也会出现类似第一个方法出现的问题,即只创建了进程却无法显示的情况。
    多谢你们两位的up,多谢多谢!!!唉,在CPU被占用很多的情况下,创建进程却无法显示的问题如何解决呢?
    着急~~~