nimlang实现根据屏幕坐标自动输入内容以实现自动打卡的例子
背景:工作中需要定时向网页输入一些固定不变的内容,常常需要手动切换不同的网页,还要寻找输入框,输入完毕后,点击提交按钮等。有时输入完毕后,直接输入回车键可以直接提交。因此产生了写一个小例子自动实现上述任务。以达到自动打卡的目的,避免因为忙其他事务延缓打卡时间。
前提
- 输入内容固定,而且字数有一定限制,不需要同时输入字符和图片的.
- 图片内容和字符单独提交.
- 本例利用剪贴板,消除了因为中文编码问题而出现乱码的情况.
- 由于网页可以利用组合键进行切换,以避免手动鼠标切换网页.
- 利用计时器,避免设置系统任务.
- 本例实现了控制台程序实现上述任务,避免了复杂的界面情况.
- 剪贴板字符限制,需要寻求更完善的方法,突破输入的字符限制.
- nimlang winim包可以实现win32程序,比自带库函数丰富,实现起来更加舒适,而且编译一次即可.
- 程序总体大小相比pywin32实现同样目的程序小而且更加流畅最简化的只有几K大小.
实现步骤
1.利用浏览器组合键切换到目的页,根据坐标,移动鼠标到输入框,以获取窗口句柄.
2.向剪贴板设置输入的内容,最好是固定的重复内容.
3.鼠标点击输入框,获得输入Focus.
4.粘贴内容至输入框.
5.点击提交按钮或者按下回车键提交输入内容.
之前困扰的几点
- 获取窗口句柄的函数选用的WindowFromPoint()
- SendMessage()不出效果只好选用的Ctrl+V组合键.
- 我选用的是这个GetClipboardData(CF_UNICODETEXT).因为官网提供的CF_TEXT显示乱码.
- 参考的文献baidu和bing上的不多,自已按官网文档写的,win32程序真好用.
- 不能在Linux下使用,但可以用python重写一个在Linux下使用,Linux下浏览器的组合键是Alt+数字.
- emacs比vscode提示详细,全面,建议使用.
- 写成多线程的才能定时切换顺畅,正在尝试不使用多线程.
**这是设置剪贴板的关键部分,终于不是乱码了
proc getContentFromClipboared(hData, phw:HWND) =
#[get content from clipboard]#
OpenClipboard(phw)
EmptyClipboard()
SetClipboardData(CF_UNICODETEXT, hData)
GetClipboardData(CF_UNICODETEXT)
CloseClipboard()
SendMessage(phw, WM_PASTE, 0, 0)
sleep(1000)
# Ctrl+V
keybd_event(0x11, 0,0,0)
keybd_event(0x56, 0,0,0)
keybd_event(0x56, 0, KEYEVENTF_KEYUP,0)
keybd_event(0x11, 0, KEYEVENTF_KEYUP,0)
- 这是运行时的截图,实现两个任务定时切换页面的.