AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Desktop schließen/freigeben

Ein Thema von SirThornberry · begonnen am 17. Jan 2006 · letzter Beitrag vom 25. Okt 2007
Antwort Antwort
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

Desktop schließen/freigeben

  Alt 17. Jan 2006, 22:58
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#2

Re: Desktop schließen/freigeben

  Alt 17. Jan 2006, 23:12
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Desktop schließen/freigeben

  Alt 17. Jan 2006, 23:18
Ok, da werd ich das mal probieren. Thx.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Desktop schließen/freigeben

  Alt 22. Okt 2007, 14:28
*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.
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Desktop schließen/freigeben

  Alt 24. Okt 2007, 14:08
Das muss doch irgendwie zu machen sein.
SirThornberry hats doch auch irgendwie mit seinem klasse Freeware tool hinbekommen.
Weiß es einer, bzw verrät´s mir wer?
mfg spawn
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Desktop schließen/freigeben

  Alt 24. Okt 2007, 16:35
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Desktop schließen/freigeben

  Alt 25. Okt 2007, 07:44
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Desktop schließen/freigeben

  Alt 25. Okt 2007, 19:28
also ich hole mir alle Threads und mit GetThreadDesktop hole ich mir den entsprechenden Desktop dazu
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Desktop schließen/freigeben

  Alt 25. Okt 2007, 20:44
hey, vielen vielen dank, da hät ich ja lange suchen können
kann jetzt leider erst montag wieder in delphi rein, da probier ichs mal
danke nochmals
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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