> 関数をもう一度呼び出せば、クリアされるようですけど。
> よその掲示板では質問者が具体的なコードを示して、
> それに対して回答者がアドバイスをするようです。
> ここでもそれが望ましいと私は考えます。
> 回答者が無駄な推測をしなくてすみます。
>
> 以下、MSDNより
>
> 関数が成功すると、前回の GetAsyncKeyState 関数呼び出し以降にキーが押されたかどうか、およ> 関数をもう一度呼び出せば、クリアされるようですけど。
> よその掲示板では質問者が具体的なコードを示して、
> それに対して回答者がアドバイスをするようです。
> ここでもそれが望ましいと私は考えます。
> 回答者が無駄な推測をしなくてすみます。
>
> 以下、MSDNより
ja6lao 長野OM アドバイス有難うございます。キー入力サブルーチン
のソースコードを送ります。なんの為にこのサブルーチンが必要かと
いうと CWのスピードを調整する為の変数の値を インクリメントや
デクリメント等の操作をするためです。交信中にキーを押すのでその時
画面には 送信や受信解読した文字が表示されているので押したキーの
文字が表示されないほうが良いのです。決められた特定の文字のキーが
押されたときの後プログラムがこのサブルーチンを実行するとその文字
のコードを返しそれ以外の文字のキーを押した時やキーを押さなかった
時は 00Hを返します。文字による機能は次の通りです。
A AUTO 自動調整 M MANUAL 手動調整
H スピード早く 変数のデクリメント
L スピード遅く 変数のインクリメント
E 送信又は受信の終わり
プログラム自体は WINDOWS XP の MSDOS 画面で動作します。
C++プログラムは次の通りです。
int CONINQ (void)
{
unsigned short b;
unsigned int c;
unsigned short mask = 0x8001;
c = (unsigned int)'A';
b = GetAsyncKeyState(c);
if ((b & mask)!= 0)
goto
endc;
else
{c = (unsigned int)'M';
b = GetAsyncKeyState(c);
if ((b & mask) != 0)
goto
endc;
else
{c = (unsigned int)'D';
b = GetAsyncKeyState(c);
if ((b & mask) != 0)
goto
endc;
else
{c = (unsigned int)'H';
b = GetAsyncKeyState(c);
if ((b & mask) != 0)
goto
endc;
else
{c = (unsigned int)'L';
b = GetAsyncKeyState(c);
if ((b & mask) != 0)
goto
endc;
else
{c = (unsigned int)'E';
b = GetAsyncKeyState(c);
if ((b & mask) != 0)
goto
endc;
else
c = 0; goto endc;
}
}}}}
endc:
return c;
}
上記の C++のプログラムをアッセンブルリストを出力するオプションで
コンパイルしたもの。
PUBLIC
_CONINQ
;
CONINQ
EXTRN
__imp__GetAsyncKeyState@4:NEAR;
Function compile flags: /Odt
_TEXT
SEGMENT
_c$ = -12
;
size = 4
_b$ = -8
;
size = 2
_mask$ = -4
;
size = 2
_CONINQ
PROC NEAR
;
CONINQ;
Line 145
push
ebp
mov
ebp, esp
sub
esp, 12
;
0000000cH;
Line 148
mov
WORD PTR _mask$[ebp], 32769
;
00008001H;
Line 149
mov
DWORD PTR _c$[ebp], 65
;
00000041H;
Line 150
mov
eax, DWORD PTR _c$[ebp]
push
eax
call
DWORD PTR __imp__GetAsyncKeyState@4
mov
WORD PTR _b$[ebp], ax;
Line 151
movzx
ecx, WORD PTR _b$[ebp]
movzx
edx, WORD PTR _mask$[ebp]
and
ecx, edx
je
SHORT $L63352;
Line 152
jmp
$endc$63353
$L63352:;
Line 154
mov
DWORD PTR _c$[ebp], 77
;
0000004dH;
Line 155
mov
eax, DWORD PTR _c$[ebp]
push
eax
call
DWORD PTR __imp__GetAsyncKeyState@4
mov
WORD PTR _b$[ebp], ax;
Line 156
movzx
ecx, WORD PTR _b$[ebp]
movzx
edx, WORD PTR _mask$[ebp]
and
ecx, edx
je
SHORT $L63357;
Line 157
jmp
$endc$63353
$L63357:;
Line 159
mov
DWORD PTR _c$[ebp], 68
;
00000044H;
Line 160
mov
eax, DWORD PTR _c$[ebp]
push
eax
call
DWORD PTR __imp__GetAsyncKeyState@4
mov
WORD PTR _b$[ebp], ax;
Line 161
movzx
ecx, WORD PTR _b$[ebp]
movzx
edx, WORD PTR _mask$[ebp]
and
ecx, edx
je
SHORT $L63361;
Line 162
jmp
SHORT $endc$63353
$L63361:;
Line 164
mov
DWORD PTR _c$[ebp], 72
;
00000048H;
Line 165
mov
eax, DWORD PTR _c$[ebp]
push
eax
call
DWORD PTR __imp__GetAsyncKeyState@4
mov
WORD PTR _b$[ebp], ax;
Line 166
movzx
ecx, WORD PTR _b$[ebp]
movzx
edx, WORD PTR _mask$[ebp]
and
ecx, edx
je
SHORT $L63365;
Line 167
jmp
SHORT $endc$63353
$L63365:;
Line 169
mov
DWORD PTR _c$[ebp], 76
;
0000004cH;
Line 170
mov
eax, DWORD PTR _c$[ebp]
push
eax
call
DWORD PTR __imp__GetAsyncKeyState@4
mov
WORD PTR _b$[ebp], ax;
Line 171
movzx
ecx, WORD PTR _b$[ebp]
movzx
edx, WORD PTR _mask$[ebp]
and
ecx, edx
je
SHORT $L63369;
Line 172
jmp
SHORT $endc$63353
$L63369:;
Line 174
mov
DWORD PTR _c$[ebp], 69
;
00000045H;
Line 175
mov
eax, DWORD PTR _c$[ebp]
push
eax
call
DWORD PTR __imp__GetAsyncKeyState@4
mov
WORD PTR _b$[ebp], ax;
Line 176
movzx
ecx, WORD PTR _b$[ebp]
movzx
edx, WORD PTR _mask$[ebp]
and
ecx, edx
je
SHORT $L63373;
Line 177
jmp
SHORT $endc$63353
$L63373:;
Line 179
mov
DWORD PTR _c$[ebp], 0
$endc$63353:;
Line 183
mov
eax, DWORD PTR _c$[ebp];
Line 185
mov
esp, ebp
pop
ebp
ret
0
_CONINQ
ENDP
;
CONINQ
_TEXT
ENDS
どうぞ宜しくお願いします。ではさようなら