• ベストアンサー

VisualC++6.0でウィンドウズをシャットダウンするプログラム

環境VC++6.0 OS:ウィンドウズXP でウィンドウズをシャットダウンするプログラムを考えています。 現在 ExitWindowsEx(EWX_FORCE, NULL); と書いて実行しましたところ ログオフまでできました。 マニュアルなどには上記のコードは有無を言わさずウィンドウズをシャットダウンするものだと書かれてあったのですが、ログオフまでしかできませんでした。 どなたか、ウィンドウズをシャットダウンするプログラムを教えていただけないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

#1です。 ソースコードのサンプルです。 void Shutdown(void) {   OSVERSIONINFO WinVersion;   HANDLE hProc,hTkn;   TOKEN_PRIVILEGES TokenP;   WinVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);   GetVersionEx(&WinVersion);   if (WinVersion.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) {     hProc = GetCurrentProcess();     if(OpenProcessToken(hProc,TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hTkn) != FALSE) {       if(LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&TokenP.Privileges[0].Luid) != FALSE) {         TokenP.PrivilegeCount = 1;         TokenP.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;         AdjustTokenPrivileges(hTkn,FALSE,&TokenP,0,NULL,0);       }     }   }   ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0); } かなり手抜きです。例えば、 ・特権が取れなかった場合もExitWindowsExを呼んでしまうので、シャットダウンせずログオフしてしまう。 ・Windows95/98/Meじゃないなら特権を取ろうとするのでwindows3.1でも特権を取ろうとしてしまう など。 うまく手抜きを修正して使用して下さい。

その他の回答 (2)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

#1です。 今、手元に具体的ソースコードが無いので、明日まで待って頂ければ具体的なソースコードを提示できます。

briant-jr
質問者

補足

早速のお返事ありがとうございます。 先ほどの特権が必要とのご指摘を受けましていろいろと試しております。 ソースコードを提示していただけるとほんと助かります。 不躾なお願いで申し訳ありませんがよろしくお願いいたします。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

WinNT/XP/2000では、シャットダウンには「シャットダウン特権」が必要です。また、Win95/98には特権は不要です。 ですので、GetVersionExで実行環境がWin95/98か調べ、Win95/98ならExitWindowExを呼ぶだけ、そうでない場合は呼ぶ前に特権を得なければなりません。 http://www.webcom-corp.co.jp/old/Win32FAQ/faq/q00023.htm

参考URL:
http://www.webcom-corp.co.jp/old/Win32FAQ/faq/q00023.htm

関連するQ&A