- ベストアンサー
プロセスの停止
HSPで実行中のプロセスを停止するソフトを作りたいんですが、停止したいプロセスは決まっていて、ボタンを押すとそのプロセスが停止するようなものが作りたいんですが、どんな命令を使えばいいか全くわかりません。ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
HSPのバージョンが書かれていませんが(HSP2.xとHSP3.xでは方法が 全然違います)取り敢えず、WinAPIのOpenProcessとTerminateProcessを 使用します。 こんな感じですがプロセスを強制終了させるので保存していない データなどは確認画面がでずに消えます。 ; API の宣言 #uselib "kernel32.dll" #cfunc OpenProcess "OpenProcess" int, int, int #func CloseHandle "CloseHandle" int #cfunc TerminateProcess "TerminateProcess" int, int #uselib "psapi.dll" #func EnumProcesses "EnumProcesses" var, int, var #cfunc EnumProcessModules "EnumProcessModules" int, var, int, var #func GetModuleFileNameEx "GetModuleFileNameExA" int, int, var, int #func GetModuleBaseName "GetModuleBaseNameA" int, int, var, int ; 変数の宣言 dim proc, 1000000 dim ret ; 起動中のプロセスリスト取得 EnumProcesses proc, length(proc), ret ; プロセスリストから指定のプロセスを取得 repeat ret / 4 ; プロセスハンドルを取得 hProc = OpenProcess(0x400 | 0x0010 | 0x0001, 0, proc(cnt)) ; プロセスハンドルが取得できたら if hProc { if(EnumProcessModules(hProc, list, 4, ret)) { sdim file, 256 sdim file_name, 256 ; モジュール名とモジュールのプルパス取得 GetModuleFileNameEx hProc, list, file, 256 GetModuleBaseName hProc, list, file_name, 256 ; 終了させたいモジュール名だったら(小文字限定) if(getpath(file, 16) = "c:\\windows\\system32\\notepad.exe") { ; 強制終了させる if(TerminateProcess(hProc, 0) = 0) { dialog "終了できませんでした" } } } ; プロセスハンドルを閉じる CloseHandle hProc } loop stop 本当はTerminateProcess()関数を使うのは好ましくないらしいです。
その他の回答 (1)
- pick52
- ベストアンサー率35% (166/466)
あ、サンプルを必死で書いていて対応バージョンを書き忘れた。 以下はHSP3.x用です。 HSP2.xではもうちょっと面倒ですので、サンプルは提示しません。
お礼
ありがとうございました。うまくできました!