2017-07-29 4 views
1

はIAMのpythonを持つ単純なキーロガーを構築する方法を私の自己を教えしようとしている情報セキュリティとIAM新しい、私はサイトでこのコードを見つけました:パラメータを渡さずに関数を呼び出す方法はありますか?

import pythoncom, pyHook 

def OnKeyboardEvent(event): 
    print 'MessageName:',event.MessageName 
    print 'Message:',event.Message 
    print 'Time:',event.Time 
    print 'Window:',event.Window 
    print 'WindowName:',event.WindowName 
    print 'Ascii:', event.Ascii, chr(event.Ascii) 
    print 'Key:', event.Key 
    print 'KeyID:', event.KeyID 
    print 'ScanCode:', event.ScanCode 
    print 'Extended:', event.Extended 
    print 'Injected:', event.Injected 
    print 'Alt', event.Alt 
    print 'Transition', event.Transition 
    print '---' 

    # return True to pass the event to other handlers 
    return True 

# create a hook manager 
hm = pyHook.HookManager() 
# watch for all mouse events 
hm.KeyDown = OnKeyboardEvent 
# set the hook 
hm.HookKeyboard() 
# wait forever 
pythoncom.PumpMessages() 

と私は、このコードを理解しようとしたとき、私が見つかりました。関数の呼び出し「OnKeyboardEvent」それは私の質問があり、パラメータ

hm.KeyDown = OnKeyboardEvent 

です与えることなく: はそれをパラメータを与えることなく機能を呼び出すためのPythonで方法はありますか?

+0

'hm.KeyDown = OnKeyboardEvent'は関数呼び出しではありません。 [こちら](https://stackoverflow.com/questions/10354163/assigning-a-function-to-a-variable)を確認してください – jacoblaw

+0

@ jacoblawありがとうございました –

答えて

1

pythonでは、関数名は関数が格納されている変数と同等です。言い換えれば:あなたは、関数を定義することができfooと呼ばれ、ストア/第二の可変barで参照:

def foo(): 
    print("foo!") 

bar = foo 

bar() # prints: foo! 

あなたのケースで、あなただけの機能OnKeyboardEvent(event)を定義している、あなたはhm.KeyDown

での参照を保存

この関数の呼び出しは、キーボードキーを押したときにのみ発生し、イベントハンドラからhmで内部的に呼び出されます。そこでイベントハンドラはイベントオブジェクトを関数に渡します。

パラメータを指定しないで関数を呼び出すことについてのご質問にお答えします。のは、この関数を呼び出すことはありません(変数を言わせるために機能を割り当てる

OnKeyboardEvent() 

:関数を呼び出す

def foo(bar = "default string"): 
    print(bar) 

print(foo()) # prints: default string 
print(foo("hello world!")) # prints: hello world! 
+0

、iam very thankful –

0

hm.KeyDown = OnKeyboardEventあなたが関数OnKeyboardEventを呼び出していないときは、その関数をhm.KeyDownに割り当てます。後でpyHook.HookManagerは、KeyboardEventが発生したときにそのメソッドを呼び出します。

+0

大変ありがとうございました... –

0

: それはすべてのパラメータのデフォルト値は 例えば設定されている機能のために可能ですすぐ):

var = OnKeyboardEvent 

とあなたはちょうどpyHook.HookManager(さん)のKeyDownプロパティに関数OnKeyboardEventを割り当てている

hm = pyHook.HookManager() 
hm.KeyDown = OnKeyboardEvent 
+0

が大変感謝しています。@AdriánKálazi –

関連する問題