![]() |
Desktop schließen/freigeben
Hallo,
ich habe mit CreateDesktop einen Desktop erstellt und darin auch Programm gestartet (explorer.exe damit ich auch dort eine Taskleiste hab etc.). Wie kann ich jetzt diesen Desktop wieder freigeben so das auch alle Programme auf diesem Desktop mit zugehen bzw. ohne Desktop sind. Wenn ich einfach CloseDesktop verwende und noch Programme auf dem Desktop sind, wird der Desktop leider nicht feigegeben. |
Re: Desktop schließen/freigeben
Zitat:
![]() |
Re: Desktop schließen/freigeben
Ok, da werd ich das mal probieren. Thx.
|
Re: Desktop schließen/freigeben
*alten thread ausbuddel*
Darf ich fragen wie du das geschafft hast? bzw: Mich qüalt seit letzter Woche die Frage: Wie kann ich aus allen Prozessen, genau die Prozesse rausfiltern, die auf dem neuem Desktop erstellt wurden? :?: Mit dem Codeprojekt c# krams kann ich leider nichts mit anfangen. :pale: |
Re: Desktop schließen/freigeben
Das muss doch irgendwie zu machen sein. :coder2:
SirThornberry hats doch auch irgendwie mit seinem klasse Freeware tool hinbekommen. :gruebel: Weiß es einer, bzw verrät´s mir wer? :roteyes: mfg spawn |
Re: Desktop schließen/freigeben
wie listest du bisher alle Prozesse auf? Bei der Struktur zum auflisten aller Prozesse enthält die Struktur (wenn ich mich recht entsinne) auch einen Teil welcher den Desktopnamen angibt.
|
Re: Desktop schließen/freigeben
So liste ich mir die ganzen Prozesse (also die *.exe namen) in einer ListBox auf:
Delphi-Quellcode:
Und bei auswahl eines Prozesses hohl ich mir dann vorerst so die Prozess-ID, um damit dann den Prozess zu killn:
procedure TForm1.getAllProcesses;
var hSnap: THandle; ProcEntry: TProcessEntry32; s: String; begin hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap <> INVALID_HANDLE_VALUE) then begin ProcEntry.dwSize := SizeOf(ProcessEntry32); if (Process32First(hSnap, ProcEntry)) then begin s := ProcEntry.szExeFile; lb_Processes.Items.Clear; lb_Processes.Items.add(ExtractFileName(s)); while Process32Next(hSnap, ProcEntry) do begin s := ProcEntry.szExeFile; lb_Processes.Items.add(ExtractFileName(s)); end; end; end; CloseHandle(hSnap); end;
Delphi-Quellcode:
Ich weiß, ist nicht die sauberste Lösung, aber für mich reicht es und das wichtigste: bisher funktionierts. :dance:
function TForm1.getProcessID(Exename: string): DWORD;
var hProcSnap: THandle; pe32: TProcessEntry32; begin result := 0; hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); if hProcSnap <> INVALID_HANDLE_VALUE then begin pe32.dwSize := SizeOf(ProcessEntry32); if Process32First(hProcSnap, pe32) = true then begin while Process32Next(hProcSnap, pe32) = true do begin if pos(Exename, pe32.szExeFile) <> 0 then result := pe32.th32ProcessID; end; end; CloseHandle(hProcSnap); end; end; |
Re: Desktop schließen/freigeben
also ich hole mir alle Threads und mit GetThreadDesktop hole ich mir den entsprechenden Desktop dazu :-D
Denn du musst bedenken das ein nicht der Prozess an einen Desktop gebunden ist sondern der Thread. Es kann also auch Prozesse geben die ihre Threads auf alle Desktops verteilen. |
Re: Desktop schließen/freigeben
hey, vielen vielen dank, da hät ich ja lange suchen können :mrgreen: :shock: :drunken:
kann jetzt leider erst montag wieder in delphi rein, da probier ichs mal danke nochmals :party: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz