定时关机程序

代码如下:

   

#include  < windows.h >
#include 
" resource.h "
#include 
< commctrl.h > // 注意这个头文件,要想使用扩展的一些控件就要用这个头文件
#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, 00))
     
{
          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之路 2001 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之路 2001 http://vcroad.6to23.com","sdk的自动关机",0);
               
return 0;
          }

     }

     
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

 

  里面有几个我觉得需要注意的地方,改日有时间再补上.

          

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值