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


HSPTV!掲示板


未解決 解決 停止 削除要請

2026
0218
0x0-nyanHSP3でWindows サービスを開発しよう!1解決


0x0-nyan

リンク

2026/2/18(Wed) 06:16:33|NO.104730

突然ですがHSP上でWindowsサービスの開発を可能にするプラグインを作成してみました。

HSP単体ではおそらく不可能なWindowsサービスの開発ですが、
このプラグインを使えば可能になります!

バックアップソフトや検索ソフトの自作に最適でしょう。

需要があるかどうかはわかりませんが過去ログには次のような投稿もあります。
https://hsp.tv/play/pforum.php?mode=pastwch&num=91969

ダウンロードは下記リンクからできます。
GitHub: https://github.com/0x0-nyan/HSP3Service

ご覧いただきありがとうございます。



この記事に返信する


0x0-nyan

リンク

2026/2/24(Tue) 22:49:04|NO.104761

反応ないので一部機能を省略したサンプルスクリプトを上げてみます(完全版はReleaseに含まれています)


#include "HSP3Service.as" #define LOG_FILE "HSP3Service.log" *AppMain notesel bfLog exist LOG_FILE if (strsize != -1) : noteload LOG_FILE, -1 noteadd strf("\r\nHSP3Service 1.0 Debug %d-%d-%d %d:%d:%d", gettime(0), gettime(1), gettime(3), gettime(4), gettime(5), gettime(6)), -1, 0 notesave LOG_FILE // DLLの有無を確認, 存在しない場合はERROR_DLL_NOT_FOUND (0x485)を通知して終了 exist dir_exe + "\\HSP3Service.dll" if (strsize == -1) { noteadd "FATAL ERROR: HSP3Service.dll is missing!", -1, 0 notesave LOG_FILE end 0x485 } // oncmd命令で受け取るSCとジャンプ先を指定して擬似的なコールバックを実装 oncmd *SvcStart, HSC_OK // サービス開始時 (必須) oncmd gosub *SCStop, HSC_STOP // サービス終了時 oncmd gosub *SCShutdown, HSC_SHUTDOWN // シャットダウン時 oncmd *SCError, HSC_ERROR // プラグイン内部エラー発生時 (必須) onerror *HSPError // HSPエラー発生時 // HSP3StartService命令を用いてサービスを開始する // これ以降プロセスを終了するときはExitServiceProcess命令を使う (使い方は標準のend命令と同じ) HSP3StartService 0, 0, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE if (stat) { // 成功した場合はシステムとの接続が確立するとoncmdで指定した開始時のジャンプ先に移動する noteadd strf("hThread = 0x%x", stat), -1, 0 notesave LOG_FILE } else { // 失敗した場合は終了 (パラメータに問題がない限り通常は成功する) noteadd "ERROR: HSP3StartService failed!", -1, 0 notesave LOG_FILE ExitServiceProcess } stop *SvcStart // HSC_OKメッセージを受信したらできるだけ早く初期化を完了させる nArgc = wparam maxArgLength = lparam + 2 sdim szArgv, maxArgLength, nArgc // サービスの引数文字列取得 repeat nArgc szArgv(cnt) = GetServiceArgument(cnt) loop noteadd "We received HSC_OK message successfully.", -1, 0 noteadd strf("Argc is %d, maximum argument length is %d", nArgc, maxArgLength - 2), -1, 0 notesave LOG_FILE // 初期化が完了したらReportStatus命令を用いてサービスが実行中であることをシステムに報告する ReportStatus SERVICE_RUNNING, 0 noteadd "Welcome to the world of Windows Service!", -1, 0 foreach szArgv noteadd strf("Argv[%d] = %s", cnt, szArgv(cnt)), -1, 0 loop notesave LOG_FILE // ここからサービスとしての主な処理を実行する (この例では1秒ごとにログにタイムスタンプを約1分間記録する) *SvcTaskMain repeat 60 noteadd strf("Service main task %d at %d-%d-%d %d:%d:%d", cnt, gettime(0), gettime(1), gettime(3), gettime(4), gettime(5), gettime(6)), -1, 0 notesave LOG_FILE wait 100 loop // 処理が完了したらStopService命令を用いてサービス停止と終了コードをシステムに報告し, ExitServiceProcess命令を用いてプロセスを終了する noteadd "Task done, exiting service.", -1, 0 notesave LOG_FILE StopService 0, 0 ExitServiceProcess // ユーザーがサービス停止操作をした場合やシャットダウン時はクリーンアップを完了させサービス停止を報告し, プロセスを終了する *SCStop noteadd strf("Service has been stopped manually at %d-%d-%d %d:%d:%d", gettime(0), gettime(1), gettime(3), gettime(4), gettime(5), gettime(6)), -1, 0 notesave LOG_FILE StopService 0, 0 ExitServiceProcess *SCShutdown noteadd strf("Service has been stopped by system shutdown at %d-%d-%d %d:%d:%d", gettime(0), gettime(1), gettime(3), gettime(4), gettime(5), gettime(6)), -1, 0 notesave LOG_FILE StopService 0, 0 ExitServiceProcess // エラー発生時はDLLからHSC_ERRORメッセージが送信されwParamにはWindowsのエラーコード, lParamにはエラーが発生した操作が代入される *SCError switch lparam // サービス開始失敗 case HSE_FAIL_START noteadd strf("ERROR: Failed to start service. Windows Error Code = 0x%X", wparam), -1, 0 notesave LOG_FILE swbreak // HandlerEx コールバック関数登録失敗 case HSE_FAIL_REGISTER noteadd strf("ERROR: Failed to register HandlerEx. Windows Error Code = 0x%X", wparam), -1, 0 notesave LOG_FILE swbreak swend ExitServiceProcess // HSP用エラーハンドラー *HSPError noteadd strf("HSP Error code = %d, Line = %d", err, lparam), -1, 0 notesave LOG_FILE StopService ERROR_SERVICE_SPECIFIC_ERROR, err ExitServiceProcess



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.104730への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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