windows - 窗口站和桌面

标签 windows winapi

我正在尝试在隐藏的桌面上启动一个应用程序,但没有取得太大进展,也找不到关于桌面和窗口站到底是什么的详细文档。这是我的代码,删除了错误处理(但相信我它在那里并且没有捕获任何错误):

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 应用程序)吗?

最佳答案

取消注释

si.lpDesktop = _T("hiddenDesktop");

评论

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

关于windows - 窗口站和桌面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432589/

相关文章:

c++ - 对于具有 UIAccess ="true"的进程,CreateProcessAsUser 失败并显示 ERROR_ELEVATION_REQUIRED

c# - 更改其他进程的键盘布局

winapi - 在 Rust 中实现 IWbemObjectSink 接口(interface)

c++ - 我如何使用 WinAPI 将消息发送到 Internet Explorer 9

javascript - 是否可以运行不在文件中的node.js脚本?

c++ - GetModuleFileNameEx - 是否可以在 char* 而不是 TCHAR[] 中获取路径?

c++ - 如何使用 C++ 复制 SID 进行存储

c++ - 有没有更好的方法来终止 Windows 上的 chrome.exe

c++ - Qt - 没有托盘图标的通知,可能吗?

c++ - 在 C++ 中使用系统调用 UNRAR.exe