スレッドが別のデスクトップに変更されると、AllocConsole()で作成された新しいコンソールが元のデスクトップに表示されます。作成されたメッセージボックスやその他のウィンドウは、期待どおりに新しいデスクトップに表示されますが、コンソールウィンドウは表示されません。次のコードはWindowsアプリケーションの例ですが、コンソールアプリケーションであるかどうかに関係なく、結果は同じです。
#include <Windows.h>
HDESK hDesk;
DWORD WINAPI Testing(void *)
{
SetThreadDesktop(hDesk);
AllocConsole();
MessageBox(NULL, TEXT("Test"), NULL, MB_OK); //This will show on the new desktop
FreeConsole();
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
hDesk=CreateDesktop(TEXT("Testing"),NULL,NULL,NULL,GENERIC_ALL,NULL);
SwitchDesktop(hDesk);
DWORD thr;
HANDLE thread = CreateThread (0, 0, Testing, 0, 0, &thr);
WaitForSingleObject (thread, 10000); //Wait 10 seconds before automatically exiting.
SwitchDesktop(GetThreadDesktop(GetCurrentThreadId())); //Return to previous desktop
CloseDesktop(hDesk);
return 0;
}
2番目のデスクトップにコンソールウィンドウを作成するにはどうすればよいですか?