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

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

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

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

Python

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

解決済

半角/全角ボタンを常にOFFの状態にする

python01
python01

総合スコア5

PyAutoGUI

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

Python

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

2回答

0リアクション

0クリップ

3378閲覧

投稿2021/03/15 15:32

編集2021/03/18 12:59

前提・実現したいこと

Pyautoguiを用いてメールを自動送信しようとしています。
メールアドレスは半角のため、日本語入力がONの時はOFFの状態にしたいので、
下記コードを作成しました。

Python

import pyautogui as pg import ctypes pg.press('win') pg.write('mail') pg.press('enter') # 0=日本語ON VK_KANJI = pg.platformModule.keyboardMapping['kanji'] print(ctypes.windll.user32.GetKeyState(VK_KANJI)) if ctypes.windll.user32.GetKeyState(VK_KANJI) == 0: pg.press('kanji') print("おしました") print(ctypes.windll.user32.GetKeyState(VK_KANJI)) pg.press("a")

発生している問題・エラーメッセージ

上記コードの結果は毎回下記通りです。

0 おしました 1

しかしメールアプリに入力される文字は毎回切り替わっています。

1回目:a 2回目:あ 3回目:a 4回目:あ

試したこと

下記を試しましたが、結果は同じでした。
・VK_KANJI = 0x19

・下記コードを試すと、0↔1に切り替わるので、pg.press('kanji')は
機能しているようです。

pg.press('kanji') VK_KANJI = pg.platformModule.keyboardMapping['kanji'] print(ctypes.windll.user32.GetKeyState(VK_KANJI))

試したこと② 3/18追加

  • 各動作時のキー状態確認

 windowsキーを押すと0になっているようです。

Python

import pyautogui as pg import ctypes import time VK_KANJI = pg.platformModule.keyboardMapping['kanji'] print("起動直後:",ctypes.windll.user32.GetKeyState(VK_KANJI)) pg.press('win') print("win入力後:",ctypes.windll.user32.GetKeyState(VK_KANJI)) pg.write('mail') time.sleep(1) pg.press('enter') time.sleep(1) print("メールアプリ開いた後:",ctypes.windll.user32.GetKeyState(VK_KANJI)) pg.press('kanji') print("press'kanji'後:",ctypes.windll.user32.GetKeyState(VK_KANJI)) if ctypes.windll.user32.GetKeyState(VK_KANJI) == 0: pg.press('kanji') print("おしました") print("press'kanji'後:",ctypes.windll.user32.GetKeyState(VK_KANJI)) pg.press("a")

↓出力結果

起動直後: 1 win入力後: 0 メールアプリ開いた後: 0 press'kanji'後: 1 press'kanji'後: 1 ※毎回同じ出力
  • 参考資料確認

 難しくて詳細は理解できていませんが、
下記資料によると、日本語入力キーの取得状態は
アプリが変わると認識できないようです。

https://teratail.com/questions/137570

補足情報(FW/ツールのバージョンなど)

OS:windows10 64bit
Python:3.8.3
pip:21.0.1
PyAutoGUI:0.9.52

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

etherbeg

2021/03/15 23:34

「下記コードを試すと、0↔1に切り替わる」とのことですので、いちど実際のコードでも、まず 'kanji' キーを押してから、キーの状態を取得して分岐してみて、取得されるキーの状態にどういう変化があるか(ないか)、また取得されるキーの状態と実際の入力の関係を確認されてみてはいかがでしょうか。
python01

2021/03/16 13:13 編集

どうも半角ボタンを押したことを正しく認識していないようです。 ①半角入力の状態で下記コードを実行  VK_KANJI = pg.platformModule.keyboardMapping['kanji']  (または VK_KANJI = 0x19)  print(ctypes.windll.user32.GetKeyState(VK_KANJI))  結果:0 ②半角ボタンをおし、日本語入力の状態で上記コードを実行  結果:0 ③下記コードを追加して実行  pg.press('kanji')  結果:1
etherbeg

2021/03/16 15:22

お答えいただいた文章からは、私の意図が正しく伝わっての結果なのか、私の書き方が悪くて意図が伝わらなかったのか、判断がつかないので、私がして欲しかったことを、回答欄の方にもう一度書きます。申し訳ありませんが、私は Windows 機を持っていないので自分で試すことができません。また、すでに私の意図通りお試しいただいていたら、申し訳ありません。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PyAutoGUI

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

Python

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