运用 win32 多线程信号量以实现根据屏幕坐标自动输入内容以实现自动打卡的例子 ##介绍##
目的:熟悉 win32 多线程信号量的知识,掌握 win32 多线程中如何传递多个参数,以及如何分配内存和释放内存。
- 本例采用了 window 控制台程序,引入 Window.h 头文件, 不需要单独引入其他关于线程的头文件.
关于多线程的传递参数
-
将需要传递的参数的字段,定义成一个结构体.
-
向该结构体赋值,并将该设定值后的结构体指针通过 CreateThread()函数传递给线程处理函数.例如:
typedef struct A_s
{
int argA;
int argB;
} A,*pA;
A *pa;
pa->argA = ...;
pa->argB = ...;
CreateThread(pa,...);
线程处理函数部分
- 线程处理函数的定义
DWORD WINAPI procfun(LPVOID lpParam)
- 若要取出传递的参数,需要将 lpParam cast 成参数结构体指针类型.
A_s *pa;
pa = (A_s*)lpParam;
-
这样就可以在处理线程处理函数内部,获得传递进来的 argA, argB(pa->A,pa->B).
-
官网文档中通过,HeapAlloc()和 HeapFree()对参数结构体分配和释放内存.
实现步骤
- 利用浏览器组合键切换到目的页,根据坐标,移动鼠标到输入框,以获取窗口句柄.
- 向剪贴板设置输入的内容,即重复的内容.
- 鼠标点击输入框,获得输入 Focus.
- 粘贴内容至输入框.
- 点击提交按钮或者按下回车键提交输入内容.
提示
- 获取窗口句柄的函数选用的 WindowFromPoint().
- 采用 SendMessage()或者 Ctrl+V 组合键进行粘贴操作.
- GetClipboardData(CF_UNICODETEXT).因为官网提供的 CF_TEXT 显示乱码.
- 本例采用默认的 UNICODE 编码,由于设定属性为多字节的方式会出现乱码.
- 以实现根据屏幕坐标自动输入内容以实现自动打卡的例子。