Ich habe folgendes Problem:
Ich möchte ein Programm schreiben, dass im Hintergrund läuft, und dennoch auf bestimmte Tastenkombinationen reagiert. Ich kann also keine grafische Oberfläche nutzen. Kann mir jemand sagen, wie ich meine Idee realisieren kann?
Ich weiß das dieses Thema schon des Öfteren in diesem Forum diskutiert wurde, ich konnte jedoch keine Antwort finden.
Würde mich freuen, wenn jemand eine Antwort parat hätte.
Gruß
LordMyder
Wieder mal: Keyloggen
Schau dir das Modul msvcrt an.
Hier ein kleines Beispiel:
Hier ein kleines Beispiel:
Code: Alles auswählen
import msvcrt
def keylogger(y=0):
keylog=''
while y<=1000:
x=msvcrt.getch()
keylog=keylog+x
y=y+1
print keylog
mfg
Thomas :-)
Thomas :-)
Danke, genau so was habe ich gesucht! Leider habe ich immer noch ein kleines Problem. Ich habe mit deinem Beispiel etwas rumprobiert und bin jetzt bei folgendem:
Das funktioniert einwandfrei, solang ich das script mit Konsole ausführe.
Aber ich wollte das Programm ja gerne im Hintergrund laufen lassen. Wenn ich jetzt das Script als .pyw speichere, dann gibt tkMessageBox permanent ein y mit Diärese aus.
Kann mir jemand sagen was ich falsch mache?
Danke schon mal,
Gruß
LordMyder
Edit (Leonidas): Code in Python-Tags gesetzt.
Code: Alles auswählen
import msvcrt
from Tkinter import *
import tkMessageBox
def keylogger(x=0):
while x<>"5":
x=msvcrt.getch()
root=Tk()
tkMessageBox.showwarning("Keypress",x)
root.destroy()
keylogger()
Aber ich wollte das Programm ja gerne im Hintergrund laufen lassen. Wenn ich jetzt das Script als .pyw speichere, dann gibt tkMessageBox permanent ein y mit Diärese aus.
Kann mir jemand sagen was ich falsch mache?
Danke schon mal,
Gruß
LordMyder
Edit (Leonidas): Code in Python-Tags gesetzt.
Mir ist gerade aufgefallen, dass das mit der Konsole auch nur funktioniert, wenn die Konsole im Focus ist. Ich vermute, dass das der Grund dafür ist, das es ohne Konsole nicht geht.
Aber auch hier die Frage:
Wer kann mir sagen wie ich das Problem löse?
Danke
LordMyder
Aber auch hier die Frage:
Wer kann mir sagen wie ich das Problem löse?
Danke
LordMyder
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi LordMyder!lordmyder hat geschrieben:Ich möchte ein Programm schreiben, dass im Hintergrund läuft, und dennoch auf bestimmte Tastenkombinationen reagiert.
Mit wxPython funktioniert das z.B. so:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
#
# Drückt man die Tastenkombination <WIN>+<q>, dann wird das Programm beendet.
# Drückt man die Tastenkombination <WIN>+<o>, dann wird eine MessageBox angezeigt.
import wx
wx.SetDefaultPyEncoding("iso-8859-1")
class MyFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Globale Hotkeys"):
wx.Frame.__init__(
self, parent, id, title, style = wx.DEFAULT_FRAME_STYLE | wx.WANTS_CHARS
)
# Registriert einen systemweiten Hotkey (<WIN> + <q>)
# Mögliche Modifikatoren: wx.MOD_SHIFT, wx.MOD_CONTROL, wx.MOD_ALT, wx.MOD_WIN
hotkey_id = wx.NewId()
print "Register Hotkey:", self.RegisterHotKey(hotkey_id, wx.MOD_WIN, 81)
self.Bind(wx.EVT_HOTKEY, self.close_me, id = hotkey_id)
# Registriert einen systemweiten Hotkey (<WIN> + <o>)
hotkey_id = wx.NewId()
print "Register Hotkey:", self.RegisterHotKey(hotkey_id, wx.MOD_WIN, 79)
self.Bind(wx.EVT_HOTKEY, self.show_messagebox, id = hotkey_id)
# Wurde nur gebraucht, um den KeyCode herauszufinden:
#self.Bind(wx.EVT_KEY_UP, self.on_frame_key_up)
def close_me(self, event):
print "Programm beenden"
self.Close()
def show_messagebox(self, event = None):
print "Nachricht anzeigen"
wx.MessageBox("Hallo Welt")
#def on_frame_key_up(self, event):
# print "KeyCode:", event.GetKeyCode()
def main():
app = wx.PySimpleApp()
f = MyFrame(None)
#f.Show() # Frame nicht anzeigen :-)
app.MainLoop()
if __name__ == "__main__":
main()
Gerold
PS: Diese Lösung funktioniert nur unter Windows. Unter Linux kann man auf die XLib (z.B. per ctypes --> http://code.google.com/p/pyxlib-ctypes/) ausweichen.
Zuletzt geändert von gerold am Samstag 16. Januar 2010, 23:09, insgesamt 1-mal geändert.
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.
ich kann zur problemloesung leider auch nicht helfen, will nur sagen dass ich auch brennend sowas suche (vieleicht weis nhemand wies mit c oder so geht und will uns eien art api, schreivben, mit der man einfach uener stdin und stdout komuniziert)
cp != mv