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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0703
みきのエディタのコンパイル+実行では動作するのですが、EXEファイルにすると途中終了してしまう。3解決


みきの

リンク

2014/7/3(Thu) 22:21:25|NO.62733

エディタのコンパイル+実行ではきちんと動作するのですが、
EXEファイルにするとエラーも出ずに途中終了してしまいます。

クリップボードにはコピー出来ているのでそれ以降で終了してしまうようです。

repeat~loopのでマウスクリックを待つはずなのですけど、うまく行きません。
エディタでは動くので、どこを直せばいいのか・・・。
stickが即反応してるのかとも思ったのですが、endをstopにしても、
HSPのウィンドウも消えてしまいますので途中で終了してしまってるようなのです。

やりたいことは、クリップボードの中身を貼り付けたいだけなのです。
それも必ずしも成功する必要はなくて、マウスクリックでその場に貼り付けられればという程度のものです。
右クリック貼り付けが面倒なので、ワンクリックで貼り付けられないかと試しているですが。



#include "hspext.as"
#packopt HIDE 1
gsel 0,1
screen 0,250,50
mes "音声クリップ"
#uselib "SpeechDialog.dll"
#func SpeechDlg "SpeechDlg" int, var
sdim char1, 500
*start
SpeechDlg hwnd, char1
if char1 ! "" : goto *clipcopy
end

*clipcopy
mes char1
clipset char1 ;クリップボードにコピー

kk = 0
repeat
stick kk, 0, 0
if kk = 256 : goto *paste
loop

*paste ;CTRL+V
wait 100

#uselib "user32.dll"
#func keybd_event "keybd_event" int, int, int, int
#define VK_CONTROL 0x11
#define KEYEVENTF_KEYUP 2
keybd_event VK_CONTROL, 0, 0, 0
keybd_event 'V', 0, 0, 0
wait 10
keybd_event 'V', 0, 2, 0
keybd_event VK_CONTROL, 0, 2, 0
end



この記事に返信する


check

リンク

2014/7/3(Thu) 22:59:14|NO.62735

hspext.dll、SpeechDialog.dllがexeファイルと同じフォルダに入っているかどうかを確認したほうがいい。



掘木

リンク

2014/7/3(Thu) 23:23:39|NO.62738

>checkさん
dll不在ならHSP側がエラー吐いてくれたような。
それにクリップボードへのコピーは成功しているようなので、
2つのdllは正しく入ってる気がします。

>みきのさん
クリップボードへのコピーまでは上手くいっているとのことなので、
コードの後半部分だけ(hspextとSpeechDialog未使用)でテストしてみましたが・・・。

kk = 0 からテストした感じ、こちらも貼り付けに失敗しました。
しかしプログラムの最後のendをstopに変えてもウィンドウが消滅するという状況が再現できませんでした。
一体どういう状況なのでしょう。。。

4つのkeybd_eventそれぞれの間にwait(10程度でよさそう?)を挟むことで、
貼り付けの成功は確認できました。

endをstopに変えても強制終了している以上、
そもそもコードの末端まで到達することなく何かしらの要因で強制的に終了されてる可能性が。(DLL絡み?)
notesaveを駆使する等で"どこまで正しく実行できているのか"を確認してみると原因が特定しやすくなるやも。
…一番楽なのはEXE生成し直すの忘れてたー っていう状況ですが。

どうでもいいかもしれないこと:
・repeat-loopをgotoで脱出するのはあまり行儀のよい書き方じゃない気が。この場合breakで十分です。
・repeat-loopによるキーの待ち処理の中にwaitやawaitを入れておくことをおすすめします。処理負荷的に。
・KEYEVENTF_KEYUPが定義されているのにkeybd_eventでは直接値が・・・。
 ついでに、KEYEVENTF_KEYDOWNも定義するとUPとDOWNの対が見やすくなっていいかも?

・こちらのテスト環境はWinXPです。



みきの

リンク

2014/7/4(Fri) 00:40:32|NO.62739

すみません。exe実行ファイルの作り方ミスってました。

掘木さま。
repeat-loop、waitの件。大変勉強になりました。ありがとうございます。
keybd_eventは動きそうなのをコピペしたもので^^;



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