Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Desktop schließen/freigeben (https://www.delphipraxis.net/61179-desktop-schliessen-freigeben.html)

SirThornberry 17. Jan 2006 21:58


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.

Basilikum 17. Jan 2006 22:12

Re: Desktop schließen/freigeben
 
Zitat:

Deleting a desktop is a little trickier. The only way to delete a desktop is to kill all processes running on it, at which point, it is automatically deleted. [..]
http://www.codeproject.com/csharp/Cs...pSwitching.asp

SirThornberry 17. Jan 2006 22:18

Re: Desktop schließen/freigeben
 
Ok, da werd ich das mal probieren. Thx.

mleyen 22. Okt 2007 13:28

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:

mleyen 24. Okt 2007 13:08

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

SirThornberry 24. Okt 2007 15:35

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.

mleyen 25. Okt 2007 06:44

Re: Desktop schließen/freigeben
 
So liste ich mir die ganzen Prozesse (also die *.exe namen) in einer ListBox auf:

Delphi-Quellcode:
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;
Und bei auswahl eines Prozesses hohl ich mir dann vorerst so die Prozess-ID, um damit dann den Prozess zu killn:

Delphi-Quellcode:
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;
Ich weiß, ist nicht die sauberste Lösung, aber für mich reicht es und das wichtigste: bisher funktionierts. :dance:

SirThornberry 25. Okt 2007 18:28

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.

mleyen 25. Okt 2007 19:44

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 17:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz