Project1

标题: API:如何向窗口发送拖拽的消息 [打印本页]

作者: zh99998    时间: 2010-7-23 12:42
标题: API:如何向窗口发送拖拽的消息
模拟把 FilePath 那个文件拖到句柄为Hwnd的窗口中

Hwnd = 123456 #窗口句柄
FilePath = "d:\\测试.txt" #文件路径
WM_DROPFILES = 0x0233
SendMessage = Win32API.new("user32","FindWindowW","lll","l")
SendMessage.call(HWnd, WM_DROPFILES, 这里应该填什么)

另外,需要第四个参数吗
作者: zhangbanxian    时间: 2010-7-23 13:03
:funk:不会吧,为什么我记得只要两个...
作者: 猫哥哥    时间: 2010-7-23 13:04
需要窗口样式里有acceptfile属性,才能响应这个消息吧
作者: zh99998    时间: 2010-7-23 17:23
需要窗口样式里有acceptfile属性,才能响应这个消息吧
猫哥哥 发表于 2010-7-23 13:04


目标窗口是BitComet的主程序,不知道有没有这个属性。。。不过确认支持拖放

作者: 神思    时间: 2010-7-23 19:41
{:nm_7:}貌似wParam是个内存地址.
而且这地址用RUBY获取起来蛮麻烦的= =!
作者: 灼眼的夏娜    时间: 2010-7-23 20:11
WM_DROPFILES
第三个参数是HDROP
第四个参数0

不过问题很多><
HDROP是系统内部生成的一个句柄 其实应用程序没有接口生成HDROP。~

不过可以参考:
那么CF_HDROP具体是什么呢?它是一个DROPFILES结构体。另外有一个HDROP类型,它是一个DROPFILES结构体的指针。

DROPFILES并不复杂。它的定义如下:

struct DROPFILES
{
    DWORD pFiles;    // offset of file list
    POINT pt;        // drop point (client coords)
    BOOL fNC;        // is it on NonClient area and pt is in screen coords
    BOOL fWide;      // wide character flag
};

其中文件名列表不在结构体的定义中。它是以双null结尾的字符串列表。可是它存放在哪里呢?它紧接着fWide字段存放,pFiles保存它在内存中的位移量(相对于结构体的起始位置)。另外只有fWide在拖拽中使用,它表示文件名是ANSI还是Unicode字符。


~~

另外SendMessage的HDROP这个地址是你进程中的~~ 要写到目标进程><
作者: 紫苏    时间: 2010-7-23 20:21
本帖最后由 紫苏 于 2010-7-23 20:28 编辑

SendMessage 是四个参数,2  楼说的两个参数可能是指 MFC 封装后的成员函数吧……

夏娜大人……|||
作者: 神思    时间: 2010-7-23 21:48
{:nm_7:}不知道为什么..消息是发出去了..
{:nm_7:}找了个文本文件试了一下,可是她没反应..
作者: 神思    时间: 2010-7-23 22:02
本帖最后由 神思 于 2010-7-24 06:51 编辑

{:nm_7:}其实是OK的了``发现我搞错一样东西ORZ......
因为我试过给RM的窗口发,结果是收的到的..
只是在给另一个窗口发的时候出现一点问题..{:nm_7:} 死纠结ORZ


Project17.rar (189.87 KB, 下载次数: 83)


{:nm_6:} 测试OK.

-v-具体看范例..
先打开test.txt然后运行RM.就会发现test.txt变成Game.ini的了

一不小心连贴了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1