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

时间:2014-01-28 13:39:08

标签: c++ internet-explorer winapi desktop

我正在尝试设置一个IE浏览器,它在一个单独的桌面上运行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;
}

1 个答案:

答案 0 :(得分:1)

尝试将以下命令行传递给CreateProcessmore info):

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

您还可以选择通过OLE InternetExplorer.Application对象自动执行Internet Explorer,特别是使用put_Visibleput_FullScreenNavigate2方法。