只是想图个方便,或者好看,做一个跟“开始”菜单上关机一样的按扭,打开系统的关机对话框。
于是从网上找了找现成的代码,然后自己改了改,有了这个。
为了不显示出窗体,我把控制台的窗口也给隐藏了。
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);
}