私は c++ が初めてで、デスクトップを切り替えるアプリケーションを作成しようとしています。これまでのところ、デスクトップを正常に切り替えて、そのデスクトップでアプリケーションを起動しようとすることができました。残念ながら、新しく作成したデスクトップでアプリケーションを起動すると、アクセス違反が発生し続けます。私の質問は、このアクセス違反の原因は何ですか? 私が読んだことから、プログラムがアクセスすべきではないメモリにアクセスしようとしている問題です。エラーは次のとおりです。
「アプリケーションを正しく起動できませんでした (0xC0000005)。[OK] をクリックしてアプリケーションを閉じます」
また、このコードを改善する方法について誰か提案してもらえますか? 経験豊富なプログラマーから少し学ぶのに役立ちます。前もって感謝します!
編集: 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;
}