アプリ版:「スタンプのみでお礼する」機能のリリースについて

WindowsフォームアプリケーションでPCをシャットダウンさせるプログラムを製作中です。
プログラムソフトはVisual C++ 2008を使用しています。
フォーム上のボタンをクリックしたらシャットダウンさせるものです。
コンソール用の以下のコードをそのまま追加するとリンクエラーがでます。

int ShutDown(){
HANDLE hToken;
TOKEN_PRIVILEGES TokenPri;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) == FALSE){
return FALSE;
}
if(LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &TokenPri.Privileges[0].Luid) == FALSE){
return FALSE;
}
TokenPri.PrivilegeCount = 1;
TokenPri.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &TokenPri, 0, (PTOKEN_PRIVILEGES)NULL, 0);
if(GetLastError() != ERROR_SUCCESS){
return FALSE;
}
ExitWindowsEx(EWX_SHUTDOWN, 0);
return 0;
}

リンクエラーは、
error LNK2028: 未解決のトークン (0A00000F) "extern "C" int __stdcall ExitWindowsEx(unsigned int,unsigned long)" (?ExitWindowsEx@@$$J18YGHIK@Z) が関数 "private: int __clrcall timer_bata::Form1::ShutDown(void)" (?ShutDown@Form1@timer_bata@@$$FA$AAMHXZ) で参照されました。
他3つになります。

コンソール用のシャットダウン実行ファイルをWindowsフォームアプリケーションから外部コマンドを呼び出す形ではできたのですが、一つの実行ファイルにまとめることができません。どうしたらよろしいでしょうか。

A 回答 (1件)

#pragma comment(lib,"User32.lib")


#include <windows.h>
とか?

この回答への補足

回答ありがとうございます。
#include <windows.h>は元々追加していました。
#pragma comment(lib,"User32.lib")を追加すると上記のエラーの一つ
~int __stdcall ExitWindowsEx(unsigned int,unsigned long)" ~がおかげさまでなくなりました。
以下の残り3つのエラー
~int __stdcall AdjustTokenPrivileges~
~int __stdcall LookupPrivilegeValueW~
~int __stdcall OpenProcessToken~
も#pragma comment(lib,"xxxxx.lib")を追加することで解決できるということでしょうか。

補足日時:2012/10/02 16:50
    • good
    • 0
この回答へのお礼

おかげさまで、
#pragma comment(lib,"User32.lib")
#pragma comment(lib,"advapi32.lib")
の追加で解決しました。
ありがとうございました。

お礼日時:2012/10/02 17:00

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