アプリ版:「スタンプのみでお礼する」機能のリリースについて

作りたい動作は特定のアプリケーションで「(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

A 回答 (2件)

このスクリプトには「(2)のAlt+Pを押す」の処理が入ってませんよ。

それに(5)の停止処理はその書き方だと停止することは非常にまれです。なぜならGETKEYSTATEは、スクリプトがそこを通った時にしか状態をチェックしないためです。なので、とりあえずこんな感じに直す必要があるでしょう。質問の(4)ですが、そのまま実装するとF12を押した後にまたすぐ(1)でF12を押すことになり、無駄だと思ったので入れていません。

winid=GETID("使いたいアプリケーション")
While TRUE
  ACW(winid)
  //(1)
  Sckey(winid,VK_F12)
  //(2)
  Sckey(winid,VK_ALT,P)
  //(3)
  Print "休憩中"
  For i=1 To 700 //(5)0.1秒単位で数えるので70*10回ループする
    If GetKeyState(VK_ESC) Then Exit
    Sleep(0.1)
  Next
  Print "休憩終わり"
Wend

ACWをWhileループの中に入れた理由は、万一違うソフトにフォーカスが移ると目的のソフトにキー入力が届かない心配があり、そうなるのを避けるためです。

UWSCの時間指定はトラップで、Sleepは秒単位なのにそれ以外はミリ秒単位です。なのでKBD(VK_F12,DOWN,77)だと、77秒じゃなくて77ミリ秒(0.077秒)となります。
    • good
    • 0

私もあまり詳しくはないですが



while TRUE
//if GETKEYSTATE(VK_ESC) then exitexit //exitexit・・・UWSCを終わる
if GETKEYSTATE(VK_ESC) then break //break・・・ループを抜ける
KBD(VK_F12,DOWN,300)
SLEEP(0.1)
KBD(VK_F12,UP,300)
//sleep(72+random(15))
秒数 = (1+random(15))
for i = 1 to 秒数 step 1
SLEEP(1)
ifb GETKEYSTATE(VK_ESC) then
KBD(VK_F12,DOWN,300)
//exitexit
break
endif
next
KBD(VK_F12,DOWN,300)
Print "休憩中"
wend
    • good
    • 0

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