返回列表 发帖

一个自动关机的代码

#include #include "resource.h" #include //注意这个头文件,要想使用扩展的一些控件就要用这个头文件 #pragma comment(lib,"comctl32.lib")//编译时增加comctl32.lib,里面有扩展控件的接口。 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; static TCHAR szAppName[] = TEXT ("SDKAutoOff") ; TCHAR time[4];//定义这个字符数组的目的是向combo box(我不知道中文怎么翻译)加入字串。 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg ; HWND hwnd ; WNDCLASS wndclass ; HMENU hMenu; int ci; InitCommonControls(); wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = DLGWINDOWEXTRA ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (hInstance,LPSTR(ID_NOTIFYICON)) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"),szAppName, MB_ICONERROR) ; return 0 ; } hwnd=CreateDialog(hInstance,szAppName,NULL,NULL) ;//我用的是 CreateDialog 函数来创建一个对话框。 hMenu=GetSystemMenu(hwnd,FALSE);//得到系统菜单的的菜单句柄。 AppendMenu(hMenu,MF_STRING,IDM_SYS_ABOUT,"关于...");//向系统菜单中加入一个项目,字串为“关于...”,ID号为IDM_SYS_ABOUT。 for(ci=0;ci<24;ci++)//用循环语句将24个小时加入到combo box中。 { if(ci<=9) wsprintf(time,"0%d",ci); else wsprintf(time,"%d",ci); SendMessage(GetDlgItem(hwnd,IDC_COMBO1),CB_ADDSTRING,0,LPARAM(time));//向combo box发送CB_ADDSTRING消息加入字串。 } for(ci=0;ci<60;ci++)//用循环语句将60分钟加入到combo box中。 { if(ci<=9) wsprintf(time,"0%d",ci); else wsprintf(time,"%d",ci); SendMessage(GetDlgItem(hwnd,IDC_COMBO2),CB_ADDSTRING,0,LPARAM(time));//同上 } ShowWindow (hwnd, iCmdShow);//显示窗口 UpdateWindow (hwnd);//刷新窗口 while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HINSTANCE hInstance ; static HMENU htaskmenu; SYSTEMTIME st;//定义一个时间结构用来储存GetLocalTime函数得到的时间。 TCHAR time[50];//定义显示在静态框中的时间字串。 POINT point;//当程序缩小为任务栏的图标时,点击右键所存储的坐标值。 UINT uID;//定义任务栏中图标的ID值。 UINT uMsg;//定义当用户对任务栏图标进行操作时,程序windows向程序发送的消息。 TCHAR tip[30];//定义当用户鼠标放到任务栏图标上时,所显示的文字字串。 NOTIFYICONDATA nid; nid.cbSize=sizeof(NOTIFYICONDATA); strcpy(nid.szTip,"开始"); nid.hWnd=hwnd; nid.uID=ID_NOTIFYICON; nid.uCallbackMessage=WM_NOTIFYICON; nid.hIcon=LoadIcon(hInstance,LPSTR(ID_NOTIFYICON)); nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; static int hour,minute;//定义关机的小时和分钟。 static BOOL IsBegin=FALSE;//定义关机标志,当为TRUE时,开启自动关机的功能 switch (message) { case WM_CREATE: hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;//初始化获得程序实例句柄。 SetTimer(hwnd,ID_TIMER,100,NULL);//设定一个程序记时器。使windows每隔1/10秒向程序发一个WM_TIMER消息。 htaskmenu=LoadMenu(hInstance,szAppName);//读入菜单,获得菜单句柄。 htaskmenu=GetSubMenu(htaskmenu,0);//设置为右键点击弹出菜单 return 0 ; case WM_TIMER://捕获WM_TIMER消息 GetLocalTime(&st);//获得系统时间 GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,&st,"HH';:';mm';:';ss",time+wsprintf(time," %d-%d-%d ",st.wYear,st.wMonth,st.wDay),50);//将时间转换为标准显示格式存储到time数组中 SetWindowText(GetDlgItem(hwnd,IDC_STATIC1),time);//将时间显示到静态框中。 if(IsBegin&&(hour==st.wHour)&&(minute==st.wMinute))//当关机标志为开并且当自动关机时间到了的时候关机。 { ExitWindowsEx(0,0);//调用ExitWindowsEx关闭机器。 PostQuitMessage(0); } return 0; case WM_NOTIFYICON://当对任务栏的图标操作时windows发送WM_NOTIFYICON消息 uID=wParam;//图标的ID值 uMsg=lParam;//用户对任务栏图标进行的是什么操作 if(uID==ID_NOTIFYICON) { switch(uMsg) { case WM_RBUTTONDOWN://如果是单击右键 GetCursorPos(&point);//获得单击的坐标位置 TrackPopupMenuEx(htaskmenu,TPM_VERTICAL|TPM_LEFTALIGN,point.x,point.y,hwnd,NULL);//在单击的位置上显示弹出菜单 break; } } return 0; case WM_DESTROY: KillTimer (hwnd,ID_TIMER); PostQuitMessage (0) ; return 0 ; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BEGIN://当点击了开始按钮 //wsprintf(tip,"关机时间:%d时%d分",hour,minute); //strcpy(nid.szTip,tip);//当用户鼠标放在任务栏图标上时所显示的内容 //Shell_NotifyIcon(NIM_ADD,&nid);//在任务栏中加入一个图标 IsBegin=TRUE;//将关机标志设为TRUE // ShowWindow(hwnd,0);//将主窗口隐藏 return 0; case IDC_COMBO1: if(HIWORD(wParam)==LBN_SELCHANGE)//当用户改变了小时combo box的选项。 hour=SendMessage((HWND)lParam,CB_GETCURSEL,0,0); //将关机小时存储到变量hour中 return 0; case IDC_COMBO2://当用户改变了分钟combo box的选项后,将关机分钟存储到变量minute中 if(HIWORD(wParam)==LBN_SELCHANGE) minute=SendMessage((HWND)lParam,CB_GETCURSEL,0,0); return 0; case IDM_STOP://当用户在弹出的菜单上选择了关闭时 ShowWindow(hwnd,1);//恢复窗口 IsBegin=FALSE;//关机标志设为FALSE Shell_NotifyIcon(NIM_DELETE,&nid);//删除图标 return 0; case ID_ABOU://当用户点击了弹出菜单的关于后 MessageBox(hwnd,"(c)枣子(wutao8@263.net)-vc之路\n2001 http://vcroad.6to23.com","sdk的自动关机",0); return 0; } case WM_SYSCOMMAND: switch(LOWORD(wParam)) { case IDM_SYS_ABOUT://当用户点击了系统菜单的关于后 MessageBox(hwnd,"(c)枣子(wutao8@263.net)-vc之路\n2001 http://vcroad.6to23.com","sdk的自动关机",0); return 0; } } return DefWindowProc (hwnd, message, wParam, lParam) ; } 下面是调试好的程序。

一个自动关机的代码

TOP

一个自动关机的代码

下面引用由kkting2006/06/18 07:31pm 发表的内容:
TCHAR time[4];//定义这个字符数组的目的是向combo box(我不知道中文怎么翻译)加入字串。
这是一个下拉列表框控件。
在C&#35;中和VB.net中经常用到,它有三种状态,通过DropDownStyle属性可以方便设置。
但用C++肯定要麻烦许多。

TOP

一个自动关机的代码

不要使用PostQuitMessage(WM_QUIT);可以用ExitProcess(0);代替。
另外,在点“开始”以后,任务栏不会出现托盘图标,也不会自动最小化缩至任务栏。这是程序缺陷。
还有,论坛公布的原代码可能会被换行而破坏,建议源码通过附件上传到论坛。期待中!

TOP

一个自动关机的代码

应 无条件为你 传原代码上来

TOP

一个自动关机的代码

kk是我的简称,ting是我想用一生去守护的人!
我每天醒来都会对自己说,我爱她,我一定会娶她做妻子的。。。。
quick!!

TOP

一个自动关机的代码

&#35;include "resource.h"
上述头文件没有,所以源码无法通过编译。
如果楼主能将整个工程项目文件上传过来,那就更好了。
这个程序功能虽然简单但用C++实现也挺难的。我就不会用C++写这种。感谢楼主辛苦。

TOP

一个自动关机的代码


TOP

一个自动关机的代码

感谢。等这阵子忙过后,有空要好好研究一番。

TOP

一个自动关机的代码

编程啊 不会
我就会 Hello World !

TOP

返回列表 回复 发帖