質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2115閲覧

python pyautogui 右ctrl

nao0405

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/01 06:20

#現状
現在、社内システム(30年以上前に社員が自作)のソフトへ入力する事で費用処理を行っています。
そのソフトへpythonで自動的に入力を行う取り組みを始めました。
その中で右ctrlを押す場面があるのですが下記のようにコードを記載しても動作しません。
何か原因や方法が分かれば教えて下さい。

#記述内容
import win32gui
import pyautogui as pgui
import time

active_window=win32gui.FindWindow(None,'ソフト名')
win32gui.SetForegroundWindow(active_window)
pgui.press('ctrlright')

#自分で試したまたは確認した内容
・ソフトはwin32gui.SetForegroundWindow(active_window)で正常にアクティブに出来ている
・ctrlrightをControl_Rへ記述変更・・・動作しない
・ctrlrightをenterへ変更・・・enterとしては動作する
・SetForegroundWindowの次にtime.sleep()で待機時間を設ける・・・動作しない
・スクリーンキーボードで右ctrlの位置をクリック・・・動作はする
※画面上での座標で指定しているので出来れば止めたい
色々な方のPCで汎用的に活用できるようにしたい
・以下の記述で右ctrlを押した際のキーボードの認識?を確認・・・Control_R

#キーボードの入力キー確認用の記述
import tkinter as tk

root = tk.Tk()

root.geometry('300x200')
root.title('サンプルプログラム')

buffer = tk.StringVar()
buffer.set('')

def print_key(event):
key = event.keysym
buffer.set('入力された値: %s' % key)

tk.Label(root, text='何か入力してください。').pack()
a = tk.Label(root, textvariable=buffer)
a.pack()
a.bind('<Key>', print_key)
a.focus_set()

root.mainloop()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

etherbeg

2021/11/01 14:00

通常コントロールキーは他のキーとの組み合わせで機能すると思うので、単独で機能するということはどこかでそういうふうに設定しているということですよね。可能ならその設定を変更して普通に他のキーとの組み合わせで機能するようにして、そのキーの組み合わせで試してみるとか…
jbpb0

2021/11/01 21:04

https://teratail.com/questions/254519 の「回答」の「閑話: 何故 NumLock が On だと正しく動作しないのか」が、参考になるかもしれません 「右CTRLキー」は「拡張キー」であるとのことで、「拡張キー」の送信に付いて詳しく書かれてます
nao0405

2021/11/02 00:57

回答ありがとう御座います。 https://teratail.com/questions/254519の内容を確認させて頂き、無事に動作している事を確認出来ました。 ご参考に解決後の記述は以下の通り import win32gui import pyautogui as pgui import time import ctypes active_window=win32gui.FindWindow(None,'ソフト名') win32gui.SetForegroundWindow(active_window) KEYEVENTF_EXTENDEDKEY = 0x0001 KEYEVENTF_KEYUP = 0x0002 VK_RCONTROL = 0xA3 ctypes.windll.user32.keybd_event(VK_RCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0) ctypes.windll.user32.keybd_event( VK_RCONTROL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 ) 大変勉強になりました。 今後その他の拡張キーでも同じような問題が発生するかもしれません。 上手く活用できるように精進します。
etherbeg

2021/11/03 09:49 編集

解決済にも関わらず質問が未回答・受付中のまま表示され続けていますので、申し訳ありませんがご自分で回答欄に解決方法を記載の上、質問のステータスを「受付中」から「解決済」に変更していただけますか。
guest

回答1

0

自己解決

jbpb0様にご指摘頂きました通りhttps://teratail.com/questions/254519
の内容を確認させて頂き、無事に動作している事を確認出来ました。

ご参考に解決後の記述は以下の通り
import win32gui
import pyautogui as pgui
import time
import ctypes

active_window=win32gui.FindWindow(None,'ソフト名')
win32gui.SetForegroundWindow(active_window)

KEYEVENTF_EXTENDEDKEY = 0x0001
KEYEVENTF_KEYUP = 0x0002
VK_RCONTROL = 0xA3
ctypes.windll.user32.keybd_event(VK_RCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0)
ctypes.windll.user32.keybd_event(
VK_RCONTROL,
0,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0
)

投稿2021/11/04 00:04

nao0405

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問