我对 c++ 非常陌生,并且正在尝试创建一个可以切换桌面的应用程序。到目前为止,我已经能够成功切换桌面并尝试在该桌面上启动应用程序。不幸的是,当应用程序在我新创建的桌面上启动时,我一直遇到访问冲突。我的问题是:什么可能导致这种访问冲突?根据我的阅读,这是程序试图访问它不应该访问的内存的问题。错误是:
“应用程序无法正确启动(0xC0000005)。单击确定关闭应用程序”
另外,任何人都可以就我如何改进此代码提出建议吗?这将帮助我从有经验的程序员那里学到一些东西。先感谢您!
编辑:我正在使用 Visual Studio Express 2010 运行 Windows 7 x64
这是代码:
#include <Windows.h>
//Globals
HDESK hLastDesktop;
struct tDesktop {
HDESK Desktop1;
HDESK Desktop2;
HDESK Desktop3;
HDESK Desktop4;
};
HDESK FindCurrentDesktop()
{
return GetThreadDesktop(GetCurrentThreadId());
}
int ChangeDesktop(HDESK hDesktopName)
{
//Save the handle to this desktop
hLastDesktop = FindCurrentDesktop();
//Set the main thread to this desktop
SetThreadDesktop(hDesktopName);
//Switch
SwitchDesktop(hDesktopName);
return 0;
}
PROCESS_INFORMATION CreateProcessDesktop(LPWSTR lpProcessPath, LPWSTR lpDesktop)
{
PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
startupInfo.cb = sizeof(startupInfo);
startupInfo.lpDesktop = lpDesktop;
CreateProcess(lpProcessPath,
0,
0,
0,
FALSE,
0,
0,
0,
&startupInfo,
&processInfo
);
return processInfo;
}
int _tmain(int argc, _TCHAR* argv[])
{
//Create an instance to use the struct
tDesktop myDesktop;
//Assign data for home desktop
myDesktop.Desktop1 = FindCurrentDesktop();
printf("Home desktop: %d\n", myDesktop.Desktop1);
myDesktop.Desktop2 = CreateDesktop(L"Desktop2", NULL, NULL, 0, GENERIC_ALL, NULL);
printf("Desktop 2 opened: %d\n", myDesktop.Desktop2);
printf("Changing to desktop 2: %d\n", myDesktop.Desktop2);
ChangeDesktop(myDesktop.Desktop2);
//Set up process to start in Desktop2 (for PID, etc later)
PROCESS_INFORMATION pi;
pi = CreateProcessDesktop(L"C:\\Windows\\explorer.exe", L"Desktop2");
Sleep(5000);
TerminateProcess(pi.hProcess, 0);
ChangeDesktop(hLastDesktop);
return 0;
}