|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hackasn 于 2013-4-22 06:00 编辑
新来啊!!没有那个什么币,希望能帮助我一下````
下面的这个是我前几天学的,能通过,#include <windows.h> //必须的头文件
- LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);//回调函数(过程)原型
- int WINAPI WinMain(
- HINSTANCE hInstance, //实例句柄
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow
- )
- {
- WNDCLASS wndcls; //WNDCLASS结构
- wndcls.style=CS_HREDRAW |CS_VREDRAW;
- wndcls.cbClsExtra=0;
- wndcls.cbWndExtra=0;
- wndcls.lpfnWndProc=WinProc; //回调函数(过程)
- wndcls.lpszClassName="FirstMain"; //窗口类名
- wndcls.lpszMenuName=NULL;
- wndcls.hbrBackground=(HBRUSH) GetStockObject(WHITE_BRUSH);
- wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO);
- wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
- wndcls.hInstance=hInstance; //实例句柄
- RegisterClass(&wndcls); //注册
- HWND hwnd; //创建父窗口句柄
- hwnd=CreateWindowEx(
- 0,"FirstMain","窗口标题",
- WS_TILEDWINDOW, //正常显示状态
- 200,200,300,200,
- NULL,NULL,hInstance,NULL);
- ShowWindow(hwnd,SW_SHOWNORMAL); //句柄,显示状态
- UpdateWindow(hwnd); //句柄
- MSG msg;
- while(GetMessage(&msg,NULL,0,0))
- {
- TranslateMessage(&msg); //键盘消息转换为字符
- DispatchMessage(&msg); //返回msg给回调函数(过程)
- }
- return 0;
- }
- LRESULT CALLBACK WinProc(
- HWND hwnd, // 当前句柄
- UINT msg, // 当前MSG消息
- WPARAM wParam,
- LPARAM lParam
- )
- {
- switch(msg)
- {
- case WM_LBUTTONDOWN:
- MessageBox(hwnd,"mouse clicked","消息框",0);
- HDC hdc;
- hdc=GetDC(hwnd);
- TextOut(hdc,0,0,"鼠标单击",strlen("鼠标单击"));
- ReleaseDC(hwnd,hdc);
- break;
- case WM_CLOSE:
- if(IDYES==MessageBox(hwnd,"是否结束?","message",MB_YESNO))
- {
- DestroyWindow(hwnd);
- }
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hwnd,msg,wParam,lParam); //缺省必须使用
- }
- return 0;
- }
复制代码
今天自己通宵做了另外一个,一个自动关机的MFC程序,但是能编译,不能运行,但是没有窗口显示,在进程中有,不知道怎么回事!!!!!求大神解答!!!!
- #include <windows.h>
- #define IDC_RESET 1000
- #define IDC_SETTIME 1001
- #define IDC_CURRENTTIME 1002
- #define IDC_SHUTDOWNTIME 1013
- #define IDC_HOUR 1014
- #define IDC_MINUTE 1015
- #define IDC_FREE 1016
- #define IDC_CONST 1017
- #define IDC_CONSTTIME 1018
- #ifdef APSTUDIO_INVOKED
- #ifndef APSTUDIO_READONLY_SYMBOLS
- #define _APS_NEXT_RESOURCE_VALUE 101
- #define _APS_NEXT_COMMAND_VALUE 40001
- #define _APS_NEXT_CONTROL_VALUE 1000
- #define _APS_NEXT_SYMED_VALUE 101
- #endif
- #endif
- #define ID_TIMER 1
- //过程函数原型
- LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,PSTR szCmdLine,int iCmdShow)
- {
- //注册类
- static TCHAR szAppName[]=TEXT("Shutdown");
- HWND hwnd;
- MSG msg;
- WNDCLASS wndclass;
- wndclass.style=CS_HREDRAW|CS_VREDRAW;
- wndclass.lpfnWndProc=WndProc;
- wndclass.cbClsExtra=0;
- wndclass.cbWndExtra=DLGWINDOWEXTRA;//note见MSDN的WNDCLASS
- wndclass.hInstance=hInstance;
- wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
- 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,0,NULL);
- SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,0,(LPARAM)TEXT("3"));
- SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,1,(LPARAM)TEXT("15"));
- SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,2,(LPARAM)TEXT("30"));
- SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,3,(LPARAM)TEXT("60"));
- SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,4,(LPARAM)TEXT("120"));
- SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,5,(LPARAM)TEXT("240"));
- SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_SETCURSEL,2,0);
- ShowWindow(hwnd,iCmdShow);
- while(GetMessage(&msg,NULL,0,0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
- void ShowCurrentTime(HWND hwnd,SYSTEMTIME st)
- {
- TCHAR szBuffer[10];
- wsprintf(szBuffer,TEXT("%d:%d:%d"),st.wHour,st.wMinute,st.wSecond);
- SetDlgItemText(hwnd,IDC_CURRENTTIME,szBuffer);
- }
- BOOL IsTimeValid(HWND hwnd,UINT iTime,BOOL bHour)//判定用户输入的时间是否有效
- {
- if(bHour)
- {
- if(iTime>24)
- {
- MessageBox(hwnd,TEXT("一天只有24小时"),TEXT("小提示"),MB_ICONERROR);
- return 0;
- }
- }
- else
- {
- if(iTime>59)
- {
- MessageBox(hwnd,TEXT("一小时只有60分钟"),TEXT("小提示"),MB_ICONERROR);
- return 0;
- }
- }
- return 1;
- }
- VOID CALLBACK ShutDownNow(HWND hwnd)//自动关机
- {
- //获得权限
- if(1)//IDYES==MessageBox(hwnd,TEXT("确定关机吗?请马上保存文件"),TEXT("警告"),MB_YESNO|MB_ICONQUESTION))
- {
- OSVERSIONINFO os;
- os.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);//在调用GetVersionEx函数前必须初始化
- GetVersionEx(&os);//取得系统版本
- if(VER_PLATFORM_WIN32_NT==os.dwPlatformId) //32位操作系统
- {
- HANDLE handle;
- TOKEN_PRIVILEGES tkp;
- OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&handle);//取得当前进程的访问令牌句柄
- LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);//
- tkp.PrivilegeCount =1;//表明tkp数组中只有一个元素
- tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;//需要修改的权限属性
- AdjustTokenPrivileges(handle,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);//修改访问令牌句柄的某些权限
- //确定权限正确
- if(GetLastError()!=ERROR_SUCCESS)
- {
- MessageBox(hwnd,"AdjustTokenPrivileges权限出错","error",MB_OK|MB_ICONERROR);
- return;
- }
- }
- ExitWindowsEx(EWX_SHUTDOWN,0);//开始关机
- }
- }
- LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
- {
- SYSTEMTIME st;
- TCHAR szBuffer[10];
- int iResult;
- static BOOL bValid=0;
- static BOOL bCheck=0;
- static int iHour,iMinute;
- switch(message)
- {
- case WM_CREATE:
- SetTimer(hwnd,ID_TIMER,1000,NULL);
- GetLocalTime(&st);
- ShowCurrentTime(hwnd,st);
- return 0;
- case WM_TIMER:
- GetLocalTime(&st);
- ShowCurrentTime(hwnd,st);
- if(bValid)
- {
- if(st.wHour==iHour&&st.wMinute==iMinute)
- ShutDownNow(hwnd);
- }
- return 0;
- case WM_COMMAND:
- switch(LOWORD(wParam))
- {
- case IDC_FREE:
- CheckRadioButton(hwnd,IDC_FREE,IDC_CONST,IDC_FREE);
- EnableWindow(GetDlgItem(hwnd,IDC_HOUR),1);
- EnableWindow(GetDlgItem(hwnd,IDC_MINUTE),1);
- EnableWindow(GetDlgItem(hwnd,IDC_CONSTTIME),0);
- bCheck=1;
- SetFocus(GetDlgItem(hwnd,IDC_HOUR));
- return 0;
- case IDC_CONST:
- CheckRadioButton(hwnd,IDC_FREE,IDC_CONST,IDC_CONST);
- EnableWindow(GetDlgItem(hwnd,IDC_HOUR),0);
- EnableWindow(GetDlgItem(hwnd,IDC_MINUTE),0);
- EnableWindow(GetDlgItem(hwnd,IDC_CONSTTIME),1);
- bCheck=1;
- return 0;
- case IDOK:
- if(bCheck)//判定是否选择了模式
- {
- if(BST_CHECKED==SendMessage(GetDlgItem(hwnd,IDC_FREE),BM_GETCHECK,0,0))//设定时间模式
- {
- iHour=GetDlgItemInt(hwnd,IDC_HOUR,0,0);
- iMinute=GetDlgItemInt(hwnd,IDC_MINUTE,0,0);
- if(IsTimeValid(hwnd,iHour,1)&&IsTimeValid(hwnd,iMinute,0))
- {
- wsprintf(szBuffer,TEXT("%d:%d:00"),iHour,iMinute);
- SetWindowText(GetDlgItem(hwnd,IDC_SHUTDOWNTIME),szBuffer);
- EnableWindow(GetDlgItem(hwnd,IDOK),0);
- EnableWindow(GetDlgItem(hwnd,IDC_RESET),1);
- EnableWindow(GetDlgItem(hwnd,IDC_HOUR),0);
- EnableWindow(GetDlgItem(hwnd,IDC_MINUTE),0);
- EnableWindow(GetDlgItem(hwnd,IDC_FREE),0);
- EnableWindow(GetDlgItem(hwnd,IDC_CONST),0);
- SendMessage(GetDlgItem(hwnd,IDC_FREE),BM_SETCHECK,BST_UNCHECKED,0);
- bValid=1;
- MessageBox(hwnd,TEXT("设定关机时间成功,请勿关闭该程序"),TEXT("友情提示"),MB_OK|MB_ICONINFORMATION);
- SetFocus(GetDlgItem(hwnd,IDC_RESET));
- }
- }
- else//固定时间模式
- {
- if(CB_ERR==SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_GETCURSEL,0,0))
- MessageBox(hwnd,TEXT("请先选择关机时间"),TEXT("友情提示"),MB_ICONINFORMATION);
- //SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_GETLBTEXT,0,(LPARAM)szBuffer);
- iResult=GetDlgItemInt(hwnd,IDC_CONSTTIME,0,0);
- GetLocalTime(&st);
- iMinute=(st.wMinute+iResult%60)%60;
- iHour=(st.wHour+iResult/60)+((iResult%60+st.wMinute>59)?1:0);
- wsprintf(szBuffer,TEXT("%d:%d:00"),iHour,iMinute);
- SetWindowText(GetDlgItem(hwnd,IDC_SHUTDOWNTIME),szBuffer);
- EnableWindow(GetDlgItem(hwnd,IDOK),0);
- EnableWindow(GetDlgItem(hwnd,IDC_RESET),1);
- EnableWindow(GetDlgItem(hwnd,IDC_HOUR),0);
- EnableWindow(GetDlgItem(hwnd,IDC_MINUTE),0);
- EnableWindow(GetDlgItem(hwnd,IDC_FREE),0);
- EnableWindow(GetDlgItem(hwnd,IDC_CONST),0);
- EnableWindow(GetDlgItem(hwnd,IDC_CONSTTIME),0);
- SendMessage(GetDlgItem(hwnd,IDC_CONST),BM_SETCHECK,BST_UNCHECKED,0);
- bValid=1;
- MessageBox(hwnd,TEXT("设定关机时间成功,请勿关闭该程序"),TEXT("友情提示"),MB_OK|MB_ICONINFORMATION);
- SetFocus(GetDlgItem(hwnd,IDC_RESET));
- }
- }
- else
- MessageBox(hwnd,TEXT("请先设定关机模式"),TEXT("小提示"),MB_ICONINFORMATION);
- return 0;
- case IDC_RESET:
- SetWindowText(GetDlgItem(hwnd,IDC_SHUTDOWNTIME),TEXT("未设定"));
- EnableWindow(GetDlgItem(hwnd,IDOK),1);
- EnableWindow(GetDlgItem(hwnd,IDC_RESET),0);
- EnableWindow(GetDlgItem(hwnd,IDC_FREE),1);
- EnableWindow(GetDlgItem(hwnd,IDC_CONST),1);
- bValid=0;
- bCheck=0;
- MessageBox(hwnd,TEXT("已经取消定时关机"),TEXT("友情提示"),MB_OK|MB_ICONINFORMATION);
- SetFocus(GetDlgItem(hwnd,IDC_SETTIME));
- return 0;
- }
- return 0;
- case WM_DESTROY:
- KillTimer(hwnd,ID_TIMER);
- PostQuitMessage(0);
- return 0;
- }
- return DefWindowProc(hwnd,message,wParam,lParam);
- }
复制代码
|
|