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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0329
562windowsのシャットダウン7解決


562

リンク

2006/3/29(Wed) 16:29:25|NO.147

windowsをシャットダウンするプログラムをつくっているのですが、
(OSはXPです)
どうすればいいのか全く分かりません!
誰か教えて下さい!



この記事に返信する


UNU-

リンク

2006/3/29(Wed) 17:00:32|NO.148

[ヘルプ(H)] → [HSPキーワード検索] で
検索キーワードに「シャットダウン」と入れます!!!!
sysexitを選択します。そこに出てきたヘルプをよく読んで頑張りましょう!!

結果的に

sysexit 2 sysexit 3
ってなります!!!!!!!



Irisawa

リンク

2006/3/30(Thu) 00:43:44|NO.160

拡張プラグインを使用したくない場合はExitWindowsEx()API関数を自分で呼び出して
ください。
VC++での使用方法ですが以下のような感じです。

http://www.runan.net/program/tips/sdk_13_ExitWindowsEx.shtml



562

リンク

2006/3/30(Thu) 12:25:38|NO.163

sysexitのログオフ以外がすべて反応しません!
モード0以外だと、一瞬ウィンドウが表示されるだけですぐ終了してしまいます!
   
#include"hspext.as"
  sysexit 2   sysexit 3 end
     ↑
  スクリプトはこうなっています。
誰か教えてください!!



猫太

リンク

2006/3/30(Thu) 16:45:13|NO.165

どうも、お久しぶりです!
シャットダウンですか〜
これは、APIを自前で呼ぶか他の拡張モジュール・プラグインを使ったほうが安定してると思います。
(経験上コッチのほうが確実でした)
APIのサンプルでしたら私のサイトで公開しておりますので参考にどうぞ。(休止状態とスタンバイ機能もOSしだいで可)
他は、さくらさんのhsp3stdlibモジュールで、終了ダイアログを出すやつがあるはずです。
あと、本家の過去ログにもサンプルがあります。
ま〜探せばたくさんあるということです。
では〜



Irisawa

リンク

2006/3/30(Thu) 18:17:51|NO.168

http://www.runan.net/program/tips/sdk_13_ExitWindowsEx.shtml

を移植してみました。
いろいろ試してみてください。


#uselib "kernel32.dll" #cfunc GetCurrentProcess "GetCurrentProcess" #uselib "user32.dll" #func ExitWindowsEx "ExitWindowsEx" int, int #uselib "advapi32.dll" #func OpenProcessToken "OpenProcessToken" int, int, var #func LookupPrivilegeValue "LookupPrivilegeValueA" sptr, sptr, var #func AdjustTokenPrivileges "AdjustTokenPrivileges" int, int, var, int, int, int #const EWX_LOGOFF 0 ; ログオフ #const EWX_SHUTDOWN 1 ; シャットダウン #const EWX_REBOOT 2 ; リブート #const EWX_FORCE 4 ; 強制 #const EWX_POWEROFF 8 ; 電源を切る #const TOKEN_QUERY 0x08 #const TOKEN_ADJUST_PRIVILEGES 0x20 #define SE_SHUTDOWN_NAME "SeShutdownPrivilege" #const SE_PRIVILEGE_ENABLED 0x02 gosub *SetPrivileges ; 権限を指定 ExitWindowsEx EWX_REBOOT, 0 ; Windows を終了 end *SetPrivileges dim Luid, 2 dim tokenNew, 16 dim tokenPre, 16 hProcess = GetCurrentProcess() OpenProcessToken hProcess, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, hToken LookupPrivilegeValue 0, SE_SHUTDOWN_NAME, Luid tokenNew(0) = 1 memcpy tokenNew(1), Luid, 8 tokenNew(3) = SE_PRIVILEGE_ENABLED AdjustTokenPrivileges hToken, 0, tokenNew, 16, varptr(tokenPre), varptr(ret) return



さくら

リンク

2006/3/30(Thu) 21:16:40|NO.173

APIを利用する方法が一般的なようですが、HSP3になってから、COMが利用できるので
APIじゃないVBScriptによるWMI(Windows Management Instrumentation)を使った
方法をサンプルとして載せておきます。(2000以降のOS専用です)


onexit *owari font "MS ゴシック",14,0 : objmode 2 objsize 300,26 pos 40,40 button " ウィンドウズの電源断    ",*mode01 button " ウィンドウズの再起動    ",*mode02 button " ウィンドウズのログオフ   ",*mode03 newcom objVBsc, "ScriptControl" objVBsc("Language")="VBScript" stop *mode01 ;▼poweroff Script (ウィンドウズの電源断) vbs = {" Sub vbcmd() Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 8 Next End Sub "} objVBsc->"AddCode" vbs objVBsc->"Run" "vbcmd" delcom objVBsc end *mode02 ;▼reboot Script (ウィンドウズの再起動) vbs = {" Sub vbcmd() Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 0 Next End Sub "} objVBsc->"AddCode" vbs objVBsc->"Run" "vbcmd" delcom objVBsc end *mode03 ;▼logoff Script (ウィンドウズのログオフ) vbs = {" Sub vbcmd() Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 2 Next End Sub "} objVBsc->"AddCode" vbs objVBsc->"Run" "vbcmd" delcom objVBsc end *owari ;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか if vartype(objVBsc)==6 { if varuse(objVBsc)==1 : delcom objVBsc } end



562

リンク

2006/4/1(Sat) 10:20:53|NO.200

ありがとうございます
よく分かりました



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