dポイントプレゼントキャンペーン実施中!

HSPで実行中のプロセスを停止するソフトを作りたいんですが、停止したいプロセスは決まっていて、ボタンを押すとそのプロセスが停止するようなものが作りたいんですが、どんな命令を使えばいいか全くわかりません。ご教授お願いします。

A 回答 (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()関数を使うのは好ましくないらしいです。
    • good
    • 0
この回答へのお礼

ありがとうございました。うまくできました!

お礼日時:2008/08/11 19:21

あ、サンプルを必死で書いていて対応バージョンを書き忘れた。



以下はHSP3.x用です。
HSP2.xではもうちょっと面倒ですので、サンプルは提示しません。
    • good
    • 0

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