2013-01-21 63 views
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应用程序)?

+0

什么是不可见的桌面上推出* Windows图形用户界面*应用程序的地步? GUI是“图形用户界面”,意味着它期望从用户获取信息或向用户显示信息。 –

+3

尝试取消注释'si.lpDesktop = _T(“hiddenDesktop”);'和注释'HWINSTA winSta = CreateWindowStation(_T(“hiddenWinSta”),0,0,NULL);''SetProcessWindowStation(winSta);' – sergmat

+0

@Ken White自动化 –

回答

1

取消注释

si.lpDesktop = _T("hiddenDesktop"); 

评论

// HWINSTA winSta = CreateWindowStation(_T("hiddenWinSta"), 0, 0, NULL); 
// SetProcessWindowStation(winSta);