私はこのコードを持っている:私は、元のプログラムにF12、デスクトップスイッチを押すと実行中のプログラムでWin32デスクトップを削除し、それらのプログラムを終了するにはどうすればよいですか?
#define _WIN32_WINNT 0x0500
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
HDESK hOriginalThread;
HDESK hOriginalInput;
hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
HDESK hNewDesktop=CreateDesktop("BasicAppDesktopDesktop",NULL,NULL,0,DELETE|READ_CONTROL|WRITE_DAC|WRITE_OWNER|GENERIC_ALL,NULL);
/*HDESK hNewDesktop=OpenDesktop("Winlogon", 0, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS);
*/
SetThreadDesktop(hNewDesktop);
SwitchDesktop(hNewDesktop);
//system("cmd");
STARTUPINFOA si = {0};
si.cb = sizeof(STARTUPINFO);
si.lpDesktop = "winsta0\\BasicAppDesktopDesktop";
PROCESS_INFORMATION infos;
CreateProcess(NULL,"explorer",NULL,NULL,false,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&infos);
//WaitForSingleObject(infos.hProcess, INFINITE);
while(!(GetAsyncKeyState(VK_F12) == -32767))Sleep(50);
CloseHandle(infos.hProcess);
CloseHandle(infos.hThread);
SwitchDesktop(hOriginalInput);
SetThreadDesktop(hOriginalThread);
CloseDesktop(hNewDesktop);
CloseDesktop(hOriginalInput);
return 0;
}
は終了しますが、私は2番目のデスクトップに任意のプログラムを実行する場合は、終了をしない、と私は私のプログラムを実行すると、再びどのプログラムも表示されます。プログラムを使用してデスクトップを削除する方法はありますか、または終了時に2番目のデスクトップを介してプログラムの自動終了が実行されましたか? 助けてください。
ここにサンプルコードを投稿してください。 私はこの分野でのプログラミングを知らない。 –
ドキュメントを読むことを検討しましたか? –
@matej - 私があなたに与えた各機能のMSDNページを読めば、コードはほとんどそれ自身を書くでしょう;-) – snowcrash09