|
分享源码
界面截图: |
|
是否带模块: |
- |
备注说明: |
- |
因为自己写的一个程序需要将自身窗口列表中将文件拖放到外部程序,研究好几天论坛上的拖放方式都不是正规的往外拖放,很遗憾的是自己也没能完美研究出来,不过通过对网上搜到的一些VC源码进行研究,在易语言里实现了模拟往外拖放的消息发送方式,我肯定这是正确的拖放方式。测试已成功。
全API操作,写了个例程保存起来,以备以后完美实现。
例程运行后会自动将运行目录中的txt文本文件加入到超级列表框,并自动运行记事本程序。
将超级列表框中的文本文件名称拖放到记事本窗口中即可打开。就像从资源管理器中将文本文件拖放到记事本程序窗口中是一样的。
==================基本思路======================
1.用 GetWindowThreadProcessId 获取目标窗口进程ID
2.用 OpenProcess 打开进程ID来获取进程的句柄
3.用 VirtualAllocEx 申请进程内存【VirtualAllocEx(OpenProcess返回的句柄, nil, 4096, MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE)】
4.用 WriteProcessMemory 将拖放数据结构和拖放的文件名写入内存
5.用 SendMessage 发送拖拽消息;【SendMessage(AHandle, WM_DROPFILES, Integer(vPointer), 0)】
6.用 VirtualFreeEx 释放内存【VirtualFreeEx(OpenProcess返回的句柄, VirtualAllocEx返回的内存首地址, 0, MEM_RELEASE)】
7.用 CloseHandle 关闭进程的句柄【CloseHandle(OpenProcess返回的句柄)】
================额外思路=========================
感觉在发送消息之前,应该用 OnDropFiles(HDROP hDropInfo)方法告诉Windows开始拖拽了
并且还应该告诉Windows拖拽的文件名,好让目标程序判断是接收还是不接收。
以及告诉Windows是剪切还是拷贝
这些没能研究出来。
希望有大侠可以完善这个拖拽操作,实现真正的向外拖放文件,就像Windows操作系统那样,不知道千千静听的往外拖放歌曲文件是怎么实现的。。
模拟拖拽.rar
(22.5 KB, 下载次数: 196)
|
|