dポイントプレゼントキャンペーン実施中!

UWSCを勉強中で初心者です。
タイトルの件についてご教授下さい。

下記のようなプログラムを作っています。
そこで問題にあたりまして苦戦しております。
条件分岐でF6,F7,F8キーのどれかを押すと表示するプログラムです。

//1.uws 2.uws

WHILE TRUE
FUKIDASI("F6,F7,F8のいずれかを押して下さい",100,100,0,40)

IFB GETKEYSTATE(VK_F6)

//F6キーを長押ししている
PRINT "F6キーを長押ししています"
BREAK

//F7キーが長押ししている
ELSEIF GETKEYSTATE(VK_F7)
PRINT "F7キーを長押ししています"
BREAK

ELSEIF GETKEYSTATE(VK_F8)

PRINT "F8キーを長押ししています"
BREAK
ENDIF
WEND

上記プログラムですが、
CALL 1.uws
CALL 2.uws
にして2回同じ処理を行います。キーを長押ししていると切れることなく終了します。
行いたいのは「キーを長押しして1.uwsで終了し、キーを押し上げたのち2.uwsのプログラムを走らせる。」です。
タイマーではなく”キー押し上げ”で次のプログラムを走らせる関数を探しましたが見つかりませんでした。windowsの方でキーリピート無効にしましたが効果なしでした。
宜しくお願いします。

A 回答 (1件)

CtrlとかShiftキー、CapsLockキーなどならともかく、その他のキーは押している間キーがリピート入力されて、トラブル起こす可能性があります。


例えば、Chromeを使ってるならF1キーはヘルプだし、F3は検索、F6はアドレスバーへ移動とか。
F3キーを押したまま、URLを入力操作なんか出来ないです。
キーボードのデバイスドライバも、UWSCのGETKEYSTATE関数も、そういう操作は想定してないと思うので、何がどうなるか分かりません。

UWSCのデバッガ使ってるなら、F7はステップイン、F8はステップオーバーに割り当てられてるし。


> ”キー押し上げ”で次のプログラムを走らせる

なら、ShiftキーやCtrlキーを使っては。
これらのキーはリピートとか、押下によって何かの処理が行われたりってのは基本的に無いはずです。


> 上記プログラムですが、
//1.uws 2.uws

> CALL 1.uws
> CALL 2.uws

2.uwsの中から2.uwsを呼び出すと、処理が終わらないですよ。
同じ事するプログラム2つ作るのもムダだし。

--
//1.uws

key()
key()
exitexit

Procedure key()
FUKIDASI("Shift,Ctrl,Altのいずれかを押して下さい 3",100,100,0,40)
sleep(1)
FUKIDASI("Shift,Ctrl,Altのいずれかを押して下さい 2",100,100,0,40)
sleep(1)
FUKIDASI("Shift,Ctrl,Altのいずれかを押して下さい 1",100,100,0,40)
sleep(1)
Fukidasi()

WHILE TRUE
Dim strText

strText=""
IF GETKEYSTATE(VK_SHIFT)
strText = strText + "SHIFTキー押下, "
endif

IF GETKEYSTATE(VK_CTRL)
strText = strText + "Ctrlキー押下, "
endif

IF GETKEYSTATE(VK_ALT)
strText = strText + "Altキー押下, "
ENDIF

if strText="" then
Exit
else
Fukidasi(strText)
endif

sleep(1)

WEND
Fend
    • good
    • 0
この回答へのお礼

キーは何でも良かったので適当にファンクションキーを選んでいましたが、予期せぬ動作を起こさないため長押し前提のキーのほうが良いのですね。
こんな方法があるとは大変勉強になりました。
ありがとうございました。

お礼日時:2020/01/08 20:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています