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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

622閲覧

C++で、Caps Lockの状態を取得する方法

One_of_Arthur

総合スコア81

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2024/04/09 03:00

編集2024/04/09 03:07

実現したいこと

C++で、Caps Lockの状態を取得しようとしています。

発生している問題・分からないこと

キー押下時のCaps Lockの状態は取得できたのですが、
キーを押す前の状態が取得できません。
C++にそういう事はできないのでしょうか?

該当のソースコード

C++

1 SHORT cl = GetKeyState(VK_CAPITAL); 2 3 if (cl == -127) 4 { 5            //キーを押された結果のCaps Lcokがオン 6 } 7 if (cl == -128) 8 { 9            //キーを押された結果のCaps Lcokがオフ 10 }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

キー押下時のCaps Lockの状態は取得できたのですが、
キーを押す前の状態が取得できません。

補足

Visual Studio
Windows 10 HOME

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

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

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

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

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

int32_t

2024/04/09 03:31

GetKeyState() の公式のリファレンスは読みましたか?
fana

2024/04/09 04:08 編集

> 目は通しました。 だから何? 目を通して,それで? もうちょっと具体的に「何を試したら→結果がどうなって→それは想定とはどう異なるか」というのを説明すべきでは? あなたが示したリンク先の戻り値の説明のところに > If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled. とか何とか書かれており,これを見るに "the low-order bit" の値を見てやれば良さそうに見えるのですが,その値が実際に変なのですか?
fana

2024/04/09 04:14 編集

「この説明を読むに,こういう場合にはこういう値が返ってくるのだと自分は理解したのだが,実際に戻り値を表示させてみるとこんな値になっていて全くイミワカンネー.説明の理解が間違っているのだろうか? だとしたら実際はどういう意味なの?」 とか何とか述べれば何を尋ねているのかがわかりやすいのではなかろうか,とか. 値のチェック結果についても,CapsLock の状態を変えても何も変わらないのか,それとも何か連動して変わるっぽいんだけど法則性が見えないだとか,なんかこう,あるっしょ?
int32_t

2024/04/09 06:13

先のコメントは急いでて簡素すぎたなと後悔してます。責めてるわけではないのでご安心を。 質問者さんが実現したいことが本当に GetKeyState() でできるかどうかを心配しています。 質問文からは、何を実現したくて GetKeyState() を使ったコードを書いたのか不明です。また、質問文の「キー」が何のことか不明で、問題がよく理解できませんでした。具体的に、「ユーザがこういうキー操作をした時に何か処理をしたい」のような情報があると理解しやすいかと思います。
dodox86

2024/04/09 06:17 編集

> キーを押す前の状態が取得できません。 > C++にそういう事はできないのでしょうか? 「キーを押す前の状態」と称するものが??だったのですが、CapsLockキーに限らず、そのキーを押す前の状態は自分で定周期で取得し続けるなり、Windowsメッセージ WM_CHARを受信して取得してて前の状態と比べるなりしないとダメですね。C++の問題ではなく、プログラミングのロジックの問題だと思います。軽く試してみましたが、CapsLockキー(と他のキーの同時押し)によるCapsLock状態の遷移(ON~OFF)があるので、GetKeyState()で取得した値もその遷移状態で刻々変わります。Microsoftの公式情報もそれを言っているのだと思います。 [誤記修正済み]
guest

回答1

0

反応が無いので削除します。

投稿2024/04/09 13:51

編集2024/05/02 18:33
hiroki-o

総合スコア483

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問