2010-08-09 54 views
2

我想做一個鍵盤命令,這樣當Ctrl鍵然後是'e'鍵然後是'x'鍵,然後是'i'鍵時程序將停止運行,和't'鍵被擊中。所以基本上當程序運行時,如果你輸入Ctrl + exit,程序將停止運行。沒有GUI,我不想通過python解釋器來做到這一點。爲沒有GUI的python程序做一個鍵盤命令

最終目標是一個程序,該程序在輸入Ctrl + exit命令時會關閉,無論其他程序在哪個焦點上。這個程序將是一個輕量級的鍵盤記錄器,因此擁有一個GUI將毫無意義。

+1

我刪除了gui標籤給你,因爲那樣做毫無意義。 %) – relet 2010-08-09 22:10:25

+1

一個「鍵盤命令」,但沒有「python解釋器」。你想在哪個環境中停止運行什麼程序? – msw 2010-08-09 22:14:27

回答

1

用一個簡單的FSM爲「退出邏輯」當你登錄接收到的按鍵,如:

FINAL_STATE = 9999 
transitions = {(None, 'e'): 1, (1, 'x'): 2, (2, 'i'): 3, (3, 't'): FINAL_STATE} 

def keylogger_logic(filename, get_next_keystroke, fsm_state=None): 
    with open(filename, 'w') as f: 
     k = get_next_keystroke() 
     f.write(k) 
     f.flush() 
     fsm_state = transitions.get((fsm_state, k)) 
     if fsm_state == FINAL_STATE: break 

此假設你已經或編寫返回「下一個按鍵」作爲一個字符串的函數,並將它作爲第二個參數傳遞給keylogger_logic(我會這樣做,而不是,通過硬編碼key-getter功能和這個邏輯,作爲依賴注入模式的應用程序,使事情變得非常容易,測試;類似地,將fsm_state作爲參數,即使其可由調用者設置 - 便於測試)。易於調整,如果你寧願讓你的「獲得下一個擊鍵」功能返回的東西不是一個字符串(你只需要修復f.writetransitions表)。

相關問題