AGB  ·  Datenschutz  ·  Impressum  







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

FindWindow als System

Ein Thema von SleepyMaster · begonnen am 21. Apr 2004 · letzter Beitrag vom 23. Apr 2004
Antwort Antwort
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#1

FindWindow als System

  Alt 21. Apr 2004, 15:32
Hi ihrs!

Ist es irgendwie möglich FindWindow ein einem Programm das unter dem Systemkonto läuft so zu benutzen, dass es Fenster vom aktuell angemeldeten Benutzer findet???

Vielen Dank für eure Antworten schon mal
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: FindWindow als System

  Alt 21. Apr 2004, 16:44
Dienste und Programme die unter dem Systemkonto laufen, laufe auf einen anderen Desktop, so viel ich weiß.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#3

Re: FindWindow als System

  Alt 21. Apr 2004, 20:20
Ja! Das hab ich ja auch gerafft. Aber deshalb ja auch die Frage hier! Sonst wüsste ich ja wie es funktionert!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: FindWindow als System

  Alt 21. Apr 2004, 20:29
Zitat von SleepyMaster:
dass es Fenster vom aktuell angemeldeten Benutzer findet?
Von welchem der angemeldeten Benutzer.
(viele haben unter Windows XP die schnelle Benutzerabschlachtung, ähm -umschaltung (Fast User Switching) aktiviert - und damit sind auch ohne Tools mehrere interaktive Desktops unter verschiedenen Benutzerkonten möglich...)

Gruss Nico

ps: was Du suchst ist SetProcessWorkstation/SetThreadDesktop und eine Zeitmaschine (weil aufwändig)
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#5

Re: FindWindow als System

  Alt 23. Apr 2004, 13:52
OK! Ich hab jetzt schon seit gestern mit SetThreadDesktop rumprobiert.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hDesktop: THandle;
begin
SetLastError(0);
hDesktop:=OpenDesktop('default', DF_ALLOWOTHERACCOUNTHOOK, False, GENERIC_ALL);
if hDesktop <> 0 then
  begin
  if SetThreadDesktop(hDesktop) then
    begin
    Messagebox(0,'Hallo','Na',64);
    CloseDesktop (hDesktop);
    end;
  end;
if GetLastError<>0 then
  Messagebox(0,pchar(inttostr(GetLastError)),'',64);
end;
Ich hol mit OpenDesktop das Handle zu einem Desktop und ordne dann mit SetThreadDesktop diesen Desktop dem Programm zu. Das Programm macht dann keinen Fehler, aber das Fenster erscheint dann nur auf dem Logon Bildschirm und nicht wie gewünscht bei einem angemeldeten Benutzer.

Das ich bei OpenDesktop "default" einsetzen kann hab ich durch diesen Code herrausgefunden:

Delphi-Quellcode:
function EnumDesktopProc(lpszDesktop:LPTSTR;lParam:LPARAM):Boolean; stdcall;
begin
Form1.Treeview1.Items.AddChild(Form1.Treeview1.Items.Item[lParam],lpszDesktop).AbsoluteIndex;
result:=true;
end;

function EnumWindowStationProc(lpszWindowStation:LPTSTR; lParam:LPARAM): Boolean; stdcall;
begin
EnumDesktops(OpenWindowStation(lpszWindowStation,false,GENERIC_READ),@EnumDesktopProc,Form1.Treeview1.Items.AddChild(Form1.Treeview1.Items.Item[lParam],lpszWindowStation).AbsoluteIndex);
result:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Treeview1.Items.Clear;
EnumWindowStations(@EnumWindowStationProc,Treeview1.Items.AddChildFirst(nil,'pc').AbsoluteIndex);
end;
Aber was mich auch noch wundert: Wenn ich mich mit 2 Benutzern anstelle von nur einem gleichzeitig anmelde, müsste dann nicht noch ein Desktop mehr erscheinen??? Passiert bei mir zumindestens nicht. Ich hab immer nur
"Default", "Disconnect" und "Winlogon".

Weiß jemand eine Lösung, wie ich mit SetThreadDesktop es schaffe ein Programm, dass unter dem Benutzer System läuft, an einen anderen Desktop (z.B.: den des Benutzers, der grade am PC arbeitet) zu binden???
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#6

Re: FindWindow als System

  Alt 23. Apr 2004, 14:36
OK! Ich habs geschafft! Vielen Dank für deinen Tipp NicoDE!

Delphi-Quellcode:
var
  hwinstaUser,hdeskUser: THandle;
begin
SetLastError(0);
hwinstaUser:=OpenWindowStation('winsta0', FALSE, MAXIMUM_ALLOWED);
if hwinstaUser <> 0 then
  if SetProcessWindowStation(hwinstaUser) then
    begin
    hdeskUser:=OpenDesktop('Default', 0, FALSE, MAXIMUM_ALLOWED);
    if hdeskUser <> 0 then
      if SetThreadDesktop(hdeskUser) then
        Messagebox(0,'Es geht!!!','NA!!!',64);
    end;
if GetLastError<>0 then
  Messagebox(0,pchar(inttostr(GetLastError)),'Fehler',64);
  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 15:09 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