只是想圖個方便,或者好看,做一個跟“開始”菜單上關機一樣的按扭,打開系統的關機對話框。
於是從網上找了找現成的代碼,然後自己改了改,有了這個。
爲了不顯示出窗體,我把控制檯的窗口也給隱藏了。
VS2010建立的入口點不是main(),因爲必須爲這個我才改的。原來的是_tmain()吧,有點記不清了。
回調函數則始終我是一知半解。
//隱藏控制檯窗口1
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
//注意函數入口應爲 main() 函數
//特別說明:此方法僅僅適用於vs 2003以上版本,已經經過驗證。
//因爲#pragma comment是vs特有的,而不是c++的標準
//調用系統的關機對話框
typedef int (CALLBACK *SHUTDOWNDLG) (int);
CString s;
HINSTANCE hInst = LoadLibrary(TEXT("shell32"));
SHUTDOWNDLG SHShutDownDialog;
if(hInst != 0)
{
SHShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst, (LPSTR)60);
(*SHShutDownDialog)(0);
FreeLibrary(hInst);
}
都做完後基本上具有了功能。
但是奇怪的讓我想不明白的問題是,有時候會失效。
再打開一次,卻又管用。
最後再附加另一段隱藏控制檯的代碼吧,這個在本程序中沒起作用。也許在別的地方可以管用。
// 隱藏控制檯窗口2
HWND hwnd;
if(hwnd=::FindWindow((LPCWSTR)"ConsoleWindowClass",NULL)) //找到控制檯句柄
{
::ShowWindow(hwnd,SW_HIDE);
}