トップページ > 過去ログ > 記事閲覧
キーの入れ替え時に動作がおかしくなります。
名前:L'Z 日時: 2012/04/03 22:22

KeySwapという常駐ではなくレジストリの変更でキー配置を変更するソフトでキー配置を変更しているのですが DXライブラリを使い作成したソフトでその変更が反映されません。 このソフトはDirectX対応です。 そのため変更前のキーを押すと反応するのですが、一度押すと離しても押されたままと認識されています。 ===================================== #include "DxLib.h" int Key[256]; // キーが押されているフレーム数を格納する // キーの入力状態を更新する int gpUpdateKey(){ char tmpKey[256]; // 現在のキーの入力状態を格納する GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る for( int i=0; i<256; i++ ){ if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら Key[i]++; // 加算 } else { // 押されていなければ Key[i] = 0; // 0にする } } return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); DxLib_Init(); while(1){ if(ProcessMessage() == -1) break; gpUpdateKey(); ClearDrawScreen(); DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_LSHIFT]); DrawFormatString(0,100,GetColor(255,255,255),"%d",Key[KEY_INPUT_LCONTROL]); } DxLib_End(); return 0; } ===================================== 上のコードは左シフトとコントロールキーの押している長さを測るものです。 コントロールキーとCAPS LOCKキーを入れ替えると、コントロールキーを一度押した後離しても 数値が増え続けます。 シフトの方は変更していないので正常に離すと0に戻ります。

Page: 1 |

Re: キーの入れ替え時に動作がおかしくなります。 ( No.1 )
名前:L'Z 日時:2012/04/03 22:35

こちらでここでの質問を勧められました。 ttp://dixq.net/forum/viewtopic.php?f=3&t=10455 ↑hつけてください
Re: キーの入れ替え時に動作がおかしくなります。 ( No.2 )
名前:いっち 日時:2012/04/04 01:24

> コントロールキーとCAPS LOCKキーを入れ替えると、コントロールキーを一度押した後離しても > 数値が増え続けます。 一応確認ですが、「コントロールキーを一度押した」というのは、物理的なキーの(キートップに印刷されている)名称ということで良いでしょうか? それと、キーを入れ替えずにCapsLock(KEY_INPUT_CAPSLOCK)を同様にテストした場合はどのようになりますか? ちなみに私の環境もレジストリを直接いじって CAPS と LCtrl を入れ替えていますが特に問題ありませんでした(OSはXP)。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.3 )
名前:L'Z 日時:2012/04/04 01:32

このプログラムの実行時に押したのはCTRLと書かれているキーです。 変更したCAPSLOCKと書かれているボタンは動作しません。 キーの入れ替えをなくすと正常に動作します。(キーを離すと0に戻る)
Re: キーの入れ替え時に動作がおかしくなります。 ( No.4 )
名前:L'Z 日時:2012/04/04 01:43

> ちなみに私の環境もレジストリを直接いじって CAPS と LCtrl を入れ替えていますが特に問題ありませんでした(OSはXP) 直接レジストリを編集する場合に変更するキーと値を教えてもらえませんか? 現在の私のPCの状態と比較してみます。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.5 )
名前:いっち 日時:2012/04/04 02:18

> キーの入れ替えをなくすと正常に動作します。(キーを離すと0に戻る) CapsLock もどうような動作(キーを離すと0に戻る)でしょうか? 必ずバックアップを取ってからお試し下さい。再起動後から有効です。 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,3a,00,1d,00,\ 00,00,00,00
Re: キーの入れ替え時に動作がおかしくなります。 ( No.6 )
名前:L'Z 日時:2012/04/04 10:27

はい。 レジストリは自分のと比較したところ全く同じでした。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.7 )
名前:いっち 日時:2012/04/05 00:02

> レジストリは自分のと比較したところ全く同じでした。 KeySwap が他にもレジストリを書き換えているということは無いでしょうか? もし、キーボードを複数お持ちでしたらキーボードを変えても同様の動作となるかお試し下さい。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.8 )
名前:L'Z 日時:2012/04/05 01:08

> KeySwap が他にもレジストリを書き換えているということは無いでしょうか? > もし、キーボードを複数お持ちでしたらキーボードを変えても同様の動作となるかお試し下さい。 すみません。キー配置の部分しかわからないです。キーボードもノートPCについている1つのみです。 いっちさんのPCでKeySwapを使い変更した場合でも正常に動作するか確認してもらうことは不可能でしょうか? もし私と同じ症状が出たならKeySwapの不具合ということで直接レジストリを編集する方法にします。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.9 )
名前:いっち 日時:2012/04/05 01:25

> いっちさんのPCでKeySwapを使い変更した場合でも正常に動作するか確認してもらうことは不可能でしょうか? 不可能ではありませんが、試したくありません。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.10 )
名前:管理人 日時:2012/04/09 02:35

KeySwap を使用せずに CAPS LOCKキーの押下状態を調べるプログラムを組んで CAPS LOCKキーを押してみると分かりますが、XP では一度 CAPS LOCKキーを 押してしまうと離してもずっと押していることになります シフトキーを押しながら CAPS LOCKキーの押し・離しをすると正常に反応します DXライブラリでは DirectInput から取得できる押下情報をそのまま使用しているので この現象に関しては対処のしようがなく、そういうものだとして CAPS LOCKキーを 使用しないようにして頂くしかありません 因みに KeySwap を使用して CAPS LOCCKキーと CTRLキーを交換した際の CTRLキーを押したときの 挙動は正に CAPS LOCKキーの動作なので、KeySwap は正常に動作しているのだと思います
Re: キーの入れ替え時に動作がおかしくなります。 ( No.11 )
名前:L'Z 日時:2012/04/09 20:04

管理人様 回答ありがとうございます。 変更後にCAPS LOCK(LCTRL)を押した際長押しになるのは理解しました。 DXライブラリ使用時に変更が無効になるというのはどういうことなのでしょうか? 「DrawFormatString(0,100,GetColor(255,255,255),"%d",Key[KEY_INPUT_LCONTROL]);」 とCTRLの押した時間を測っているのに変更後のCTRL(元CAPSLOCK)を押しても反応がなく CAPSLOCK(元CTRL)を押すと反応します。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.12 )
名前:いっち 日時:2012/04/11 21:25

L'Zさん> ご存知かも分かりませんが SetUseDirectInputFlag を FALSE に設定すると、 キーの入れ替えが有効になった状態になるかもしれません。 よろしければお試し下さい。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.13 )
名前:L'Z 日時:2012/04/13 21:35

SetUseDirectInputFlagをFALSEにしたところ、CAPSLOCKと印字されているキーをコントロールキーと認識されるようになり、 キーを離すと0にもどるようになりました。 しかし、今度はCTRLと印字されているキーを押してもCAPSLOCKの値が増えず、SHIFTキーを押しながら CTRLと印字されているキーを押すことで反応しました。 一応キーを離すと0に戻ります。 変更前は一度押すと増えていきSHIFTキーを押しながら離すと0に戻りました。 謎も残ってますが私がしたかったコントロールキーの入れ替えの有効はできたので解決です。 いっちさんありがとうございました。
Re: キーの入れ替え時に動作がおかしくなります。 ( No.14 )
名前:管理人 日時:2012/04/15 17:13

> DXライブラリ使用時に変更が無効になるというのはどういうことなのでしょうか? KeySwap をお使いの場合でしょうか? DXライブラリでは特に KeySwap の影響を受けないような工夫などはしていませんので私にも分かりません

Page: 1 |