创建在新Windows桌面上运行IE的过程



我正在尝试设置一个IE售货亭,该信息亭在单独的桌面上运行IE。当我测试时,我只是正常启动IE(不在售货亭模式下),但是尽管IE在新桌面上启动,但它并未加载命令字符串中指定的初始页面,但它只是带有Hourglass闪烁的位置真的很快就打开和关闭(即使我将鼠标移动到IE窗口外面的桌面上的其他地方)。导航框中没有显示URL。我可以访问IE内部的菜单,但是即使我手工键入URL也没有任何发生。关闭IE将我带回预期的默认桌面。

我尝试过的几个额外的事情:启动命令提示符(正常工作,我可以ping我试图连接到的网站,因此从新台式机上进行的互联网访问就不会阻止);使用文件名参数启动记事本(工作正常,打开指定的文件,因此我要正确地传递命令行参数)。

这是我的代码;欢迎任何想法:

#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;
}

尝试将以下命令行传递到CreateProcess(更多信息):

"iexplore.exe -k -noframemerging http://www.google.com"

您还可以选择通过ole InternetExplorer.Application对象,具有put_Visibleput_FullScreenNavigate2方法自动化Internet Explorer。

最新更新