Windows API 函数学习(11)---一个关机程序的源代码
来源:互联网 发布:数据库路由器软件icx 编辑:程序博客网 时间:2024/05/16 09:41
// dlgMain.cpp : Defines the entry point for the application.
//一个关机程序。
#include "stdafx.h"
#include "resource.h"
#include <stdio.h>
#include < Shellapi.h>
HINSTANCE hInst;
HICON hIcon;
int hour,minute;
NOTIFYICONDATA nib;
char temp[32];
#define WM_NOTIFYICON WM_USER+1
BOOL IsBegin;
BOOL DlgProc (HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
hInst=hInstance;
DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG),0,(DLGPROC)DlgProc,(IDD_DIALOG));
return 0;
}
BOOL DlgProc (HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
int lowID;
int i;
SYSTEMTIME sm;
char tt[50];
switch (uMsg){
case WM_INITDIALOG:
hIcon=LoadIcon( hInst , MAKEINTRESOURCE(IDI_ICON1));//加载图标
SetClassLong(hWnd,GCL_HICON,(long)hIcon);//设置对话框的图标
SetTimer(hWnd,1,100,NULL);
for(i=0;i<24;i++)
{
sprintf(tt,"%02d",i);
SendMessage(GetDlgItem(hWnd,IDC_HOUR),CB_ADDSTRING,0,(LPARAM)tt);
}
for(i=0;i<60;i++)
{
sprintf(tt,"%02d",i);
SendMessage(GetDlgItem(hWnd,IDC_MINUTE),CB_ADDSTRING,0,(LPARAM)tt);
}
break;
case WM_COMMAND:
lowID=LOWORD(wParam);
switch(lowID)
{
case IDC_HOUR:
if(HIWORD(wParam)==LBN_SELCHANGE)
{
hour=SendMessage(GetDlgItem(hWnd,IDC_HOUR),CB_GETCURSEL,0,0);
}
break;
case IDC_MINUTE:
if(HIWORD(wParam)==LBN_SELCHANGE)
{
minute=SendMessage(GetDlgItem(hWnd,IDC_MINUTE),CB_GETCURSEL,0,0);
}
break;
case ID_START:
IsBegin=TRUE;
nib.cbSize=sizeof(NOTIFYICONDATA);
nib.hIcon=hIcon;
nib.hWnd=hWnd;
nib.uCallbackMessage=WM_NOTIFYICON;//自定义消息
nib.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
nib.uID=IDI_ICON1;
sprintf(temp,"关机时间:%02d:%02d",hour,minute);
strcpy(nib.szTip,temp);
Shell_NotifyIcon(NIM_ADD,&nib);//缩小为图标
ShowWindow(hWnd,SW_HIDE);
break;
}
case WM_NOTIFYICON://自定义消息处理
if(wParam==IDI_ICON1)
{
switch(lParam)
{
case WM_LBUTTONDBLCLK://双击可以将窗口还原
Shell_NotifyIcon(NIM_DELETE,&nib);
ShowWindow(hWnd,SW_SHOWNORMAL);
break;
}
}
break;
case WM_TIMER:
GetLocalTime(&sm);
GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,&sm,"hh':'mm':'ss",tt+wsprintf(tt," %d-%02d-%02d ",sm.wYear,sm.wMonth,sm.wDay),50);
SetDlgItemText(hWnd,IDC_CURTIME,tt);
if(IsBegin&&hour==sm.wHour&&minute==sm.wMinute)
{
OSVERSIONINFO osinfo;
osinfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&osinfo);
if(osinfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)//判断是不是Windows系统
{
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
{
MessageBox(NULL,"ExitWindowsEx Error!","Error",MB_OK);
return 0;
}
PostQuitMessage(0);
}
else if(osinfo.dwPlatformId==VER_PLATFORM_WIN32_NT)//判断是不是NT系统,对NT系统需要提升权限
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
MessageBox(NULL,"OpenProcessToken","Error",MB_OK);
return 0;
}
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
{
MessageBox(NULL,"AdjustTokenPrivileges","Error",MB_OK);
return 0;
}
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
{
MessageBox(NULL,"ExitWindowsEx Error!","Error",MB_OK);
return 0;
}
}
}
break;
case WM_CLOSE:
KillTimer(hWnd,1);
EndDialog(hWnd,FALSE);
break;
default:
return FALSE;
}
return TRUE;
}
- Windows API 函数学习(11)---一个关机程序的源代码
- 用Qt编写的windows平台关机程序(附源代码)
- 整理出来的一个windows关机、锁定、重启、注销 API调用
- 整理出来的一个windows关机、锁定、重启、注销 API调用
- 整理出来的一个windows关机、锁定、重启、注销 API调用 .
- 整理出来的一个windows关机、锁定、重启、注销 API调用
- windows关机API
- windows api 关机代码
- API函数ExitWindowsEx关机
- C++远程关机API的学习过程
- 一个 Hook Api 的源代码
- 一个定时关机的小程序
- java 写的一个关机小小程序
- 一个控制电脑关机的有趣程序
- 实现Windows关机程序
- windows关机小程序
- 发布一个Java关机源代码
- 一个java关机程序
- 使用ruby写了一个根据ftp服务器列表自动遍历所有服务器查找对应的东东
- 不要浪费自己。
- NotesScript 进制转换
- 【转】SOA重在解决业务需求而非架构方法
- 本地通信系统的 IP 安全性
- Windows API 函数学习(11)---一个关机程序的源代码
- 与人相处的黄金法则
- struts中国际化,中文转成ascii的命令使用方法
- XSD Restrictions/Facets
- 选购CD-R/RW dvd盘片
- birt 运行时参数,中文说明
- firstChild.nodeValue
- 静态链接库和动态链接库
- 设计模式——创建型模式之 Abstract Factory抽象工厂模式