GeyKeyboardState関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
びせいぶつ

GeyKeyboardState関数について

#1

投稿記事 by びせいぶつ » 10年前

いつもお世話になっております。
今回、GetKeyboardState関数を使って、何かキーが押されたら処理を行うというコードを作成しようとしました。
ですが、何も入力していないのに、常にキーが入力された状態になってしまいます。
今回作成した関数はこのようになっています。

コード:

/*--- Keyboard.h ---*/
#pragma once
#include<iostream>
#include<Windows.h>

byte keyBuf[256] = { 0 }; //キーが押されているか確認
byte keyState[256] = { 0 }; //押されている間に値を加算

int MygetKeyState() {
	if (GetKeyboardState(keyBuf)) { //入力がされたら
		for (int i = 0; i < 256; i++) {
			if (keyBuf[i]) {
				keyState[i]++;
				std::cout << i << std::endl; //デバッグ用
			}
			else
				keyState[i] = 0;
		}
	}
	return 0;
}

/*--- main.cpp ---*/
#include"Keyboard.h"

int main(){
        MygetKeyState();
        return 0;
}
 


/*--- 実行結果 ---*/
1
2
5
8
13
144
240
246
251

このように、幾つかのキーが入力された状態になっていました。
これは何が原因なのでしょうか?自分の関数の使い方が間違っているのでしょうか?
ご教授よろしくお願いいたします。

びせいぶつ

Re: GeyKeyboardState関数について

#2

投稿記事 by びせいぶつ » 10年前

開発環境は win7 64bit VisualStdio2013 です。

Bull
記事: 149
登録日時: 11年前

Re: GeyKeyboardState関数について

#3

投稿記事 by Bull » 10年前

これは何が原因なのでしょうか?自分の関数の使い方が間違っているのでしょうか?
GetKeyboardState()の返却値の意味を取り違えてい
いるようです。GetKeyboardState()は'TRUE'または
'FALSE'を返しますが、関数が正常終了したかどうか
を意味します。キー入力が有ろうと無かろうと、普
通はTRUEを返します。keyBufには仮想キーの状態が
格納されますが、キーが押されている場合は最上位
ビットが1になります。
詳細はMSDNで確認してください。

ちょっとしたサンプルです。

コード:

#define  WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>

#pragma comment(lib,"User32.lib")

int main(void)
{
	for (;;) {
		BYTE	bKeyState[256];
		::GetKeyboardState(bKeyState);
		for (int i = 0; i < 0xF0; ++i) {
			if (bKeyState[i] & 0x80)
				printf("(%02X):%02X\n", i, bKeyState[i]);
		}

		if (GetKeyState(VK_LSHIFT) & 0x80)			// 左シフトキーが押されたら
			break;									// ループを抜ける

		Sleep(100);
	}
}


びせいぶつ

Re: GeyKeyboardState関数について

#4

投稿記事 by びせいぶつ » 9年前

返信遅れてしまい申し訳ありません。
ご回答ありがとうございます。

ということは、見るべきは最上位と最下位のbitのみで、それ以外のbitは何が入っているか保証されていない。
という判断でよろしいのでしょうか?

Bull
記事: 149
登録日時: 11年前

Re: GeyKeyboardState関数について

#5

投稿記事 by Bull » 9年前

びせいぶつ さんが書きました:ということは、見るべきは最上位と最下位のbitのみで、それ以外のbitは何が入っているか保証されていない。
という判断でよろしいのでしょうか?
保証されていないと言うか、意味がないと言うことでしょうね。
オフトピック
普通は0になっていと思いますが、まあどっちでもいいんです

閉鎖

“C言語何でも質問掲示板” へ戻る