|
荣誉会员
  
- 帖子
- 6
- 精华
- 0
- 积分
- 61
- 阅读权限
- 100
- 在线时间
- 74 小时
- 注册时间
- 2004-11-12
- 最后登录
- 2008-12-31
|
26楼
大 中
小 发表于 2006-4-12 08:15 只看该作者
谢谢sunwear、代码罐头,现在可以把程序传上来了
只是简单修改了几个地方,比如将strcat改成lstrcat、将楼主原来的atoi(GetWindowText)改成了GetDlgItemInt,BUT,效果显著……
哪位DX有时间接着改吧…… 引用:/*----------------------------------------------------------------
* File : shutdown.cpp
* Author : HuaiHuai http://hhuai.cn
* Vesion : V 0.1
* Date : 2006.04.03
* Comment : 一个定时关机小程序
*---------------------------------------------------------------*/
#include <windows.h>
#include "resource.h"
#include "shutdown.h"
void main() //反正楼主原来的参数也没有用,干脆去掉了,直接将程序入口定义到这里
{
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&osv);
if (osv.dwPlatformId==VER_PLATFORM_WIN32_NT)
{
if(!TiQuan())
{
MessageBox(0,"提取关机权限不成功!","程序退出",MB_OK);
return; // 将原来的exit去掉,目的是不使用C库
}
}
DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG1),0,DialogProc);
return;
}
int i=1;
BOOL CALLBACK DialogProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
DlgHandle=hwndDlg;
switch(uMsg) {
case WM_INITDIALOG:
SetTimer(hwndDlg,1,1000,NULL);
break;
case WM_COMMAND:
if (LOWORD(wParam)==IDCANCEL)
EndDialog(hwndDlg,0);
if (LOWORD(wParam)==IDOK)
IDOK_Proc();
break;
case WM_TIMER:
time=time-1;
InvalidateRect(hwndDlg,NULL,FALSE);
break;
case WM_PAINT:
Show_Time();
break;
}
return FALSE;
}
BOOL TiQuan()
{
HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges;
LUID luid;
hProcess=GetCurrentProcess();
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL)) {
return 0;
}
else
return 1;
}
VOID CALLBACK TimerProc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
)
{
ExitWindowsEx(EWX_POWEROFF || EWX_FORCE,0);
}
void IDOK_Proc()
{
if(!IsShutDown)
{
time=GetDlgItemInt(DlgHandle, IDC_EDIT1, NULL, FALSE)*60; //嘿嘿,其实主要改动的就是这一个地方,很有效啊~
TimeId=SetTimer(DlgHandle,0,time*1000,TimerProc);
SetWindowText(GetDlgItem(DlgHandle,IDOK),"Stop");
SetWindowText(GetDlgItem(DlgHandle,IDC_Time),"OverTime:");
IsShutDown=TRUE;
ShowWindow(GetDlgItem(DlgHandle,IDC_EDIT1),SW_HIDE);
}
else
{
KillTimer((HWND)TimeId,0);
SetWindowText(GetDlgItem(DlgHandle,IDOK),"Start");
SetWindowText(GetDlgItem(DlgHandle,IDC_Time),"Timer:");
IsShutDown=FALSE;
ShowWindow(GetDlgItem(DlgHandle,IDC_EDIT1),SW_SHOW);
}
}
VOID Show_Time()
{
if(!IsShutDown)
{
ShowWindow(GetDlgItem(DlgHandle,IDC_M1),SW_SHOW);
ShowWindow(GetDlgItem(DlgHandle,IDC_EDIT1),SW_SHOW);
ShowWindow(GetDlgItem(DlgHandle,IDC_H),SW_HIDE);
ShowWindow(GetDlgItem(DlgHandle,IDC_M),SW_HIDE);
ShowWindow(GetDlgItem(DlgHandle,IDC_S),SW_HIDE);
}
else
{
ShowWindow(GetDlgItem(DlgHandle,IDC_M1),SW_HIDE);
ShowWindow(GetDlgItem(DlgHandle,IDC_EDIT1),SW_HIDE);
ShowWindow(GetDlgItem(DlgHandle,IDC_H),SW_SHOW);
ShowWindow(GetDlgItem(DlgHandle,IDC_M),SW_SHOW);
ShowWindow(GetDlgItem(DlgHandle,IDC_S),SW_SHOW);
int h=0,m=0,s=0;
char pTime_M[10]={'\0'};
char pTime_H[10]={'\0'};
char pTime_S[10]={'\0'};
if(time>3600)
{
h=time/3600;
wsprintf(pTime_H,"%d",h); //改成调用API实现
}
if ((time-(h*3600))>60)
{
m=(time-(h*3600)) /60;
wsprintf(pTime_M,"%d",m); //改成调用API实现
}
if ((time - (h*3600) - (m*60))>0)
{
s=time - (h*3600) - (m*60);
wsprintf(pTime_S,"%d",s); //改成调用API实现
}
SetWindowText(GetDlgItem(DlgHandle,IDC_H),lstrcat(pTime_H," H")); // strcat改成调用API lstrcat
SetWindowText(GetDlgItem(DlgHandle,IDC_M),lstrcat(pTime_M," M")); // strcat改成调用API lstrcat
SetWindowText(GetDlgItem(DlgHandle,IDC_S),lstrcat(pTime_S," S")); // strcat改成调用API lstrcat
}
}
附件
-
shutdown.exe.rar
(2 KB)
-
2006-4-12 08:15, 下载次数: 47
编译后的程序
|