Neuer Desktop



  • Hallo,

    ich habe hier einen Code gefunden, wie man einen neuen Desktop erzeugt und es
    wieder beendet:

    hOriginalThread=GetThreadDesktop(GetCurrentThreadId());
     OpenInputDesktop(0,FALSE,DESKTOP_SWITCHDESKTOP);
    
     hNewDesktop=CreateDesktop("Sicher",NULL,NULL,0,GENERIC_ALL,NULL);
     SetThreadDesktop(hNewDesktop);
     SwitchDesktop(hNewDesktop);
    
     //CreateThread()
     //CreateProcess();
    
     SwitchDesktop(hOriginalThread);
     SetThreadDesktop(hOriginalThread);
    
     CloseDesktop(hNewDesktop);
    

    Das Problem hierbei ist, dass wenn ich bei CreateProcess was eingebe, dann erscheint das neue Fenster zwar im neuen Desktop, der aber wieder sofort verschwindet. Deswegen wollte ich, dass das Programm auf das Ende meines aufgerufenen Programms wartet und dann erst zu "SwitchDesktop(hOriginalThread)... kommt.
    Und könnte mir noch jemand erklären, was man mit CreateThread() eigentlich machen kann?

    Vielen Dank
    Toddy



  • Toddy schrieb:

    Das Problem hierbei ist, dass wenn ich bei CreateProcess was eingebe, dann erscheint das neue Fenster zwar im neuen Desktop, der aber wieder sofort verschwindet. Deswegen wollte ich, dass das Programm auf das Ende meines aufgerufenen Programms wartet und dann erst zu "SwitchDesktop(hOriginalThread)... kommt.

    Und wo ist das Problem? Auf das Prozessende kannst du mit WaitForSingleObject() warten.

    Und könnte mir noch jemand erklären, was man mit CreateThread() eigentlich machen kann?

    Einen zweiten Thread in deinem gerade laufenden Programm starten - der dann parallel zum "Haupt"thread abgearbeitet werden kann (z.B. für langwierige Berechnungen, die im Hintergrund laufen sollen).



  • Hallo CStoll,

    noch ne Frage: Was muss ich denn bei WaitForSingleObject als Handle übergeben, wenn ich den mit CreateProcess aufgerufenen Prozess überprüfen will?

    MFG Toddy

    Edit: Ah, OK es hat geklappt. Ich hab was übersehen....



  • Was wohl - natürlich das Prozess-Handle (das packt CreateProcess in den Member 'hProcess' der übergebenen PROCESS_INFORMATION (letzter Parameter der Funktion)).


Anmelden zum Antworten