AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Keyboard Hook in einem Dienst möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

Keyboard Hook in einem Dienst möglich?

Ein Thema von Supergrobie · begonnen am 29. Mär 2005 · letzter Beitrag vom 29. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
Supergrobie

Registriert seit: 22. Okt 2003
Ort: Aachen
28 Beiträge
 
Delphi XE7 Professional
 
#1

Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 09:46
Hallo!

Ich habe mir die anderen Threads zum Thema Hook und zu den Diensten schon angesehen.
Leider fehlen mir dazu noch ein paar Dinge, da ich mich erst neu mit diesem Thema beschäftige!

Ist es möglich in einem Dienst eine Nachrichten Schleife ala WndProc zu starten???
Wenn ja wie??

Ist es möglich in einem Dienst ohne DLL eine Hook zu installieren???
(was mir ja im Prinzig schon gelungen ist, leider ruft der Hook meine KeyboardProg nicht auf)

Das ganze benötige ich um eine zusätzliche Tastatur in unserem Kassensystem zu integrieren.
Zusätzlich läuft über den Tastaturanschluß noch ein Barcodescanner. Ich möchte auch über
die Geschwindigkeit der Eingaben Bescheid wissen das diese Einfluss auf die Programmsteuerung
haben... Also eine etwas komliziertere Geschichte.

Vielen Dank für Eure Hilfe!!!

Stefan
Stefan
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#2

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 10:53
Zitat von Supergrobie:
Ist es möglich in einem Dienst eine Nachrichten Schleife ala WndProc zu starten???
Wenn ja wie?
Ja und nein.

Ja, weil Dienste auch in einem Desktop-Objekt einer WindowStation ausgeführt werden und weil jeder Thread (auch ohne Fenster) eine Message-Queue haben kann.

Nein, weil Du wahrscheinlich versuchen willst, mit dem Fenster vom interaktiven Desktop aus (womit einer der aktuellen Benutzer arbeitet) zu kommunizieren. Das wird deshalb schwierig, weil Fenster-Nachrichten auf den aktuellen Desktop beschränkt sind. Zudem sollten Dienste, welche unter dem Systemkonto ausgeführt werden (aus Sicherheitsgründen) nicht 'interaktiv' (eine Verbindung zum interaktiven Desktop) sein - und somit werden sie in einem eigenen, nicht-interaktiven Desktop ausgeführt.

Zitat von Supergrobie:
Ist es möglich in einem Dienst ohne DLL eine Hook zu installieren?
Ja und nein.

Lokale Hooks, ja.
Globale Hooks, nein.

Zitat von Supergrobie:
Das ganze benötige ich um eine zusätzliche Tastatur in unserem Kassensystem zu integrieren.
Zusätzlich läuft über den Tastaturanschluß noch ein Barcodescanner. Ich möchte auch über
die Geschwindigkeit der Eingaben Bescheid wissen das diese Einfluss auf die Programmsteuerung
haben...
Kommt das Paket komplett ohne Software und bietet der Hersteller keinen Support für das verwendete Betriessystem...?

Zitat von Supergrobie:
Also eine etwas komliziertere Geschichte.
Jupp.
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#3

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 11:19
Zitat von NicoDE:
Ja und nein.

Ja, weil Dienste auch in einem Desktop-Objekt einer WindowStation ausgeführt werden und weil jeder Thread (auch ohne Fenster) eine Message-Queue haben kann.

Nein, weil Du wahrscheinlich versuchen willst, mit dem Fenster vom interaktiven Desktop aus (womit einer der aktuellen Benutzer arbeitet) zu kommunizieren. Das wird deshalb schwierig, weil Fenster-Nachrichten auf den aktuellen Desktop beschränkt sind. Zudem sollten Dienste, welche unter dem Systemkonto ausgeführt werden (aus Sicherheitsgründen) nicht 'interaktiv' (eine Verbindung zum interaktiven Desktop) sein - und somit werden sie in einem eigenen, nicht-interaktiven Desktop ausgeführt.
Sollte man das nicht insofern einschränken, als ein Dienst zwar nicht das Flag "Interaktiv" tragen sollte, jedoch ein Zugang über das Anpassen des WinSta/Desktop-ACL durchaus legitim ist?! Gegebenenfalls kann man sogar über Impersonation zusätzlich Sicherheit einbauen. Dazu sollte es schon reichen, wenn die Hook-DLL von einem Thread geladen wird, welcher unter anderem Benutzerkontext läuft.

Die meisten scheuen es doch nur, weil die APIs zum Modifzieren der ACLs, SDs usw. usf. etwas friemelig sind

Ich vergaß die Stichworte:
- MSDN-Library durchsuchenSetThreadDesktop (mit Beispiel "Interacting with the User in a Service").
- MSDN-Library durchsuchenOpenDesktop
- MSDN-Library durchsuchenSetProcessWindowStation (mit Beispiel "Interacting with the User in a Service").
- MSDN-Library durchsuchenSetSecurityInfo
- MSDN-Library durchsuchenSetNamedSecurityInfo
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 11:33
Zitat von Mephistopheles:
Sollte man das nicht insofern einschränken, als ein Dienst zwar nicht das Flag "Interaktiv" tragen sollte, jedoch ein Zugang über das Anpassen des WinSta/Desktop-ACL durchaus legitim ist?!
Das Anpassen der Sicherheitsbeschreibungen würde ich nicht als Alternative in Betracht ziehen (je nach zu unterstützender NT-Version 'viel Arbeit' bis 'zu aufwändig').

Zitat von Mephistopheles:
Gegebenenfalls kann man sogar über Impersonation zusätzlich Sicherheit einbauen. Dazu sollte es schon reichen, wenn die Hook-DLL von einem Thread geladen wird, welcher unter anderem Benutzerkontext läuft.
Für eine weitere Tastatur braucht man keinen Hook (dafür sind Kernelmodus-Treiber da, oder alternativ Benutzermodus-Tools, welche SendInput und Konsorten verwenden). Wenn, dann würde ich den Hook in einem Tool implementieren, welches unter dem Benutzeraccount läuft und mit dem Service kommuniziert...

Zitat von Mephistopheles:
Die meisten scheuen es doch nur, weil die APIs zum Modifzieren der ACLs, SDs usw. usf. etwas friemelig sind
Nicht ganz unbegründet (Inheritance gibt's erst seit 2k und viele High-Level-APIs verhalten sich je nach Version merkwürdig).
  Mit Zitat antworten Zitat
Supergrobie

Registriert seit: 22. Okt 2003
Ort: Aachen
28 Beiträge
 
Delphi XE7 Professional
 
#5

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 11:51
Hmmm... Puuh!

Das scheint ja doch schwierig zu werden

Ich wäre ja froh wenn ich mit meinem Dienst die Tastatur hooken könnte.
Irgendwie kann ist Ihn starten und er beendet sich auch nicht selbständig.
Habe den Hook jetzt in eine DLL gepackt. Wie bei AyaKoshigaya's DLL nur das ich mir die Daten erst mal
wegschreibe. Senden kann ich sie an meinen Dienst ja nicht, magels Fensterhandle...

Aber kann es denn sein dass ich so auch nicht an das Benutzerdesktop ran komm, also
dessen Eingaben nicht bekomme?? Es wird anscheinend gar nichts aufgezeichnet.

Den Hook WH_KEYBOARD_LL gibts bei meiner windows.pas auch garnicht

Für die zusätzliche Tastatur gibts keine Treiber, braucht man normal auch nicht.
Ich möchte nur die die Eingaben kontrollieren, da es sich um ein Kassenprogamm
mit sehr vielen Funktionen handelt wo es für mich schon einen Unterschied macht ob die
Eingaben von einem Barcode kommen oder von Hand getippt werden was sich nur im Tempo unterscheidet.


Stevie
Stefan
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 11:59
Zitat von Supergrobie:
Aber kann es denn sein dass ich so auch nicht an das Benutzerdesktop ran komm, also
dessen Eingaben nicht bekomme?
Der Tastaturhook bezieht sich immer nur auf den Desktop, in welchem er installiert wurde (in diesem Falle der Desktop des Dienstes).

Zitat von Supergrobie:
Den Hook WH_KEYBOARD_LL gibts bei meiner windows.pas auch garnicht
Neuere Delphi-Version verwenden, oder die Konstante selbst deklarieren.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 12:02
Zitat von Supergrobie:
Senden kann ich sie an meinen Dienst ja nicht, magels Fensterhandle...
Es gibt noch andere Wege der Kommunikation zwischen zwei Prozessen: (Named) Pipes, MMF.

Zitat:
Aber kann es denn sein dass ich so auch nicht an das Benutzerdesktop ran komm, also
dessen Eingaben nicht bekomme?? Es wird anscheinend gar nichts aufgezeichnet.
Ein Hook, der von einer Anwendung geladen wird, die in der WinStat0 auf dem Default Desktop läuft, sollt eiegtnlöcih diese Eingaben bekommen.

Zitat:
Den Hook WH_KEYBOARD_LL gibts bei meiner windows.pas auch garnicht
Äh, wenn es schon daran scheitert, dann würde ich überlegen, ob du das nötige Wissen hast. In Delphi, sowie in der Systemprogrammierung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Supergrobie

Registriert seit: 22. Okt 2003
Ort: Aachen
28 Beiträge
 
Delphi XE7 Professional
 
#8

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 12:10
Zitat:
Den Hook WH_KEYBOARD_LL gibts bei meiner windows.pas auch garnicht
Zitat:
Äh, wenn es schon daran scheitert, dann würde ich überlegen, ob du das nötige Wissen hast. In Delphi, sowie in der Systemprogrammierung.

Mag sein, aber jeder fängt mal an!
Wenn man sich nicht dran gibt kann man ja nix lernen, oder?
Bei mir ist es 10 Jahre her als ich mich das letzte mal mit hooks rumgeschlagen habe, zur komunikation zwischen C++ und Visual Basic!
Ich nutze jetzt die Delphi 2005 Version und da ist die Konstante eben nicht in der windows.pas drin!

Stefan
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 12:19
Zitat von Supergrobie:
Mag sein, aber jeder fängt mal an!
Wenn man sich nicht dran gibt kann man ja nix lernen, oder?
Das ist war, aber wenn ich gerade anfange zu boxen, dann würde ich mir auch nicht einen der Klitschko Brüder als ersten Gegner aussuchen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Supergrobie

Registriert seit: 22. Okt 2003
Ort: Aachen
28 Beiträge
 
Delphi XE7 Professional
 
#10

Re: Keyboard Hook in einem Dienst möglich?

  Alt 29. Mär 2005, 12:24
Zitat:
Das ist war, aber wenn ich gerade anfange zu boxen, dann würde ich mir auch nicht einen der Klitschko Brüder als ersten Gegner aussuchen.
Nützt mir aber alles nix jetzt über Klitschko oder ähnliches nachzudenken. Damit komm ich nicht weiter!
Ich muß dafür nun eben ne Lösung finden...

Danke aber trotzdem!

Stefan
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:08 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