Autor Beitrag
holgerbremen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120



BeitragVerfasst: Fr 26.11.10 14:48 
Ich brauche aus einem Dienst heraus ein Fensterhandle. Das mache ich mit FindWindow.
ausblenden Quelltext
1:
2:
3:
4:
 
 hWatchDog : THandle;

 hWatchDog := FindWindow(PChar('TFormWatchDog'),nil);


Aus einer normalen Anwendung heraus bekomme ich ein gültiges Handle. Führe ich den gleichen Code in einem Dienst aus, ist das Handle 0.

Gibts dafür eine Erklärung und wie kann unter einem Dienst eine FensterHandle bekommmen?

Gruß
Holger
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 26.11.10 15:02 
Der Dienst läuft in einem anderen Desktop als der, den der Benutzer sieht und in dem die Anwendungen laufen.

Deshalb ist das relativ kompliziert, von dem Handling ganz abgesehen auch logisch. Denn du musst eben erst einmal herausfinden welcher Desktop denn nun der ist, den der Benutzer sieht. Und ob das der ist, in dem das Programm läuft, weißt du damit immer noch nicht unbedingt (multi-user...).


Zuletzt bearbeitet von jaenicke am Fr 26.11.10 15:03, insgesamt 1-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 26.11.10 15:03 
Dein Systemdienst läuft in einer anderen WindowsStation und hat einen eigen Desktop. Dein Dienst sieht also den Desktop des angemeldeten Benutzers gar nicht.

Und wenn es dir um Interprocess Communication geht, solltest du dir andere Möglichkeiten mal ansehen. Als da wären Pipes, Mailslots, ...

Eignet man sich nicht eigentlich wenigsten etwas Grundwissen an, über die Technologien mit denen man umgehen will bevor man anfängt zu programmieren oder ist es allgemein üblich einfach so aufs gerate Wohl los zu programmieren?
holgerbremen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120



BeitragVerfasst: So 28.11.10 22:37 
Danke für die Anworten. Meine Recherchen haben inzwischen das gleiche ergeben. Klingt im Nachhinein aus logisch.

Da ich zwischen zwei Prozessen einfach nur Daten austauschen will, muss es nicht unbedingt über Messages laufen. Mit MemoryMappedFiles werde ich es wohl lösen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 28.11.10 22:42 
Da fehlt dann noch die Möglichkeit von Benachrichtigungen. Da gibt es noch Pipes, Semaphore, ...