SetTimer函数的使用方法和相应的台本案例
时间: 2023-07-05 12:13:41 浏览: 158
这里提供一个使用 SetTimer 函数的简单台本案例:
```
[1] 用户:打开记事本
[2] AI:好的,请稍等。
[3] AI:使用 ShellExecute 函数打开记事本。
[4] AI:等待 3 秒钟。
[5] AI:创建一个定时器,时间间隔为 1 秒钟。
[6] AI:等待定时器消息。
[7] 用户:关闭记事本。
[8] AI:好的,请稍等。
[9] AI:使用 FindWindow 函数查找记事本窗口的句柄。
[10] AI:使用 PostMessage 函数向记事本窗口发送 WM_CLOSE 消息。
[11] AI:等待 1 秒钟。
[12] AI:销毁定时器。
[13] AI:退出程序。
```
这个案例演示了如何使用 SetTimer 函数创建一个定时器,并在定时器消息到达时执行相应的操作。在这个案例中,我们打开记事本,创建一个名为 "Close Notepad" 的按钮,当用户点击该按钮时,程序会自动关闭记事本。具体实现代码如下:
```c++
#include <windows.h>
#include <tchar.h>
#define TIMER_ID 1
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hNotepad = NULL;
switch (message)
{
case WM_CREATE:
// 使用 ShellExecute 函数打开记事本
ShellExecute(NULL, _T("open"), _T("notepad.exe"), NULL, NULL, SW_SHOWNORMAL);
// 等待 3 秒钟
Sleep(3000);
// 创建定时器,时间间隔为 1 秒钟
SetTimer(hWnd, TIMER_ID, 1000, NULL);
break;
case WM_TIMER:
if (wParam == TIMER_ID)
{
// 使用 FindWindow 函数查找记事本窗口的句柄
hNotepad = FindWindow(_T("Notepad"), NULL);
if (hNotepad != NULL)
{
// 使用 PostMessage 函数向记事本窗口发送 WM_CLOSE 消息
PostMessage(hNotepad, WM_CLOSE, 0, 0);
// 等待 1 秒钟
Sleep(1000);
// 销毁定时器
KillTimer(hWnd, TIMER_ID);
// 退出程序
PostQuitMessage(0);
}
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wcex;
HWND hWnd;
MSG msg;
ZeroMemory(&wcex, sizeof(wcex));
wcex.cbSize = sizeof(wcex);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.hInstance = hInstance;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.lpszClassName = _T("NotepadSample");
RegisterClassEx(&wcex);
hWnd = CreateWindow(_T("NotepadSample"), _T("Notepad Sample"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
```
在这个示例中,我们创建一个定时器,每隔 1 秒钟就检查记事本窗口是否存在,如果存在则发送 WM_CLOSE 消息关闭记事本,并在 1 秒钟后销毁定时器并退出程序。
阅读全文