SendKeysCtypes をpy2.7 および win7 64bit で動作させようとしています。 ここにsrcがあります
問題:
SendKeysCtypes.pyを実行しても何も起こりません。テストでは、メモ帳を開いてテキストを書き込む必要があります。
問題のコードは次のとおりです。
def GetInput(self):
"Build the INPUT structure for the action"
actions = 1
# if both up and down
if self.up and self.down:
actions = 2
inputs = (INPUT * actions)()
vk, scan, flags = self._get_key_info()
for inp in inputs:
inp.type = INPUT_KEYBOARD
inp._.ki.wVk = vk
inp._.ki.wScan = scan
inp._.ki.dwFlags |= flags
# if we are releasing - then let it up
if self.up:
inputs[-1]._.ki.dwFlags |= KEYEVENTF_KEYUP
return inputs
def Run(self):
"Execute the action"
inputs = self.GetInput()
return SendInput(
len(inputs),
ctypes.byref(inputs),
ctypes.sizeof(INPUT))
上記のコードの SendInput() は何もしません。
その他のテスト
この回答のコードを試してみましたが、うまくいきました。しかし、このコードには他にも問題がありました。
著者によると、それはpy3.1で動作するはずです
SendInput() は '0'を返します。これは、「別のスレッドによってブロックされた」ことを意味します
ctypes.GetLastError() を呼び出すと、「ERROR_INVALID_PARAMETER」を意味するエラー コード 87が返されます。
私のWindowsプログラミングは非常に限られているため、ここで立ち往生しています。誰かがこれに光を当てることができますか?
編集1:
- 「64bit is problem」のトレースに従って、このSO の質問に進み、変換できるかどうかを確認します。