• ベストアンサー

UWSCでキー入力を変数に代入する方法

IFB GETKEYSTATE(VK_CTRL) PRINT "Ctrlキーが入力されたよ" ENDIF という風に決め打ちで何が押されたか確認する方法は分かったのですが、 SELECT KeyInput CASE VK_CTRL PRINT "Ctrlキーが入力されたよ" CASE VK_ESC PRINT "Escキーが入力されたよ" SELEND というように変数にキー入力を代入してから比較する方法が分かりません。 キー入力を変数に代入する方法はあるのでしょうか?

  • bgn
  • お礼率20% (40/199)

質問者が選んだベストアンサー

  • ベストアンサー
  • kichi8000
  • ベストアンサー率41% (658/1581)
回答No.2

配列変数に入れておくとか --------------------- DIM KEY[] = VK_CTRL, VK_ESC, VK_SHIFT //先に登録 //DIM TEXTS[]="CTRL","ESC","SHIFT" //対応文字 KeyInput = NULL For i = 0 to LENGTH(KEY)- 1 IFB GETKEYSTATE(KEY[i]) THEN KeyInput = KEY[i] //PRINT TEXTS[i]+"キーが入力されたよ" BREAK //スルーするためForループを抜ける ENDIF NEXT //以下付け足し SELECT KeyInput CASE VK_CTRL PRINT "Ctrlキーが入力されたよ" CASE VK_ESC PRINT "Escキーが入力されたよ" SELEND ---------------------

その他の回答 (1)

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.1

KeyInput=GETKEYSTATE(VK_CTRL) という形で代入できますが、予め何が押されたかを指定する必要のなるGETKEYSTATEなら KeyInput=0 if KeyInput = 0 Then if GETKEYSTATE(VK_CTRL) then KeyInput=VK_CTRL if KeyInput = 0 Then if GETKEYSTATE(VK_ESC) then KeyInput=VK_ESC と言った羅列が必要になるので、Select~Caseで改めて判定する事で遅くなる必要性があるのかでしょうね。

関連するQ&A

  • UWSC 非アクティブウィンドウへのキー入力

    こんにちは。「MapleStory」というゲームで非アクティブ状態でもキー情報が入力されるようにしたいのですが・・・ネットでいろいろ調べたところここまでたどり着きました。 while true if GETKEYSTATE(VK_ESC) then exit //ESCで終了 id = GETID("MapleStory","MapleStoryClass") ifb (ID < 0) MSGBOX("ウィンドウが見つかりません") exitexit //見つからなければ終了 endif hwnd = GETCTLHND(id, "MapleStoryClass") MOUSEORG(hwnd, 2) KBD(VK_A,DOWN,200) wend ↑のように書けば非アクティブでもAが入力されると思ったのですが、アクティブ状態でしか入力してくれません。 どのようにしたら良いのでしょうか?どなたかご教授お願いします。ちなみに調べたところクラスはMapleStoryClassの1つだけのようでした。

  • UWSCで変数をキー入力

    UWSCで変数に応じたキー入力をしたいのですが、 どうすればいいのでしょうか? たとえば 変数Aが 1 の場合は 01 とキー入力 変数Aが 25 の場合は 25 とキー入力 という感じで、変数Aは1~84までの値を取ります。 これをSELECT文で試してみたのですが、 1~5くらいまでならうまくいくのですが、 さすがに84まであるとエラーがでてしまいます。 SELECT A CASE 1 KBD(VK_0,CLICK,40) KBD(VK_1,CLICK,40) CASE 2 KBD(VK_0,CLICK,40) KBD(VK_2,CLICK,40) ・ ・ CASE 84 KBD(VK_8,CLICK,40) KBD(VK_4,CLICK,40) SELEND ↑エラー 二桁目と一桁目で分けて入力すればよさそうですが、 どう処理すればいいのかわかりません。 また、仮に変数が文字列を値として取る場合も、 その文字列をそのままキー入力させるにはどうしたらよいでしょうか?

  • UWSCの仮想キーについて

    if GETKEYSTATE(VK_F1) then 例えば GETKEYSTATEで CtrlキーとF1キーを同時に押されている時にthenとしたい場合 どう表現したら良いのでしょうか? if GETKEYSTATE(VK_F1&VK_CTRL) thenとなるのでしょうか? それとも KBD(VK_CTRL,DOWN,秒) KBD(VK_F1,CLICK,秒) KBD(VK_CTRL,UP,秒) のような表記でしか使えないのでしょうか?

  • UWSCのSELECT文の記述方法

    UWSCのSELECT文について教えてください。 今IFB-ELSE-ENDIFを使って行っている条件文を SELECT文でスマートに書き直しできますか? たとえば ifb cnt < 3 then print "3未満" elseif cnt >=3 and cnt <= 5 then print "3~5" else print "6以上" endif みたいな範囲を持った条件式なんですが、 select文の範囲指定みたいな記述方法が分かりません。 select case cnt < 3 print "3未満" case cnt >=3 and cnt <= 5 print "3~5" default print "6以上" endif の様に書いても上手く動きません。 select文はこういう使い方はできないんでしょうか?

  • UWSC 非アクティブでの動作

    while true if GETKEYSTATE(VK_ESC) then exit // Escapeキーでスクリプト停止 ID = GETID("TEST.txt - メモ帳","Notepad") ifb (ID < 0) MSGBOX("ウィンドウが見つかりません") exitexit endif id = GETCTLHND("TEST.txt - メモ帳","Notepad"),"Edit","1") MOUSEORG(id,2) KBD(VK_S,DOWN,200) wend TEST.txtという名前のメモ帳に、最小化していたり、非アクティブな状態でも UWSCによるキー入力を送信したいのですが、上手くいきません・・。 実行させると 「式がおかしい or  型があっていない」 「13行目: id = GETCTLHND("TEST.txt - メモ帳","Notepad"),"Edit","1")」 と表示され、動いてくれません。 いろいろ調べてはみたのですが、解決できなかったので どなたかわかりやすく説明などして下さるとありがたいです。

  • UWSCで画像が消えた場合に動作せるやり方

    ある画像 aaa.bmp だったとします この画像があるときは なにもせず なくなった場合(画像が消えるまで繰り返す)に ENTER ENTER と 押すようなスプリクト を 書いて頂けないでしょうか? While true if GETKEYSTATE(VK_ESC) then exit If ChkImg("aaa.bmp")=TRUE  ←画像があるとき? Ifb and ChkImg("aaa.bmp")=FALSE ←画像が消えた時? kbd(VK_ENTER) kbd(VK_ENTER) endif wend なんとか こんな感じまで 出来ました よろしくお願いいたします

  • UWSCについて

    UWSCでマクロを使い画像判断検索?をしたいのですが While true  // 繰り返し ここから if GETKEYSTATE(VK_ESC) then exit // Escapeキーでスクリプト停止 Ifb chkimg("aiueo.bmp") = true then // 画像判定 // ここから あった時 sleep(1) // 待ち時間 // ここまで あった時 // ここから なかった時 else  sleep(1) // 待ち時間 // ここから なかった時 BTN(LEFT,CLICK,74,60,1217) Endif // 画像判定 終了 wend //繰り返し ここまで これで画像ファイルの名前を uwsc_aiueo.uws にしてくださいとあったのでそのままファイル名に使ってるのですがうまくいってません。 初心者ですが教えていただけないでしょうか?

  • 入力されたキーの判断

    入力されたキーの判断をするのは どの様にしたらいいのでしょうか? とりあえず RETURNが取りたかったので if(GetKeyState(VK_RETURN) & 0x80 ) { } としましたらうまくいくときと行かないときがあります 宜しくお願いいたします

  • UWSCについて

    UWSCの設定について質問させて頂きます。 私がしたいのは、画面上に画像が現れた瞬間からカウントをスタートし、一定時間で左クリックを一回押すというものです。 現在は下記のように試しており、大体は思い通りなのですが、カウントスタート前にUWSCの停止ボタンのポップアップが点滅状態のため画像が現れた瞬間に反応できてないような感じです。 コンマ数秒でのことですがどうしても正確にしたいのです。 プログラムについての知識もなく行き詰まってしまいました。 どうか宜しくお願い致します。 while true if GETKEYSTATE(VK_ESC)then exit ifb CHKIMG("画像.bmp",0) BTN(LEFT,CLIK,10000) ENDIF WEND

  • 最初に押されたキーを調べるには?

    下のプログラムではCTRLを押しながらAを押しても、Aを押しながらCTRLを押してもメッセージボックスが表示されます。 これをCTRLを押しながらAを押した場合だけメッセージボックスを表示するように変えたいのですが、2つのキーが押されている時に最初に押されたキーを調べる方法がわかりません。 どうすればいいでしょうか? case WM_KEYDOWN: if( (GetKeyState(VK_CONTROL)<0) && (GetKeyState(0x41)<0)){ MessageBox(hWnd,TEXT("CTRL+Aが押されました。"),TEXT("テスト"),MB_OK); } --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語