AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Start eines Keyboard-Hooks aus einem Thread
Thema durchsuchen
Ansicht
Themen-Optionen

Start eines Keyboard-Hooks aus einem Thread

Ein Thema von hesch21 · begonnen am 7. Sep 2012 · letzter Beitrag vom 13. Sep 2012
Antwort Antwort
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#1

AW: Start eines Keyboard-Hooks aus einem Thread

  Alt 10. Sep 2012, 11:39
Zitat:
Dämlich, dämlich!

So wie ich das gemacht habe, wird der Thread ausgeführt und sofort wieder beendet. Und damit halt auch der Hook. Ein JvThread1.WaitFor; hat Abhilfe gebracht und jetzt funktionierts.

Jetzt kann ich dahinter, auszuprobieren, ob's auch auf Screen-Saver-Ebene klappt.

Danke für die Unterstützung!
Eine Frage:
Der Hook funktioniert nun dauerhaft ohne eine Nachrichtenschleife im Thread-Objekt selbst?

Würde mich wundern. Ich dachte, dass die Callback-Funktion nur einmal aufgerufen wird und nach der Abarbeitung des Threads schließt sich dieser und damit auch der Hook.
  Mit Zitat antworten Zitat
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#2

AW: Start eines Keyboard-Hooks aus einem Thread

  Alt 10. Sep 2012, 13:28
Ja, eigentlich hast Du schon recht, aber ich habe den Thread ja wie bereits erwähnt testeshalber einfach ganz bösartig ausgebremst, indem ich im Thread selbst ein WaitFor auf den Thread gesetzt habe. Der wird nie fertig und drum geht das.
Wie gesagt, das ganze war nur für Testzwecke und inzwischen habe ich leider feststellen müssen, dass auch das nichts hilft, um auf WinSta0\Screen-Saver verlässlich einen KeyboardHook zu setzen. Das ganze ist einfach zum heulen. Bei XP klappts immer, bei W-7 klappt's bei ein paar Bildschirmschonern (z.B. beim Seifenblasen), bei anderen aber nicht (z.B. Schleifen, 3D-Text). Und den 3D-Text gibt's ja auch schon bei XP.
Und das seltsame ist, dass eigentlich der Hokk gesetzt wird (ich bekomme ein Handle zurück), nur die CallBackFunktion wird nie angesteuert. Wenn da noch irgend jemand eine Idee hat, woran das liegen könnte, meine letzte Idee war jetzt die mit dem Start des Hooks aus einem Thread.
Heinz Schneider
  Mit Zitat antworten Zitat
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Start eines Keyboard-Hooks aus einem Thread

  Alt 10. Sep 2012, 13:54
Wenn du deine Applikation mit Adminrechten aufrufst, funktioniert dann die Callback-Prozedur zuverlässig?

Geändert von delphinub23 (10. Sep 2012 um 13:56 Uhr)
  Mit Zitat antworten Zitat
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#4

AW: Start eines Keyboard-Hooks aus einem Thread

  Alt 10. Sep 2012, 14:34
Das Programm, welches den Hook setzt, wird von einem Dienst über CreateProcessAsUser gestartet. Von da müssten die Rechte eigentlich genügen, zumal der Bildschirmschoner selbst im Normalfall unter dem angemeldeten Benutzer läuft. Mein Programm kann ich ja auf dem Screen-Saver-Desktop starten und das läuft dort problemlos, nur eben der Hook nicht. Eigentlich glaube ich kaum, dass der Hook nur gerade auf diesem Desktop andere Rechte für nicht mal alle Bildschirmschoner benötigt. Aber ich werde es trotzdem mal mit einem Starter-Programm und Elevation auf Administratoren-Rechte versuchen. Zum Glück gibt es ja hierfür die JEDI-API. Da ist bei den Examples ein fast fertiges Starterprogramm mit Elevation.
Heinz Schneider
  Mit Zitat antworten Zitat
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Start eines Keyboard-Hooks aus einem Thread

  Alt 12. Sep 2012, 12:56
Zitat:
Das Programm, welches den Hook setzt, wird von einem Dienst über CreateProcessAsUser gestartet. Von da müssten die Rechte eigentlich genügen, zumal der Bildschirmschoner selbst im Normalfall unter dem angemeldeten Benutzer läuft. Mein Programm kann ich ja auf dem Screen-Saver-Desktop starten und das läuft dort problemlos, nur eben der Hook nicht. Eigentlich glaube ich kaum, dass der Hook nur gerade auf diesem Desktop andere Rechte für nicht mal alle Bildschirmschoner benötigt. Aber ich werde es trotzdem mal mit einem Starter-Programm und Elevation auf Administratoren-Rechte versuchen. Zum Glück gibt es ja hierfür die JEDI-API. Da ist bei den Examples ein fast fertiges Starterprogramm mit Elevation.
Konntest du es schon testen?
  Mit Zitat antworten Zitat
hesch21

Registriert seit: 31. Aug 2004
Ort: Basel
114 Beiträge
 
Delphi XE2 Enterprise
 
#6

AW: Start eines Keyboard-Hooks aus einem Thread

  Alt 12. Sep 2012, 13:36
Sorry, bin etwas unter Druck!
ja, ich hab's getestet, leider ohne Erfolg. Auch mit expliziten Admin-Rechten klappt's nicht immer. Und dann bin ich noch auf einen Screen-Blanker (allerdings nicht von Microsoft) gestossen, der knallt irgendwie gleich mal alles ab, was auf WinSta0\Screen-Saver läuft, sobald er sich selbst beendet. Ganz hässlich. Aber so langsam komme ich zum Schluss, dass ich wieder mal den Support von Microsoft bemühen und halt die 400 Dollar aufwerfen muss. Ich habe keine Ahnung mehr, wo suchen.
Heinz Schneider
  Mit Zitat antworten Zitat
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#7

AW: Start eines Keyboard-Hooks aus einem Thread

  Alt 12. Sep 2012, 14:41
Zitat:
...Mein Programm kann ich ja auf dem Screen-Saver-Desktop starten und das läuft dort problemlos...
Du startest den Screen-Saver-Desktop aus der Anwendung direkt, also nicht aus dem Hook-Thread?
Wenn ja, musst du dann nicht dem Thread noch den entsprechenden (Screen-Saver-Desktop) zuweisen?

SetThreadDesktop()

Keine Ahnung, ob´s was bringt. Hab nur gerade was davon gelesen...
Könnte ja sein, dass der Thread den Hook auf einem gesicherten Desktop ohne die o.g. Zuweisung nicht anlegen kann.
  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 21:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz