

Windows、Python3.7で、指定座標（テキストボックス）をクリックし、そこにUSBバーコードリーダーから取得した文字列を送信するコードを書いています。

ただし、そのテキストボックスがあるのはリモートデスクトップ先なので、テキストボックス自体のハンドルは取得できません。  
（リモート先は顧客の中にあるので、そこにはアプリを入れれません。）

そこで、リモートデスクトップを最前面アクティブにし、その画面をクリックし、pyautogui.typewriteで文字を送信することにしました。

その結果、9割がた目的通りできているものの、現物のマウスが少しでも動くと座標がずれてしまうため、文字送信位置がずれてしまいます。

そこで、文字送信時にUSBマウスとキーボードだけを一時的に無効化できる方法を探しています。

いろいろググりました中で見つかったのは、「pyusbを使う方法」と「c++でwin32apiをたたく方法」です。

pyusbを使う方法  
<https://github.com/pyusb/pyusb>

c++でwin32apiをたたく方法  
<http://black-yuzunyan.lolipop.jp/archives/2487>

pyusbのほうは使い方がよくわかりませんでした。  
c++のほうは、これをPythonから呼び出す方法を検討していますが、ラップする方法がわからないので、使うのを躊躇しています。

今回教えていただきたいのは、Pythonのライブラリ等だけで上記目的を達成できる方法はないのか、ということです。

* * *

### 実際のコード (一部を抜粋)

[code]

    import pyautogui as gui
    
    def mojisousin(self, mojiretu,mojisousinmaeMachiByosu:float):
        WM_CHAR = 0x0102  # テキスト（1文字）送信
    
        logger.info("文字送信開始")
        time.sleep(mojisousinmaeMachiByosu)  # 文字送信まち秒数
    
        try:
            gui.moveTo(self.x, self.y, 0)
            gui.doubleClick(self.x, self.y)
            gui.typewrite(mojiretu)  # ハンドルが無い場合は、win32guiでカーソル位置に文字送信
    
            logger.info("ハンドル無しでの文字送信正常完了="+str(mojiretu))
            return True
        except:
            logger.error("文字送信失敗！" + str(mojiretu))
            return False
    
[/code]


CC BY-SA 4.0
2020-07-03T02:07:48.940
68233
2020-07-03T04:22:19.930
2020-07-03T04:22:19.930
40913
40913
question
python python3 windows winapi
Pythonでマウスとキーボードの現物をロックしたい（ただしpyautoguiは使えるように）