概述
最近要用python模拟人的操作给窗口发送拖拽文件的消息,网上搜了一大圈也没搜到现成可用的代码。幸好以前做过vc开发,熟悉点win32编程,于是装上vs和msdn,从消息WM_DROPFILES查起,慢慢得实现了这个功能。
WM_DROPFILES是向win32窗口拖拽一个文件松开鼠标左键后会触发发送给窗口的消息,前提是目标窗口是支持拖拽消息的响应,在win32中是通过窗口样式:WS_EX_ACCEPTFILES或者调用API:DragAcceptFiles(HWND hWnd,BOOL fAccept)设置过的窗口才会正常响应拖拽消息。
官方定义发送消息WM_DROPFILES方式如下:
PostMessage(
(HWND) hWndControl, // 这里是目标窗口的句柄,可以通过FindWindowEX或者FindWindow函数获取
(UINT) WM_DROPFILES, // 这里是消息ID,实际就是个数值0x0233
(WPARAM) wParam, // 重要的是这个参数,是指定消息中的一些必要信息和被拖拽文件路径的结构体
(LPARAM) lParam // 这里设置为0
);
//虽然官方是用PostMessage,但是我实际测试使用SendMessage也是可以的。
根据文档确定wParam是一个指针,指向DROPFILES结构体紧跟上文件路径列表的一段数据,其中文路径列表以‘ ’间隔,列表最终以'