Es gab mal für Windows ein Programm namens "Pulse", das alle Tastendrucks mitgezählt hat, die man so täglich macht. Das fand ich ziemlich interresant und habs mal probiert nachzubauen. Jetzt dachte ich baue ich das so, das ich ein Symbol mache, das oben in der Leiste ist, und bei doppelklick es sich ein Fenster öffnet, bei dem steht wie oft bis jetzt gedrückt wurde. Alles kein Problem. Außer das mit dem Tastensignal, will nicht so recht. Mit einem normalen Widget Signal geht es nicht, da ja dann das Fenster beziehungsweise das Widget aktiv sein muss. Mit raw_input oder so irgendetwas ist auf umständlich beziehungsweise geht auch nicht, wenn das Fenster oder die Konsole nicht aktiv ist.
Weiß jemand eine Lösung, mit dem ich ein Tastendruck bemerkbar machen kann? Also es soll eben so ein Art Deamon sein, das man nichts sieht außer das Symbol in der Leiste aber trotzdem die Tasten gezählt werden.
Schon mal Danke
Tastendruckzähler
Vielleicht mit pywin32.
http://sourceforge.net/projects/pywin32/
http://timgolden.me.uk/python/win32_how_do_i.html
http://sourceforge.net/projects/pywin32/
http://timgolden.me.uk/python/win32_how_do_i.html
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo gugugs!
Auf das hier http://timgolden.me.uk/python/win32_how ... tkeys.html will dich bremer hinweisen.
Und hier sind noch zwei Links, in denen ebenfalls systemweit Hotkeys abgefangen werden:
- http://www.python-forum.de/post-54408.html#54408
- http://www.python-forum.de/topic-18127.html
mfg
Gerold

Auf das hier http://timgolden.me.uk/python/win32_how ... tkeys.html will dich bremer hinweisen.
Und hier sind noch zwei Links, in denen ebenfalls systemweit Hotkeys abgefangen werden:
- http://www.python-forum.de/post-54408.html#54408
- http://www.python-forum.de/topic-18127.html
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Danke
Ich hab mich allerdings jetzt nun mal ein bisschen an Xlib probiert. Doch in der Documentation von der Seite, verstehe ich nicht so wirklich viel. Wie kann ich denn mit Xlib einfach nur jeden Tastendruck abfangen und anzeigen lassen? Ich finde in der Documentation ist das ein bisschen kompliziert erklärt.
Danke
Ich hab mich allerdings jetzt nun mal ein bisschen an Xlib probiert. Doch in der Documentation von der Seite, verstehe ich nicht so wirklich viel. Wie kann ich denn mit Xlib einfach nur jeden Tastendruck abfangen und anzeigen lassen? Ich finde in der Documentation ist das ein bisschen kompliziert erklärt.
Danke
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo gugugs!gugugs hat geschrieben:bisschen an Xlib probiert
"xlib" und "oben in der Leiste"? Sprichst du von Linux oder doch von Windows?
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Keine Ahnung von der Xlib. Ich habe mich zwar mal mit python-xlib gespielt, aber die wird nicht weiterentwickelt. Ich hatte mir mal vorgenommen, irgendwie mit ctypes auf die Xlib zuzugreifen, aber das hat sich verlaufen.gugugs hat geschrieben:Weiß jemand wie ich mit Xlib einen einfachen Tastendruck abfange?
Siehe: http://python-xlib.sourceforge.net/
Das hier ist der Code, den ich damals irgendwoher hatte. Aber ob er funktioniert, weiß ich jetzt nicht mehr.
Code: Alles auswählen
from Xlib.display import Display
from Xlib import X
def handle_event(aEvent):
keycode = aEvent.detail
print keycode
if aEvent.type == X.KeyPress:
print keycode
def main():
# current display
disp = Display()
root = disp.screen().root
# we tell the X server we want to catch keyPress event
root.change_attributes(event_mask = X.KeyPressMask)
keys = [disp.keysym_to_keycode(ord(s)) for s in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"]
print keys
for keycode in keys:
root.grab_key(
keycode,
X.AnyModifier,
1,
X.GrabModeAsync,
X.GrabModeAsync
)
while 1:
event = root.display.next_event()
handle_event(event)
if __name__ == '__main__':
main()
Wenn das unter Linux (Gnome) funktioniert, dann brauchst du nur noch alle abzufangenen Tasten registrieren. Und ein Symbol in die "Leiste" zu legen, ist mit wxPython auch kein Problem. Die wxPython-Demo sollte dir zeigen, wie das funktioniert.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Also ich finde das mit Xlib sehr interessant, aber ich verstehe das ganze Prinzip noch nicht so wirklich. Die einzigste Anleitung die ich gefunden habe ist diese hier http://python-xlib.sourceforge.net/doc/ ... ib_11.html
und die lässt meiner Meinung nach sehr zu wünschen übrig. Ansonsten, hab ich bis jetzt nur komplexe Beispiele gesehen. Wär wirklich super wenn mir vllt jemand helfen könnte, das ein bisschen besser zu verstehen.
Danke schon mal
edit: also ich weiß ja nicht, ob ich nicht richtig suche, aber es gibt echt nirgends ein tutorial das etwas zu xlib erklärt. Wie soll jemand, der damit noch nicht viel gemacht hat, denn irgendeinen Zusammenhang verstehen???
und die lässt meiner Meinung nach sehr zu wünschen übrig. Ansonsten, hab ich bis jetzt nur komplexe Beispiele gesehen. Wär wirklich super wenn mir vllt jemand helfen könnte, das ein bisschen besser zu verstehen.
Danke schon mal
edit: also ich weiß ja nicht, ob ich nicht richtig suche, aber es gibt echt nirgends ein tutorial das etwas zu xlib erklärt. Wie soll jemand, der damit noch nicht viel gemacht hat, denn irgendeinen Zusammenhang verstehen???
@gugugs: Das Python-Modul ist soweit ich das sehe nur eine dünne Schicht über der "echten" xlib, also sollte man dafür nach Informationen suchen.
Hier hat mal jemand was in C++ gemacht. Schau dir mal die Funktion `KeyGrabber::grabKeys()` an. Ansonsten hat die Xlib noch XGrabKeyboard(). Vielleicht hilft dir das ja weiter...
Ich hab hier mal nen ersten Ansatz in Python gemacht. Sachen wie <Shift> und <Alt> werden dabei noch nicht beachtet. Außerdem kann man nichts mehr woanders eingeben (schätze, das Event muss irgendwie weitergeleitet werden), aber vielleicht hilft es dir für den Anfang. 

Hallo, ich möchte das Thema noch einmal auffrischen, da ich noch eine Frage dazu habe.
Mit xlib hab ich das nun hinbekommen, also in Linux, auch wenn es nicht so wirklich einfach war.
Nun möchte ich aber das ganze auch in Windows hinbekommen.
Um es noch einmal ganz kurtz zu erklären, ich spreche nicht von Hotkeys, sondern ich hätte es gern so, das sobald eine Taste gedrückt wird, egal welche, das dann etwas ausgeführt wird, also ein Funktione oder irgendwas, das ist unwichtig. Ich will es nur so hinbekommen, das ein Tastendruck erkannt wird.
Habe schon ein bisschen mit win32api und mit pywin32 getestet, habe es aber nicht so wirklich hinbekommen.
Danke, falls mir jemand auf die Sprünge helfen könnte
Mit xlib hab ich das nun hinbekommen, also in Linux, auch wenn es nicht so wirklich einfach war.
Nun möchte ich aber das ganze auch in Windows hinbekommen.
Um es noch einmal ganz kurtz zu erklären, ich spreche nicht von Hotkeys, sondern ich hätte es gern so, das sobald eine Taste gedrückt wird, egal welche, das dann etwas ausgeführt wird, also ein Funktione oder irgendwas, das ist unwichtig. Ich will es nur so hinbekommen, das ein Tastendruck erkannt wird.
Habe schon ein bisschen mit win32api und mit pywin32 getestet, habe es aber nicht so wirklich hinbekommen.
Danke, falls mir jemand auf die Sprünge helfen könnte
Unter Linux hab ich nun die Vorlage von der XLib Documentation so gerändert, das sie meinen Wünschen entspricht. Das Ergebniss sieht so aus:
Falls sich jemand für das ganze Programm interessiert, kann er sich bei mir per PN melden. Ist ganz lustig.
Wie gesagt es ist ein Art Daemon, der sich in die leiste setzt jeden Tastendruck mitzälht und bei klick einen Kalender anzeigt und alle Tastendruckzählungen pro Tag in eine List setzt.
Programmiert ist es mit natürlich Python, GTK+, slite3 und XLib
Code: Alles auswählen
def callback(reply):
data=reply.data
while len(data):
event, data=rq.EventField(None).parse_binary_value(data, recorddpy.display, None, None)
if event.type in [X.KeyPress]:
print "Ich bin ein Tastendruck"
ctx=recorddpy.record_create_context(
0,
[record.AllClients],
[{
'core_requests': (0, 0),
'core_replies': (0, 0),
'ext_requests': (0, 0, 0, 0),
'ext_replies': (0, 0, 0, 0),
'delivered_events': (0, 0),
'device_events': (X.KeyPress, X.MotionNotify),
'errors': (0, 0),
'client_started': False,
'client_died': False,
}])
recorddpy.record_enable_context(ctx, callback)
Wie gesagt es ist ein Art Daemon, der sich in die leiste setzt jeden Tastendruck mitzälht und bei klick einen Kalender anzeigt und alle Tastendruckzählungen pro Tag in eine List setzt.
Programmiert ist es mit natürlich Python, GTK+, slite3 und XLib
So hab nun endlich etwas gefunden, also unter Windows klappt es gut damit:
http://pyhook.wiki.sourceforge.net/pyHook_Tutorial
http://pyhook.wiki.sourceforge.net/pyHook_Tutorial