HAMLOG開発室は、HAMLOGに関連したプログラム開発(C、パスカル、VB言語等、又はDLL)についての
専用BBSです。プログラム言語に関する投稿以外は通常のHAMLOG相談室に投稿して下さい。
HAMLOG開発室BBS

ReRe: 入力 補足 投稿者:

> 関数をもう一度呼び出せば、クリアされるようですけど。
> よその掲示板では質問者が具体的なコードを示して、
> それに対して回答者がアドバイスをするようです。
> ここでもそれが望ましいと私は考えます。
> 回答者が無駄な推測をしなくてすみます。
>
> 以下、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

どうぞ宜しくお願いします。ではさようなら

2008/01/07(Mon) 22:49:49  [No.43]


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)
- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
Call 名前 ※必須
文字色
Eメール
タイトル sage
URL
メッセージ 手動改行 強制改行 図表モード
メッセージには上記と同じURLを書き込まないで下さい
画像File  (130kBまで)
暗証キー (英数字で8文字以内)
投稿キー (投稿時 投稿キー を入力してください)
プレビュー