天天看點

用Win32寫的定時關機程式

由于本人記性不太好,晚上經常忘記關電腦,白白浪費了很多的電。在網上也找了一些定時關機的軟體,想到最近自己也在學習VC++,就想自己寫一個定時關機的小程式,正好也可以檢驗自己所學的東西。

程式源碼下載下傳位址:點選下載下傳

先來看看效果圖:

用Win32寫的定時關機程式

寫的比較簡陋,但是隻要能實作功能就好了。

寫Win32應用程式首先要有WinMain函數:

int APIENTRY _tWinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPTSTR    lpCmdLine,

                     int       nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

g_hInstance = hInstance;

DialogBox(hInstance, (LPCTSTR)IDD_MAIN, NULL, DlgProc);

return 0;

}

在WinMain中調用DailogBox()彈出一個對話框,下面就是對消息的處理。

INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

int wmId;

switch(uMsg)

{

case WM_INITDIALOG:

g_hWnd = hWnd;

InitDialog();

break;

case WM_CLOSE:

Shell_NotifyIcon(NIM_DELETE, &g_nidTray);

EndDialog(hWnd, 0);

break;

case WM_TIMER:

ProcessTimer();

break;

case WM_SIZE:

if(wParam == SIZE_MINIMIZED)

{

ShowWindow(g_hWnd, SW_HIDE);

}

break;

case NW_SHELLNOTIFY:

switch(lParam)

{

case WM_LBUTTONDBLCLK:

ShowWindow(g_hWnd, SW_SHOWDEFAULT);

SetForegroundWindow(g_hWnd);

break;

case WM_RBUTTONUP:

{

POINT ptPosition;

GetCursorPos(&ptPosition);

SetForegroundWindow(g_hWnd);

TrackPopupMenu(GetSubMenu(g_hMenu, 0), TPM_LEFTALIGN | TPM_LEFTBUTTON, ptPosition.x, ptPosition.y, 0, g_hWnd, NULL);

}

break;

}

break;

case WM_COMMAND:

wmId = LOWORD(wParam);

switch(wmId)

{

case IDBTN_SHUTDOWN:

DateTime_GetSystemtime(GetDlgItem(g_hWnd, IDDT_TIME), &g_stShutdown);

SetTimer(hWnd, ID_TIMER, 1000, NULL);

ChangeEnable(FALSE);

break;

case IDBTN_CANCEL:

KillTimer(hWnd, ID_TIMER);

UpdateRemainTime(NULL);

ChangeEnable(TRUE);

break;

case IDM_SHOW:

ShowWindow(g_hWnd, SW_SHOWDEFAULT);

SetForegroundWindow(g_hWnd);

break;

case IDM_EXIT:

SendMessage(g_hWnd, WM_CLOSE, 0, 0L);

break;

default:

return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

break;

}

return 0;

}

主體部分就是上面的内容,想要完整的程式源碼可以去下載下傳。

程式源碼下載下傳位址:點選下載下傳