如何用C或者C++编写一个电脑强制关机程序

RT,让别人回答一些问题、比如“我是猪”之类的、然后就强关... RT,让别人回答一些问题、比如“我是猪”之类的、然后就强关 展开
 我来答
匿名用户
2013-04-15
展开全部
#include <Windows.h>
#include <tchar.h>
#include <assert.h>TCHAR* szQuestion=TEXT("1000*10等于多少?");
TCHAR* szAnswer=TEXT("10000");
WNDPROC oldEditProc=NULL;
WNDPROC oldButtonProc=NULL;
HFONT hFont=NULL;
HWND hTestDlgWnd=NULL,hEditWnd=NULL,hButtonWnd=NULL;
LRESULT CALLBACK TestDlgProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK MyEditProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK MyButtonProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
BOOL SystemReboot();int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
WNDCLASS wndclass={0};
TCHAR* szClassName=TEXT("TestDlg");
MSG msg={0}; COLORREF color=GetSysColor(COLOR_ACTIVEBORDER);
HBRUSH hBrush=CreateSolidBrush(color);
assert(hBrush); hFont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
LOGFONT logfont={0};
GetObject(hFont,sizeof(LOGFONT),&logfont);
DeleteObject(hFont);
hFont=NULL;
logfont.lfHeight=12;
_tcscpy(logfont.lfFaceName,TEXT("宋体"));
hFont=CreateFontIndirect(&logfont);
assert(hFont); wndclass.style=CS_NOCLOSE;
wndclass.hInstance=hInstance;
wndclass.hbrBackground=hBrush;
wndclass.hCursor=LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW));
wndclass.hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION));
wndclass.cbWndExtra=0;
wndclass.cbClsExtra=0;
wndclass.lpfnWndProc=TestDlgProc;
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szClassName;

if (!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("窗口注册失败!"),TEXT("警告"),MB_OK);
return S_FALSE;
} DWORD style=WS_OVERLAPPEDWINDOW &~ (WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_THICKFRAME);
int cx=GetSystemMetrics(SM_CXFULLSCREEN);
int cy=GetSystemMetrics(SM_CYFULLSCREEN);
int iTestDlgWidth=500;
int iTestDlgHeight=230;
hTestDlgWnd=CreateWindowEx(WS_EX_TOOLWINDOW,
szClassName,
TEXT("请回答题目:"),
style,
cx/2-iTestDlgWidth/2,
cy/2-iTestDlgHeight/2,
iTestDlgWidth,
iTestDlgHeight,
NULL,
NULL,
hInstance,
NULL);
assert(hTestDlgWnd);
::SendMessage(hTestDlgWnd,WM_SETFONT,(WPARAM)hFont,1); style=WS_CHILD | ES_MULTILINE | ES_LEFT | ES_AUTOHSCROLL | ES_AUTOVSCROLL;
hEditWnd=CreateWindow(
TEXT("Edit"),
TEXT(""),
style,
10,
40,
iTestDlgWidth-20,
100,
hTestDlgWnd,
NULL,
hInstance,
0
);
assert(hEditWnd);
oldEditProc=(WNDPROC)SetWindowLong(hEditWnd,GWL_WNDPROC,(LONG)MyEditProc);
assert(oldEditProc);
::SendMessage(hEditWnd,WM_SETFONT,(WPARAM)hFont,1); style=WS_CHILD;
hButtonWnd=CreateWindow(TEXT("Button"),
TEXT("确定"),
style,
10,
150,
60,
20,
hTestDlgWnd,
NULL,
hInstance,
0
);
assert(hButtonWnd);
oldButtonProc=(WNDPROC)SetWindowLong(hButtonWnd,GWL_WNDPROC,(LONG)MyButtonProc);
assert(oldButtonProc);
::SendMessage(hButtonWnd,WM_SETFONT,(WPARAM)hFont,1); ShowWindow(hTestDlgWnd,SW_SHOW);
ShowWindow(hEditWnd,SW_SHOW);
ShowWindow(hButtonWnd,SW_SHOW);
UpdateWindow(hTestDlgWnd); ::SetFocus(hEditWnd);
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if(hBrush)
DeleteObject(hBrush);
if(hFont)
DeleteObject(hFont);
return msg.wParam;
}LRESULT CALLBACK TestDlgProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
{
DestroyWindow(hWnd);
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps={0};
HDC hDC=NULL;
hDC=BeginPaint(hWnd,&ps);
HFONT hOldFont=(HFONT)SelectObject(hDC,hFont);
int oldMode=SetBkMode(hDC,TRANSPARENT);
TextOut(hDC,10,5,szQuestion,_tcslen(szQuestion));
SelectObject(hDC,hOldFont);
SetBkMode(hDC,oldMode);
EndPaint(hWnd,&ps);
}
break;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}LRESULT CALLBACK MyEditProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
return (*oldEditProc)(hWnd,message,wParam,lParam);
}LRESULT CALLBACK MyButtonProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_LBUTTONDOWN:
{
TCHAR buf[512]={0};
GetWindowText(hEditWnd,buf,512); if (!_tcscmp(buf,szAnswer))
{
MessageBox(hWnd,TEXT("你回答正确了!"),TEXT("提示"),MB_OK);
::SendMessage(hTestDlgWnd,WM_CLOSE,0,0);
}
else
{
MessageBox(hWnd,TEXT("你回答错误!请做好接受惩罚准备!!"),TEXT("提示"),MB_OK);
SystemReboot();
}
}
break;
}
return (*oldButtonProc)(hWnd,message,wParam,lParam);
}BOOL SystemReboot()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
return(FALSE);
}
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)
{
return FALSE;
} if (!ExitWindowsEx(EWX_REBOOT, 0))
{
return FALSE;
}
return TRUE;
} 修改问题和答案在TCHAR* szQuestion=TEXT("1000*10等于多少?");
TCHAR* szAnswer=TEXT("10000");
设置即可。这个问题我回答3次了 。。。
匿名用户
2013-04-15
展开全部
可以使用windows.h下的
system(“shutdown -s -f")
可以实现关机
请采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tony罗腾
2016-01-06 · 知道合伙人软件行家
tony罗腾
知道合伙人软件行家
采纳数:1381 获赞数:293886
本一类院校毕业,之前参与过百度专家的活动,有网络在线答题的经验,相信我,没错的!

向TA提问 私信TA
展开全部
源代码:

#include <cstdlib>
#include <iostream>
#include <Conio.h>
using namespace std;
int main(int argc, char *argv[])
{ system("sc config Schedule start= auto");//将所需服务设为自动启动
system("sc start Schedule");//启动Scheduler服务,要实现定时关机需开启此服务
system("cls"); //清屏
string shutdown_time;//定义存储时间的变量
cout<<"请输入自动关机的时间:(格式:HH:MM,例如想在23点15分关机则输入 23:15"<<endl;
cin>>shutdown_time;//输入关机时间
string cmd="at ";
cmd+=shutdown_time;
cmd+=" shoutdown -s";//获得完整的关机命令字符串
system(cmd.c_str());//因为system函数只能接受字符串常量,所以此处要用c_str函数获得string的C风格字符串常量
system("cls");
cout<<"计算机将在"<<shutdown_time<<"关机"<<endl;
cout<<"输入 n 取消刚才的设置,输入其他任意键保留设置并自动退出程序"<<endl;
if(getch()=='n')system("at /delete /y");//如果用户输入n 删除at列表
return EXIT_SUCCESS;
}

复制以上代码,打开任意编译工具(IDE)
新建工程,粘贴源代码,编译,在你保存工程的目录里就有exe执行文件了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式