ShellExecute,ShellExecuteEx启动IE的问题

夭夭 2004-04-22 11:14:10
使用这二个API启动IE时,如何传入参数,使IE启动后调用的网页上没地址栏,工具栏等.
...全文
243 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyd 2004-04-22
  • 打赏
  • 举报
回复

BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam)//EnumWindow的回调函数

{

DWORD dwProcessId;
LPTSTR classname=new char[64];

GetWindowThreadProcessId(hWnd, &dwProcessId);
GetClassName(hWnd,classname,64);
LPWNDINFO pInfo = (LPWNDINFO)lParam;


if(dwProcessId == pInfo->dwProcessId &&strcmp(classname,"IEFrame")==0)

{

pInfo->hWnd = hWnd;

return FALSE;

}

return TRUE;

}

HWND GetProcessMainWnd(DWORD dwProcessId)//得到进程对应的主窗口句柄

{

WNDINFO wi;

wi.dwProcessId = dwProcessId;

wi.hWnd = NULL;

EnumWindows(MyEnumProc,(LPARAM)&wi);

return wi.hWnd;

}

BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)//EnumChildWindow的回调函数
{
LPTSTR classname=new char[64];
LPTSTR classname2=new char[64];
LPCHILDWNDINFO lpinfo=(LPCHILDWNDINFO)lParam;
GetClassName(hwndChild,classname,64);
GetClassName(GetParent(hwndChild),classname2,64);
if(strcmp(classname,(char*)lpinfo->clsname)==0&&strcmp(classname2,"ComboBoxEx32")!=0)
{
lpinfo->hWndChild=hwndChild;
delete []classname;
delete []classname2;
return FALSE;
}
return TRUE;
}

//隐藏ie工具栏示范代码如下
STARTUPINFO StartupInfo;
memset(&StartupInfo,0,sizeof(STARTUPINFO));//初始化startupinfo
StartupInfo.cb=sizeof(STARTUPINFO);
StartupInfo.wShowWindow=SW_MINIMIZE;
StartupInfo.dwFlags=STARTF_USESHOWWINDOW;
PROCESS_INFORMATION ProcessInformation;
char *program="J:\\Program Files\\Internet Explorer\\iexplore.exe";
char *command="\"j:\\Program Files\\Internet Explorer\\iexplore.exe\" http://www.sohu.com/";

//创建进程
int ret=CreateProcess(NULL,command,NULL,NULL,
TRUE,0,NULL,NULL,
&StartupInfo,&ProcessInformation);
//Sleep(2500);
//枚举子窗口
totry:
HWND hwnd=GetProcessMainWnd(ProcessInformation.dwProcessId);
if(!hwnd)
{
Sleep(500);
goto totry;
}
CHILDWNDINFO ci;
ci.clsname="WorkerW";
EnumChildWindows(hwnd, EnumChildProc,
(LPARAM)&ci);
ci.clsname="ReBarWindow32";
EnumChildWindows(ci.hWndChild, EnumChildProc,
(LPARAM)&ci);
ci.clsname="ToolbarWindow32";
EnumChildWindows(ci.hWndChild, EnumChildProc,
(LPARAM)&ci);
PostMessage(ci.hWndChild,WM_CLOSE,0,0);
ShowWindow(hwnd,SW_RESTORE);

很久以前写的代码了,不知道还能不能用,没有试
babam 2004-04-22
  • 打赏
  • 举报
回复
h1982(血精灵) 他说得对
freefalcon 2004-04-22
  • 打赏
  • 举报
回复
与oyd类似的方法为:
创建窗口后,通过FindWindow()找到刚才的窗口,然后再通过GetDescendantWindow(AFX_IDW_TOOLBAR)等获得工具栏,然后隐藏它,destroy显得比较粗暴

另外,不知楼主这样做的目的是什么
如果只是打开一个网页,而这个网页的代码你可以控制的话,完全可以在网页里通过脚本控制
夭夭 2004-04-22
  • 打赏
  • 举报
回复
晕倒,没有个好一点的法子.
oyd(cplusplus) (MVP)你的代码能看看不?
yjh1982 2004-04-22
  • 打赏
  • 举报
回复
我想是不行的...不如自己用CHtmlView显示?
oyd 2004-04-22
  • 打赏
  • 举报
回复
目前ie没有命令行参数负责这个的。
你可以试试两种途径:
1。用ie的COM接口
2。用CreateProcess后,再枚举子窗口,通过类名等到hwnd,然后向它发送destroy消息,就可以把地址栏,工具栏关掉了。
第一种方法我没试过,别人告诉我的
第二种方法我试过,保证有效。
夭夭 2004-04-22
  • 打赏
  • 举报
回复
fd

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧