HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1207
sikakuexec命令の制御について?6解決


sikaku

リンク

2011/12/7(Wed) 08:20:51|NO.43546

HSPで別EXEファイルを実行するスプリクトをつくっています

・キーボードのCキーを押したときにEXEファイルを開く
・EXEファイルを実行時はHSPを非アクティブにしたい
・EXEファイルを二重起動しないようにする
 ただHSPにアクティブを戻した場合は二重起動してもよい

以上のことを踏まえてつくっています、で以下のスクリプトを参照ください



dim keyact_cstm,2 *mainlp //Cキー getkey keyact_cstm(0),67 if keyact_cstm(0)=1{ //押しっぱなしは操作無効にする if keyact_cstm(1)=1{ //Cキーを押したときにcustom.exeを開く }else{ exist "custom.exe" if (strsize < 0):goto *mainlp exec "custom.exe" a=0 *keychk_1 prmx=-2 prmx=ginfo(2) title ""+a wait 1 if prmx!-1:a+1:goto *keychk_1 a=10000 *keychk_2 prmx=-2 prmx=ginfo(2) title ""+a wait 1 if prmx=-1:a+1:goto *keychk_2 } } keyact_cstm(1)=keyact_cstm(0) wait 1 goto *mainlp

Cキーを一度押したり、押しっぱなしの場合はkeychk_1を
うまく通り越してくれるのですが
素早く連続で押したりしているとHSP、EXEファイル両方ともアクティブのような
感じになり、keychk_1のところを繰り返すようになります
この両方アクティブのような状態をなくし、EXEファイルのみをアクティブにするには
どうすればよいでしょうか
宜しくお願いします



この記事に返信する


XBG|YAMANOTE231103(携帯端末)

リンク

2011/12/7(Wed) 16:54:58|NO.43563

keyact_cstm(1)のところで[1でない]時の処理は素直に!=演算子を使うようにしてください。その方がすっきりします。
本題ですが
prmxにginfo(2)を代入していますが、これはHSPのアクティブ状態を確認するもので
EXEファイルが実行されアクティブにならないうちは-1が代入されることはないので、
繰り返すのは当然だと思ってください。
もしそれが嫌なら、タスクの監視など別の手法をとる方がよいでしょう。



sikaku

リンク

2011/12/8(Thu) 07:11:28|NO.43581

ご返事ありがどうございます
!=演算子を使うようにします、ついついこの表記に慣れてました

で本題なのですがすいませんちょっと説明不足でした
*keychk_1の部分は後付されたもので2回連続でCキーを押したときに両方アクティブになるので
なぜそうなるかと思い、そしていつEXEファイルが開くのかを調べる為付け足した部分なのです
実際には*keychk_1のところは省いてそのまま*keychk_2に移行する予定です
なのでどのようにしても繰り返すことは存じ上げているのですが

^豌鷁,靴疹態または長押し
△垢个笋2回以上押す
この二つではなぜか異なる状態になるのです

,両豺隋△垢鵑覆*keychk_2に移行してくれます
△両豺隋通常はアクティブになった場合はどちらかタイトルバーのところは
色が薄くなるはずなのですがどちらも色が濃いままなのです
そしてスクリプトでは*keychk_1から抜け出すことはありません

※△両豺隋⇔磴┐丕奪ーを連続して押すだけでなくgetkeyで指定していないボタンを
Cキーの次に素早く押した場合も同じ現象になります

なぜこのような現象になるのか知りたかったのです
△両豺腓任皚,両態のようにするにはどうすればいいのかわかりません
EXEファイルを開く命令から実際に開くまでになにか起きているのでしょうか?

長文ですみません



XBG|YAMANOTE231103(PC)

リンク

2011/12/8(Thu) 18:35:03|NO.43584

上のスクリプトでは
キーを2度押しするとHSPウィンドウのほうにコントロールが戻っているようですね。
仕方が無いので、ちょっと改造してタスク情報を取得することにしました。

#include "hspext.as" //↓実行するファイル名。今のところファイルを開く操作はできない。 imagename = "mspaint.exe" //押しっぱなしによる多重起動防止用変数。 k2 = 0 title "PUSH!" *main //Cキーを確認 getkey k, 67 //押しっぱなしにしていない又は押しっぱなしの始めにジャンプ if ( k2 == 0 ) and ( k == 1 ) : gosub *c_key wait 1 //押しっぱなし検出の為バックアップ k2 = k goto *main *c_key //アクティブでないなら引き戻す。 if ginfo(2) == -1 : return//非アクティブでも反応させるにはここをコメントアウト sdim returned, 20000 //タスク情報取得 pipeexec returned, "tasklist /fi \"imagename eq " + getpath( imagename, 8 ) + "\"" repeat pipeget a wait 1 title "取得中…"+cnt if stat == 0 : break loop //HSPウィンドウがアクティブ、もしくは //非アクティブの場合、同一プログラムが起動していない(それ以上多重起動させない) //時にTRUEとなる条件式。 //OSによってはプログラムが実行していない時の //メッセージが異なる場合があるので //予め以下のコマンドをコマンドプロンプトで実行し表示されるメッセージをコピーし、 //下の条件式にあるinstr関数の第3パラメータに貼り付ける // tasklist /fi "imagename eq lkdsagh.exe" // ↑存在しないEXEファイル名 if ( ginfo(2) != -1 ) or (( ginfo(2) == -1 ) and ( instr( returned, 0, "情報: 指定された条件に一致するタスクは実行されていません。" ) != -1 )){ title "GO!" exec imagename } return



sikaku

リンク

2011/12/10(Sat) 04:15:56|NO.43621

返事が遅くなってすみません
ご返答ありがとうございます

さっそく書いて頂いたスクリプトを参考にと思ったのですが
書いて頂いたスクリプトも自分のパソコンでは連続で押すと2重起動してしまう様です
どうやらPCのスペックの問題なのかも知れません

たまたま今日PCを買い換えて同じスクリプトをやった結果
2重起動せず、また同時アクティブになることはありませんでした

スペックによって起動の仕方が異なってくるんですね



sikaku

リンク

2011/12/10(Sat) 04:18:53|NO.43622

とりあえずこのままやってみようと思います
ほんとにありがとうございました



MillkeyWeler

リンク

2011/12/11(Sun) 04:02:21|NO.43648

すでに解決済みとなってますが、少々書き込み失礼します。

HSPウィンドウがアクティブ状態時にのみキーを取得するのであれば、キーの取得を onkey 命令で行ったほうがいいと思います。


onkey gosub *keyon // HSPウィンドウが非アクティブの場合は、ウィンドウメッセージが送られてこないので、onkey 命令の方が扱いやすい。 stop *keyon if wparam!67 : return // ←C キー以外は、受付ない。 mes ""+wparam // ←キーコード exec "cmd.exe" return



ONION software Copyright 1997-2018(c) All rights reserved.