我正在尝试设置一个 IE kiosk,在单独的桌面上运行 IE。当我测试时,我只是正常启动 IE(不是在 kiosk 模式下),但是尽管 IE 在新桌面上启动,但它不会加载命令字符串中指定的初始页面,它只是坐在那里,沙漏闪烁打开和关闭非常快(即使我将鼠标移动到桌面上的其他位置,即 IE 窗口之外)。导航框中没有显示 URL。我可以访问 IE 中的菜单等,但即使我手动输入 URL,也没有任何反应。关闭 IE 会按预期返回到默认桌面。
我尝试了一些额外的事情:启动命令提示符(工作正常,我可以 ping 通我尝试连接的站点,因此不会阻止从新桌面访问 Internet);使用文件名参数启动记事本(工作正常,打开指定的文件,因此我正确地传递了命令行参数)。
这是我的代码;欢迎任何想法:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
char* desktop = "MyDesktop";
HDESK hThreadDT = GetThreadDesktop(GetCurrentThreadId());
HDESK hInputDT = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
HDESK hNewDT = CreateDesktop(desktop, NULL, NULL, 0, GENERIC_ALL, NULL);
SetThreadDesktop(hNewDT);
SwitchDesktop(hNewDT);
if (SetCurrentDirectory("C:\\Program Files\\Internet Explorer")) {
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&pi, 0, sizeof(pi));
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
si.lpDesktop = desktop;
if (CreateProcess(NULL, "iexplore.exe http://www.google.com",
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
WaitForSingleObject(pi.hProcess,INFINITE);
}
else {
char msg[1000];
wsprintf(msg,"CreateProcess failed (%d)",GetLastError());
MessageBox(NULL,msg,NULL,MB_OK);
}
}
SwitchDesktop(hInputDT);
SetThreadDesktop(hThreadDT);
CloseDesktop(hNewDT);
return 0;
}