目前需要做的是启动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。使用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比较熟悉的请告知一声,多谢多谢了!!!
真诚希望各位高手不吝指教!!!!!
非常急,在线等~~~!!!
解决方案 »
- 有没有人用vs2010的?编译出现重定义怎么解决啊?感谢了~
- 怎么样在MFCDLL里面定义接口?
- 【名企招聘至少sixK】开源软件/搜索技术/MFC/C++软件工程师!
- 关于曲线放大失真的问题
- 用VC如何中止explorer.exe
- CMap 出错!!!大侠帮我看看!!
- 用VC++做MCI编程时的问题……
- Microsoft Visual Studio.Net 2010 新建个啥功能也没的基于对话框程序,就200多MB!
- 如何开始做VC
- 请大家帮忙看看我的代码有什么问题,为什么无法在原位修改树视图中项目的值?
- 为什么会出现"unexpected end of file while looking for precompiled header directive"错误?
- 新手问题,怎样对WMF文件实现浏览操作保存
谢谢你的想法,不过CreateProcess之后,加入等待WaitForInputIdle,我快速连续启动IE的情况下,仍然会出现IE进程已经启动,但没有显示的情况。
我现在就是想解决进程启动但没有显示的情况。着急啊~~~
CSDN技术中心在应用程序中集成浏览器控件(Update) ...
... 创建并且操纵IE浏览器. 可以使用CoCreateInstance来创建一个浏览器对象,
使用的CLSID是CLSID_InternetExplorer。创建成功之后,可以查询浏览器对象的
其他接口,例如IWebBrowser2,IOleObject等等。. 分析网页和自动提交网页表
单. ...
dev.csdn.net/article/30/30329.shtm - 28k - 网页快照 - 类似网页
应该是这里的问题,因为我在没有启动一个占用100%CPU进程的情况下,第一种方法不会出现问题,而另外启动占用100%CPU进程后,我TRACE的结果就是得到的窗口HWND为空。to jiangsheng(蒋晟.MSMVP2004Jan)
我们刚开始的时候也是使用的CoCreateInstance,在CPU被占用100%的情况下,也会出现类似第一个方法出现的问题,即只创建了进程却无法显示的情况。
多谢你们两位的up,多谢多谢!!!唉,在CPU被占用很多的情况下,创建进程却无法显示的问题如何解决呢?
着急~~~