2
我试图在隐藏的桌面上启动应用程序,但没有得到太多的进展,找不到有关桌面和窗口站点的真实情况的详细文档。这里是我的错误处理代码删除(但beleive我它的存在,而不是捕捉任何错误):窗口工作站和桌面
HWINSTA winSta = CreateWindowStation(_T("hiddenWinSta"), 0, 0, NULL);
SetProcessWindowStation(winSta);
HDESK desktop = CreateDesktop(_T("hiddenDesktop"), NULL, NULL, 0, DESKTOP_CREATEWINDOW, NULL);
OpenDesktop(_T("hiddenDesktop"), 0, TRUE, GENERIC_ALL);
SetThreadDesktop(desktop)
HWINSTA r = GetProcessWindowStation();
printf("winsta: %x %x\n", r, winSta);
HDESK curdesk = GetThreadDesktop(GetCurrentThreadId());
printf("desktop: %x %x\n", curdesk, desktop);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
//si.lpDesktop = _T("hiddenDesktop");
ZeroMemory(&pi, sizeof(pi));
TCHAR szCommand[MAX_PATH];
_sntprintf_s(szCommand, MAX_PATH, _T("%s"), _T("c:\\windows\\system32\\calc.exe"));
DWORD res = CreateProcess(NULL, szCommand, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
如果我取消了si.lpDesktop线中未能启动可怕的错误0x000142。如果我评论si.lpDesktop进程在当前桌面上启动。 我在做什么错?是否有可能做我想做的事(即启动一个完全不可见的Windows GUI应用程序)?
什么是不可见的桌面上推出* Windows图形用户界面*应用程序的地步? GUI是“图形用户界面”,意味着它期望从用户获取信息或向用户显示信息。 –
尝试取消注释'si.lpDesktop = _T(“hiddenDesktop”);'和注释'HWINSTA winSta = CreateWindowStation(_T(“hiddenWinSta”),0,0,NULL);''SetProcessWindowStation(winSta);' – sergmat
@Ken White自动化 –