Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FindWindow in einem Service unter Vista (https://www.delphipraxis.net/133525-findwindow-einem-service-unter-vista.html)

Shark99 4. Mai 2009 05:37


FindWindow in einem Service unter Vista
 
Hi.

Hier ist mein Code:

Delphi-Quellcode:
procedure SendMessageToWindow(msg: LongWord;value:longword=0);
var Wnd: THandle;
begin
  Wnd := FindWindow('myClass', NIL);
  if Wnd > 0 then
  begin
       if IsWindowResponding(Wnd,100) then
          SendMessage( HWND_BROADCAST,
               RegisterWindowMessage('myAppMessage'),
               msg,
               value )
       else
           Error('hung!!');
  end;
end;
Es funktioniert in einer normalen Application (sowohl vista als auch xp).
Es funktioniert in einem Service unter XP.
Es funktioniert NICHT in einem Service unter Vista. Wnd ist da immer 0.

Anscheinend funktioniert FindWindow in einem Service unter Vista nicht mehr.

Gibt es eine andere Möglichkeit Nachchrichten an ein Fenster zu schicken? (damit es z.B. in den Vordergrund kommt).

Danke im Voraus!

jaenicke 4. Mai 2009 05:39

Re: FindWindow in einem Service unter Vista
 
Interaktive Dienste gibt es unter Vista aus Sicherheitsgründen nicht mehr, und auch bei XP musste man das ggf. erlauben.

Shark99 4. Mai 2009 06:53

Re: FindWindow in einem Service unter Vista
 
Der Dienst ist nicht als Interaktiv gekennzeichnet! (funktioniert also unter XP mit ausgeschalteter Interaktivität).

hoika 4. Mai 2009 07:31

Re: FindWindow in einem Service unter Vista
 
Hallo,

Ursache und mögliche Lösungen hier.

FindWindow Service Vista


Heiko

Luckie 4. Mai 2009 08:21

Re: FindWindow in einem Service unter Vista
 
Zitat:

Zitat von Shark99
Der Dienst ist nicht als Interaktiv gekennzeichnet!

Und genau da sist das Problem. Ein Service läuft in einer anderen WindowsStation als der Desktop des angemeldeten Benutzers und hat somit keinen Zugriff auf den Desktop des angemeldeten Benutzers. Überlicherweise löst man das so, dass man eine normale Anwendung hat, die mit dem Dienst über IPC kommuniziert.

Shark99 4. Mai 2009 08:30

Re: FindWindow in einem Service unter Vista
 
Luckie, wieso funktioniert es dann unter XP? Ist es nur Zufall dass es dort in der gleichen WS ist?

Luckie 4. Mai 2009 08:44

Re: FindWindow in einem Service unter Vista
 
Das kann unter XP nur mit einem interaktiven Service funktionieren.

hoika 4. Mai 2009 08:50

Re: FindWindow in einem Service unter Vista
 
Hallo,

unter welchem Account läuft denn der Dienst unter XP ?
Vielleicht ist bei dem benutzten Account interaktiv automatisch "freigeschaltet".


Heiko

Shark99 4. Mai 2009 08:58

Re: FindWindow in einem Service unter Vista
 
Gibt es keinen Workaround um eine Nachricht aus dem Service zu der App zu schicken? In die andere Richtung geht es ja, über den ServiceManager.

wicht 4. Mai 2009 09:07

Re: FindWindow in einem Service unter Vista
 
Ich habe das über ein MemoryMapped-File und ein Event/Mutex/whatever gebaut. Ist relativ einfach und funktioniert gut, Source kann ich leider keinen posten, da nicht zuhause :)

HTH


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.
Seite 1 von 3  1 23      

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