本当にくだらくて申し訳ないが、実行するとランダムで30秒以内に「わ!」と大きなウインドウが出現して驚かすプログラムを作った。
ダウンロード
プログラムはC言語でWindows APIを使っている。
SetTimerとKillTimerを使えば一発タイマー処理が実現できる。
ただ、わたしはこれを改良して起動してから2時間後に「外で遊べ 父ちゃんより」というメッセージに変えて子どもが使うユーザアカウントに登録しておいた。

一応こちら(注:2時間後にしか確認できません!)
スタートメニューのスタートアップにこのプログラムをそっとしのばせておけばきっと驚くに違いない。外で遊ぶかは別として。
発展型として、次は2時間後にパソコンが強制終了してしまうようにしてみようと思う。
ソースコード(Borland C++ Compiler 5.5で確認)
7 | #define TIMER_MAX 30 // タイマーの秒数(1~30秒) |
8 | #define MESSAGE "わ!" // 表示する文字 |
10 | LRESULT CALLBACK WndProc( HWND , UINT , WPARAM , LPARAM ); |
12 | int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) |
14 | static TCHAR appName[] = TEXT( "Wa!" ); |
19 | wndclass.style = CS_HREDRAW | CS_VREDRAW; |
20 | wndclass.lpfnWndProc = WndProc; |
21 | wndclass.cbClsExtra = 0; |
22 | wndclass.cbWndExtra = 0; |
23 | wndclass.hInstance = hInstance; |
24 | wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); |
25 | wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); |
26 | wndclass.hbrBackground = ( HBRUSH ) COLOR_BACKGROUND + 1; |
27 | wndclass.lpszMenuName = NULL; |
28 | wndclass.lpszClassName = appName; |
30 | if (!RegisterClass(&wndclass)){ |
31 | MessageBox(NULL, TEXT( "ウインドウクラスの作成に失敗しました" ), |
36 | hWnd = CreateWindow(appName, TEXT( "Wa!" ), |
37 | WS_OVERLAPPEDWINDOW | WS_VISIBLE, |
38 | CW_USEDEFAULT, CW_USEDEFAULT, |
39 | CW_USEDEFAULT, CW_USEDEFAULT, |
40 | NULL, NULL, hInstance, NULL); |
42 | MessageBox(NULL, TEXT( "ウインドウの作成に失敗しました" ), NULL, MB_OK); |
49 | while (GetMessage(&msg, NULL, 0, 0)>0){ |
50 | TranslateMessage(&msg); |
51 | DispatchMessage(&msg); |
56 | LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) |
58 | static BOOL fFlipFlop = FALSE; |
66 | srand ((unsigned) time (NULL)); |
67 | timer = ( rand () % TIMER_MAX) + 1; |
71 | SetTimer(hwnd, ID_TIMER, timer * 1000, NULL); |
75 | KillTimer(hwnd, ID_TIMER); |
76 | InvalidateRect(hwnd, NULL, FALSE); |
80 | hdc = BeginPaint(hwnd, &ps); |
81 | GetClientRect(hwnd, &rc); |
84 | 768 , 0 , 0 , 0 , FW_BOLD , FALSE , FALSE , FALSE , |
85 | SHIFTJIS_CHARSET , OUT_DEFAULT_PRECIS , |
86 | CLIP_DEFAULT_PRECIS , DEFAULT_QUALITY , |
87 | VARIABLE_PITCH | FF_ROMAN , NULL |
89 | SelectObject(hdc , hFont); |
91 | hBrush = CreateSolidBrush(RGB(255, 255, 255)); |
92 | FillRect(hdc, &rc, hBrush); |
94 | DrawText(hdc, TEXT(MESSAGE), -1, &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER); |
98 | KillTimer(hwnd, ID_TIMER); |
102 | return DefWindowProc(hwnd, message, wParam, lParam); |
コメント