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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1204
exec で読み込んだファイルをendで一緒に閉じる6解決


リンク

2021/12/4(Sat) 20:21:53|NO.94605


screen 0,600,480 exec "ファイル名" button "終了",*owari stop *owari end
という感じので、終了ボタンが押されたとき。つまりendに行ったとき、読み込んだファイルも
一緒に消す方法ありますか?
互換モードでやると、読み込んだファイルも互換モードで実行されるのでできないかなぁと



この記事に返信する


Crystal

リンク

2021/12/4(Sat) 22:40:18|NO.94608

できるとしたら、コマンドプロンプトを若干使用しますかね...
HSPでどこまでできるかわかりませんが、方針としては、

①実行させたいアプリの監視 →実行させたいアプリのPID取得
②*owari で、execで、"cmd.exe taskkill /pid <取得したPID> /F で強制終了させる

>読み込んだファイルも一緒に消す方法ありますか?
ウィンドウを消すのであれば上のプロセスが役に立つと思います。

実用するのであれば、https://okwave.jp/qa/q4237327.html より、一部改造し、実行させたいアプリ名に置き換えてみて実行するくらいかな?
※上だと移植が困難だと感じたため、以下のスレッドを参考にどうぞ。こちらの方がわかりやすいはず。
http://hsptv.sakura.ne.jp/play/pforum.php?mode=pastwch&num=32730



リンク

2021/12/4(Sat) 23:56:43|NO.94609

何度もすみません、PIDは同取得するのですか?



こいる

リンク

2021/12/5(Sun) 08:20:45|NO.94610

execでなく、CreateProcess関数で実行すれば直接プロセスIDが取れますよ。
終了には、taskkillコマンドを/fオプションを付けずに使い、通常終了させます(強制終了させると終了時の処理がされないので)


#uselib "kernel32.dll" #func CreateProcess "CreateProcessA" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr #define NULL 0 #define FALSE 0 #define CREATE_NO_WINDOW 0x8000000 #func CloseHandle "CloseHandle" sptr // 実行するファイル選択(一応カレントディレクトリは元に戻す) originalCurDir = dir_cur dialog "exe", 16, "実行可能ファイル" if (stat == 0) : end fileName = refstr chdir originalCurDir // 起動 dim startupInfo, 17 startupInfo(0) = varsize(startupInfo) dim processInfo, 4 CreateProcess fileName, "", NULL, NULL, FALSE, 0, NULL, NULL, varptr(startupInfo), varptr(processInfo) hProcess = processInfo(0) hThread = processInfo(1) processId = processInfo(2) ;threadId = processInfo(3) button "終了",*owari stop *owari // 終了(taskkillコマンドで、強制終了ではなく通常終了させる。CREATE_NO_WINDOWフラグでコマンドプロンプトが表示されないように) dim startupInfoCmd, 17 startupInfoCmd(0) = varsize(startupInfoCmd) dim startupInfoCmd, 4 CreateProcess NULL, strf("cmd.exe /c taskkill /pid %d", processId), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, varptr(startupInfo), varptr(processInfo) CloseHandle startupInfoCmd(0) CloseHandle startupInfoCmd(1) // プロセス・スレッドのハンドルを閉じる CloseHandle hProcess CloseHandle hThread end



ねんねこ5787

リンク

2021/12/5(Sun) 10:58:16|NO.94616

>>94608
こちらを見ると
http://hsp.tv/play/pforum.php?mode=pastwch&num=23465

exec dir_sys + "\\taskkill.exe /F /T /IM プロセスを停止したい実行ファイル名.exe", 2
でできるみたいです。



こいる

リンク

2021/12/5(Sun) 11:14:12|NO.94617

すみません。NO.94610のコードにミスがありました。

35~38行目を

dim startupInfoCmd, 4 CreateProcess NULL, strf("cmd.exe /c taskkill /pid %d", processId), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, varptr(startupInfo), varptr(processInfo) CloseHandle startupInfoCmd(0) CloseHandle startupInfoCmd(1)

下のコードに置き換えてください。

dim processInfoCmd, 4 CreateProcess NULL, strf("cmd.exe /c taskkill /pid %d", processId), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, varptr(startupInfoCmd), varptr(processInfoCmd) CloseHandle processInfoCmd(0) CloseHandle processInfoCmd(1)


>ねんねこ5787 さん
これだと、HSP側では起動していない、ユーザーが起動した同じソフトまで終了されてしまうのでよくないですね。
また、/Fオプションを付けると「強制終了」となり、対象プロセスの終了処理(設定をファイルに保存するなど)がされないので、/Fオプションは使わない方がいいでしょう。



リンク

2021/12/5(Sun) 12:41:49|NO.94619

おかげで解決できました。
ありがとうございました



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