2011-07-27 10 views
1

Windowsマシン上でPython 2.7を通してキーボードコマンドを送信しようとしています。私はSendKeysモジュールが2.7で動作しないことを理解しています。だから、代わりにwin32 APIからkeybd_eventを使用します。Pythonはウィンドウ上にキーを送信します

送信したいキーは、シフト+左にある単語を選択することです。これはコードです:

win32api.keybd_event(win32con.VK_LSHIFT,0,win32con.KEYEVENTF_EXTENDEDKEY | 0,0) 
win32api.keybd_event(win32con.VK_LEFT,0,0,0) 
win32api.keybd_event(win32con.VK_LSHIFT,0,win32con.KEYEVENTF_EXTENDEDKEY | win32con.KEYEVENTF_KEYUP,0) 

これはすべて動作します。しかし、シフトキーは押されたままです!私はプロセスを終了した後でさえ。後にシフトキーを離す唯一の方法は、物理的にcapslockを押した後、shift +キーを押し、次にcapslockをオフにすることです。その問題と非常に似ています。http://www.bigresource.com/Tracker/Track-vb-RvVMlrAbZn/

あなたは何をすべきか考えていますか?

ありがとうございます!

+0

です。 'scanCode = MapVirtualKey(VK_LSHIFT、MAPVK_VK_TO_VSC)'を呼び出し、keybd_eventメソッドに渡してみてください。 – combatdave

+0

返事をありがとう。私はちょうどそれを試みた: scanCode = win32api.MapVirtualKey(win32con.VK_LSHIFT、0) 私はMAPVK_VK_TO_VSCを見つけることができなかったので、そこにゼロを設定します。 しかし、残念ながらそれはまだ動作しません。 – Mohamad

+0

あなたはそれを呼び出した後どの値がscanCodeにありますか? – combatdave

答えて

0

シフトで動作するようにwin32apiを取得する方法が見つかりませんでしたが、私はSendKeysをhttp://code.google.com/p/sendkeys-ctypes/から使用しています。これは2.7で動作するようです。

0

Windows APIからSendInputが役立つ場合があります。最近のRaymond Chenのブログ記事では、スクリーンセーバーのスタート/ストップを制御するために使用することもできます。

+1

あなたの参照のためのリンクがありますか?ありがとう。 –

0

pywin32パッケージを試してみることもできますが、それは古いものであり、維持されていないことにご注意ください。ここで

は、私はあなたがスキャンコード(第2パラメータ)として0を渡しているからだという推測をハザードと思いan example from StackOverflow

関連する問題