您的位置:首页 > 编程语言 > C语言/C++

[C++]回调系统关机对话框

2013-03-03 15:30 162 查看
只是想图个方便,或者好看,做一个跟“开始”菜单上关机一样的按扭,打开系统的关机对话框。

于是从网上找了找现成的代码,然后自己改了改,有了这个。

为了不显示出窗体,我把控制台的窗口也给隐藏了。

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: