非アクティブウィンドウへのキー入力方法 | UWSC
- 非アクティブな状態でも「MapleStory」というゲームでキー情報を入力する方法について教えてください。
- UWSCで非アクティブウィンドウへのキー入力を行う方法を教えてください。
- 非アクティブな状態でもUWSCを使用して「MapleStory」にキー情報を送信する方法について教えてください。
- ベストアンサー
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つだけのようでした。
- 021akanuuy
- お礼率100% (1/1)
- その他(ソフトウェア)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そのやり方には、重大な欠陥が二つあります。 1) MOUSEORG関数は、座標原点を移動させるだけであって、アクティブウィンドウを切り替えたりイベントの送り先を切り替えたりする機能は持たない 2) KBD関数が発生するキー操作イベントは必ず、アクティブウィンドウに対してのみ送信され、バックグラウンドのウィンドウにはどうやっても行かない。これはBTN関数も同様 キー入力の送り先を指定するときはKBD関数じゃなくて、SCKEY関数を使いましょう。これなら送り先のウィンドウIDを指定できます。とりあえずこんな感じ? //hwnd = GETCTLHND(id, "MapleStoryClass") //MOUSEORG(hwnd, 2) SCKEY(id,VK_A)
関連するQ&A
- 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 なんとか こんな感じまで 出来ました よろしくお願いいたします
- 締切済み
- Windows XP
- UWSCでキー入力を変数に代入する方法
IFB GETKEYSTATE(VK_CTRL) PRINT "Ctrlキーが入力されたよ" ENDIF という風に決め打ちで何が押されたか確認する方法は分かったのですが、 SELECT KeyInput CASE VK_CTRL PRINT "Ctrlキーが入力されたよ" CASE VK_ESC PRINT "Escキーが入力されたよ" SELEND というように変数にキー入力を代入してから比較する方法が分かりません。 キー入力を変数に代入する方法はあるのでしょうか?
- ベストアンサー
- Windows 10
- UWSCのスクリプトで行き詰っています。。
作りたい動作は特定のアプリケーションで「(1)F12を押す⇒(2)Alt+Pを押す⇒(3)70秒待機⇒(4)F12を押す((1)~(4)を無限にループ)(5)ESCキーでマクロを停止」です。特に座標の指定などありませんので一通り自分で挑戦してみましたが素人構成なのでうまく動作しませんでした。あれこれとしてみた結果、結局どういった風に組んでよいか分からず途方にくれています・・・。詳しい方がいらっしゃいましたらご教授ください。よろしくお願いします。 以下組んでみたスクリプト ACW(GETID("使いたいアプリケーション")) while TRUE if GETKEYSTATE(VK_ESC) then exit KBD(VK_F12,DOWN,77) KBD(VK_F12,UP,77) SLEEP(1) sleep(72+random(15)) KBD(VK_F12,DOWN,77) Print "休憩中" wend
- ベストアンサー
- その他(プログラミング・開発)
- UWSCのキーボード入力ですが、下記の通りでは、"natm"等になって
UWSCのキーボード入力ですが、下記の通りでは、"natm"等になってしまい、うまく入力されません。 Ifb ChkImg("bmp/test/natume.bmp") KBD(VK_N,CLICK,40) KBD(VK_A,CLICK,40) KBD(VK_T,CLICK,40) KBD(VK_U,CLICK,40) KBD(VK_M,CLICK,40) KBD(VK_E,CLICK,40) KBD(VK_ENTER,CLICK,40) Endif また、これでは記述する際に大変ですので、キーボード入力の箇所を1行に抑えること、あるいはこれよりも楽に記入する手段はないでしょうか? どうかよろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- UWSCによる色識別がWin7だとできない
UWSCでPEEKCOLORを使い、指定した座標の色を識別して、キーを押すといった動作をさせたいのですが、 XPのPCだと正常に動作するのに、Win7のPCになると何も動作が起きず上手くいきません。 同じスクリプト文を使用しているにも関わらず、Win7だと動作起きないのは、色を識別する方法が異なるのでしょうか? 動作文は以下の通りです。 While True ifb PEEKCOLOR(198,68) = $845539 then Kbd(VK_F4,DOWN,30) Kbd(VK_F4,UP,30) else Endif ifb PEEKCOLOR(198,56) = $845539 then Kbd(VK_F5,DOWN,30) Kbd(VK_F5,UP,30) else Endif WEND 色を調べる方法として、WinXP・7共に次のものを使用しました。 OLD_X = 0 OLD_Y = 0 OLD_COLOR = 0 while TRUE WIN_ID = GetID(GET_ACTIVE_WIN) MOUSEORG(WIN_ID) BASE_X = STATUS(WIN_ID, ST_X) BASE_Y = STATUS(WIN_ID, ST_Y) ifb GETKEYSTATE(VK_LBUTTON) then NEW_X = G_MOUSE_X; NEW_Y = G_MOUSE_Y OFF_X = NEW_X - BASE_X; OFF_Y = NEW_Y - BASE_Y c=PeekColor(OFF_X, OFF_Y) ifb NEW_X <> OLD_X OR NEW_Y <> OLD_Y OR c <> OLD_COLOR then PRINT "X="+(OFF_X)+"/Y="+(OFF_Y)+"/赤="+(c and $FF)+"/緑="+((c and $FF00)/$100)+"/青="+((c and $FF0000)/$10000)+"/BGR値=$"+FORMAT( c,6,-1 ) endif OLD_X = NEW_X; OLD_Y = NEW_Y; OLD_COLOR = c endif sleep(1) wend 色々調べてみましたが、やはりWin7でのみ動作しなくて困っています。 原因が分かる方、助言お願いします。
- 締切済み
- その他(プログラミング・開発)
- 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 にしてくださいとあったのでそのままファイル名に使ってるのですがうまくいってません。 初心者ですが教えていただけないでしょうか?
- ベストアンサー
- その他(インターネット・Webサービス)
- 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について
UWSCの設定について質問させて頂きます。 私がしたいのは、画面上に画像が現れた瞬間からカウントをスタートし、一定時間で左クリックを一回押すというものです。 現在は下記のように試しており、大体は思い通りなのですが、カウントスタート前にUWSCの停止ボタンのポップアップが点滅状態のため画像が現れた瞬間に反応できてないような感じです。 コンマ数秒でのことですがどうしても正確にしたいのです。 プログラムについての知識もなく行き詰まってしまいました。 どうか宜しくお願い致します。 while true if GETKEYSTATE(VK_ESC)then exit ifb CHKIMG("画像.bmp",0) BTN(LEFT,CLIK,10000) ENDIF WEND
- ベストアンサー
- フリーウェア・フリーソフト
- USWC初心者です。画像で終了させたいのですが
USWCをさわり初めたばかりの初心者です。 3ヵ所をクリック+キー押しするだけで、基本ループし、指定画像が出たら終了するようにしたいのですが、終了が上手くできません。延々とループしてしまいます・・・・。 いろいろと検索して、調べながらやっているのですが、1日やってても解決しない状態です。 USWCがおわかりにになる方がいらっしゃいましたら、ご教授いただけますと助かります(>_<) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ //tabキーが押されるとマクロ終了。 While !GetKeyState(vk_tab) WHILE (TRUE) BTN(LEFT,DOWN,1403,796,1154) MMV(1403,796,10) BTN(LEFT,UP,1403,796,125) MMV(1403,796,405) KBD(VK_1,CLICK,2574) KBD(VK_2,CLICK,25210) MMV(1403,797,13574) SLEEP(0.01) Wend Wend IFB (CHKIMG("owari.bmp")=TRUE) THEN x=G_IMG_X + 1213 y=G_IMG_Y + 457 BTN(LEFT,DOWN,1213,457,858) endif Wend Sleep(2) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- ベストアンサー
- フリーウェア・フリーソフト
お礼
ありがとうございます!望んでいた操作ができました! KBD関数とBTN関数がアクティブウィンドウのみにしか送信できないとは知りませんでした・・・ これからも入力先の指定をする必要が出てきた時はRandenSai様の教えてくださったとおりにSCKEY関数を使ってみます!本当にありがとうございました!