• ベストアンサー

プロセスの停止

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

質問者が選んだベストアンサー

  • ベストアンサー
  • pick52
  • ベストアンサー率35% (166/466)
回答No.1

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()関数を使うのは好ましくないらしいです。

whiterozes
質問者

お礼

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

その他の回答 (1)

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

あ、サンプルを必死で書いていて対応バージョンを書き忘れた。 以下はHSP3.x用です。 HSP2.xではもうちょっと面倒ですので、サンプルは提示しません。

関連するQ&A

  • CGI経由で起動したプロセスが停止してしまう

    CGIからある処理プロセスを実行させているのですが、このプロセスを長時間実行させたままにしておくと停止してしまいます。 (このプロセスはあるファイルの状態を監視しているので、停止の指示をしない限りずっと動かしっぱなしにしておきたいのですが・・・) このプロセス自体がおかしな動きをしているようには見えないのですが、何が原因で停止してしまうのか、またどうすれば停止しないようになるのか教えていただけないでしょうか? OSはRedHat Linux 5.1です。

    • 締切済み
    • CGI
  • PHP動作中のプロセスはどうなっている?

    現在PHPで動くWebアプリを作成中です。 このPHPの動作は約1分動作します。 このPHPを動作中にブラウザを閉じたり、別のページに遷移したり、またはブラウザの「中止」ボタンや「更新」ボタンを押すと、実行中のPHPのプロセスってどうなってしまうのでしょうか? これはブラウザ側からPHPの動作を停止せよという命令が行くのですか? それともPHPは最後まで実行されて、その結果のレスポンスをブラウザが受け取らないだけなのでしょうか? やりたいことがあるのですが、SQLiteはデータベースの同時書き込みができないので、他のPHPがそのデータベースを書き込む前にファイルロックと同じ要領でファイルをロックし、書き込み終了したらファイルロックを解除する、というのをやりたいのですが、書き込み中にPHPのプロセスが停止してしまったらファイルがロックしたままになるかと思って質問しました。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • タスクマネージャのプロセス停止について・・・。

    はじめまして。現在使ってるPCのメモリの使用量をタスクマネージャから停止させ減らしたいのですがどれを停止して良いか悪いか分かりません。基本的に必要ないプロセス(イメージ名)はどのようなものでしょうか?それから絶対停止してはいけないプロセスはどういったものでしょうか。よろしくお願いします。

  • プロセス停止方法

    環境 Vaio PCG-R505VJ/K Windows 2000 [Version 5.00.2195] タスクマネージャのプロセスに表示されている 特定のプロセスをバッチファイルで停止したい。 下記2つ JogServ2.exe DragDrop.exe 現在は JogServ2.exeはClearJog.exeをスタートアップに入れ対応しているがダイアログでOKの入力が必要(毎回面倒) 理由 JogServ2.exeは使用しないしあると逆に邪魔 ドッキングステーションが無い為DragDrop.exeは常時起動の必要なし。 停止方法等探したが分からなかったので安易だが、プロセス終了する方法で対応したい ※プログラムを削除・リネームで起動しない等の対応ではなく 起動時にプロセスを立ち上げない/起動時に上がってしまったものを停止する等の措置での対応が希望です。

  • remove関数(?)でプロセスが停止する。

    remove関数(?)でプロセスが停止する。 すみません。とても困っています。 ご存知でしたら、教えてください。 現在、linuxでc言語のプログラミングをしています。 元々、以下のディレクトリがあるとします。 /var/tmp/etc 2つのプロセスがあり、それぞれA、Bとします。 プロセスA内の一つのスレッドで、 remove("/var/test.dat")を実行し削除するようにプログラムしています。 また、プロセスB内の1つのスレッドで、 system("mkdir /var/tmp/etc/test1)とし、test1ディレクトリを 作るようプログラムしています。 実行し、普通に動いていたのですが、 このremove関数とsystem(mkdir)関数が同時?に実行(バッティング)すると そこでピタッと処理がとまってしまい、 (↑ログを仕込んで調べてみました。確実ではありませんが、同時に起きる時に 大体とまっていると推測しています。) /varディレクトリにすらアクセスできなくなってしまいます。 (cd var で lsコマンドを叩くと何も表示されないし、リターンもない) この現象を回避したいのはしたいのですが、 まず原因を知りたいと思っています。 remove関数とsystem(mkdir)関数が同時に走るとなぜだめなんでしょうか? すみませんが、いくら調べてわかりませんでした。 ご教示いただけると助かります。 以上、よろしくお願いいたします。

  • remove関数(?)でプロセスが停止する。

    remove関数(?)でプロセスが停止する。 すみません。とても困っています。 ご存知でしたら、教えてください。 現在、linuxでc言語のプログラミングをしています。 元々、以下のディレクトリがあるとします。 /var/tmp/etc 2つのプロセスがあり、それぞれA、Bとします。 プロセスA内の一つのスレッドで、 remove("/var/test.dat")を実行し削除するようにプログラムしています。 また、プロセスB内の1つのスレッドで、 mkdir("mkdir /var/tmp/etc/test1, mode)とし、test1ディレクトリを 作るようプログラムしています。 実行し、普通に動いていたのですが、 このremove関数とmkdir関数が同時に実行(バッティング)すると そこでピタッと処理がとまってしまい、 (↑ログを仕込んで調べてみました。確実ではありませんが、同時に起きる時に 大体とまっていると推測しています。) /varディレクトリにすらアクセスできなくなってしまいます。 (cd var で lsコマンドを叩くと何も表示されないし、リターンもない) この現象を回避したいのはしたいのですが、 まず原因を知りたいと思っています。 remove関数とmkdir関数が同時に走るとなぜだめなんでしょうか? すみませんが、いくら調べてわかりませんでした。 ご教示いただけると助かります。 以上、よろしくお願いいたします。

  • UNIXのプロセス監視

    UNIX上で実行されているプロセスを常時監視し、停止していたら自動的に再度実行させる手法はないでしょうか?

  • Windows2000で裏で動いているプログラムを停止する方法

    以前、「システム情報」の「サービス」で、現在実行中のサービス(プログラム?)を停止したことがあるのですが、どうやったのか思い出せません。 確か、「プロセスの中止」とかいうボタンがでたと思うのですが。 どうしたらいいのか教えてください。 よろしく、お願いいたします。

  • Windows の各種プロセス(サービス)の停止

    Windows(Windows7以降)について質問します。 Windows システムは各種プロセス(サービス)がバックグランドで走っていますが、 これらのプロセス(サービス)を出来るだけ停止して、VC++で作成したAppを 走らせたいと考えています(Appが擬似リアルタイム的な処理のため)。 Q1)このプロセス(サービス)の停止に関しましてコメント頂けますと大変有難いです。 以上、宜しくお願いします。

  • 不必要なプロセスを自動で停止し、cpuの確保できるフリーソフトはありま

    不必要なプロセスを自動で停止し、cpuの確保できるフリーソフトはありませんか?。低スペック( cpu)のPCを使用しています。バックグラウンドで動いているプロセスを止めて、少しでも動作を軽くしたいのですが、良いフリーソフトはありませんか?

専門家に質問してみよう