c++ 发送消息,模拟拖拽文件

 1 #include <ShlObj.h>
 2 BOOL SimulateDropFile(CString strFilePath)
 3 {
 4     char szFile[MAX_PATH] = {0};
 5     wcstombs(szFile, strFilePath.GetBuffer(0), _MAX_PATH);
 6     DWORD dwBufSize = sizeof(DROPFILES) + strlen(szFile) + 1;
 7
 8     //通过类名或窗口标题 找到接受拖拽的窗口
 9     HWND hMain = ::FindWindow(NULL, _T("XX播放器"));
10     if (hMain == NULL)
11         return FALSE;
12     BYTE* pBuf = new BYTE[dwBufSize];
13     if (pBuf == NULL)
14         return FALSE;
15
16     BOOL bResult = FALSE;
17     memset(pBuf, 0, dwBufSize);
18     DROPFILES* pDrop = (DROPFILES*)pBuf;
19     pDrop->pFiles = sizeof(DROPFILES);
20     strcpy((char*)(pBuf + sizeof(DROPFILES)), szFile);
21
22     DWORD dwProcessId = 0;
23     GetWindowThreadProcessId(hMain, &dwProcessId);
24     if (dwProcessId != NULL)
25     {
26         HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwProcessId);
27         if (hProcess != NULL)
28         {
29             LPSTR pszRemote = (LPSTR)VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE);
30             if (pszRemote && WriteProcessMemory(hProcess, pszRemote, pBuf, dwBufSize, 0))
31             {
32                 ::SendMessage(hMain, WM_DROPFILES, (WPARAM)pszRemote, NULL);
33                 bResult = TRUE;
34             }
35         }
36     }
37
38     if (pBuf)
39     {
40         delete[] pBuf;
41         pBuf = NULL;
42     }
43     return bResult;
44 }

在调用该函数之前,先打开接受拖拽的进程ShellExecute(NULL, L"open", exe完整路径, NULL, NULL, SW_SHOWNORMAL);
时间: 2024-11-05 22:48:37

c++ 发送消息,模拟拖拽文件的相关文章

HTML5开发 拖拽文件上传

Drag&Drop 拖拽功能的处理 关于HTML5拖拽文件上传,其实国外已经有很多网站有这样的应用,最早推出拖拽上传应用的是 Gmail,它支持标准浏览器下拖拽本地文件到浏览器中作为邮件的附件发送,但其实现在利用HTML5的功能实现,主要借助于新版支持的浏览器来实现,IE还是弱很多. 拖拽上传应用主要使用了以下 HTML5技术: Drag&Drop : HTML5基于拖拽的事件机制.File API : 可以很方便的让 Web 应用访问文件对象,File API 包括FileList.Bl

UAC相关问题分析--使用管理员权限打开VisualStudio,无法访问网络磁盘,无法拖拽文件

搬运自http://wurang.me/2014/06/17/uac-problems.html [问题产生] 问题最初是在administrator权限下,visual studio 打开网络磁盘下的文件报错.经过几次调试,最终发现是问题是在管理员权限下,vs无法访问网络磁盘. Console.Write( System.IO.File.Exists(path)); 该结果返回False.为了确认是由于权限问题引起,使用非管理员权限打开vs,运行上面的程序,结果返回True. 至此问题确立:w

javascript动画系列第一篇——模拟拖拽

× 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容性问题,以及功能实现的方式,用的不是很广泛.javascript动画广泛使用的还是模拟拖拽.本文将详细介绍该内容 原理介绍 模拟拖拽最终效果和在桌面上移动文件夹的效果类似 鼠标按下时,拖拽开始.鼠标移动时,被拖拽元素跟着鼠标一起移动.鼠标抬起时,拖拽结束 所以,拖拽的重点是确定被拖拽元素是如何移动的

[Java]接受拖拽文件的窗口

至于这个问题,Java的awt.dnd包下提供了许多完成这一功能的类 例如DropTarget.DropTargetListener等 先来讲一下DropTarget类,这个类完成和拖拽.复制文件等操作和Component的关联 常用的构造方法有这些: DropTarget(Component c, DropTargetListener dtl) c:要与它关联的组件 dtl:执行事件处理的DropTargetListener DropTarget(Component c, int ops, D

A1.xcode三种拖拽文件夹的方式

1.copy,是指文件不在项目的目录下面,例如项目在桌面上,文件在 Download 下,你 copy 就会被复制到项目里面.如果文件原本就在项目里面,则不执行任何操作.这里不管它,重点是 下面的单选框. 2.create  groups for any added folders 添加文件 将所有文件放在添加的目录下,实际文件目录结构忽略 访问时 直接文件名即可 黄色文件夹:编译后,资源文件在 mainBundle 中,源代码程序需要通过这种方式拖拽添加 需要注意不能出现重名的文件 效率高 拖

H5中的拖拽文件上传

一:介绍 1.内容摘要 2.主要设计的技术 3.drag与drop事件 4.drag与drop的部分重要代码 5.File Api 6.formData 二:程序演示 1. 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>无标题文档</title> 6 <script src="D:\jquery\jquer

atitit.D&amp;D drag&amp;drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结

atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注解事件 document.dragover >>preventDefault 1 3. 代码(js) 1 4. C++ 实现拖曳 2 5. QT拖拽功能简介 - pcsuite的专栏 - 博客频道 - CSDN.NET.htm 2 1. DND的操作流程 Dragenter 事件::更改提示的颜色

解决往监控目录拖拽文件夹无法监控到的问题

在项目中一个应用场景是监控一个目录变化,但从监控目录外部拖拽一个文件夹进来,拖拽进来的文件夹里的文件无法监控到,通过查看资料,发现是一个参数的设置 #include <iostream> #include "DirectoryChanges.h" #include "MyDirectoryChangeHandler.h" int main() { wcout.imbue(locale("CHS")); CDirectoryChange

JavaScript动画-模拟拖拽

模拟拖拽的原理: x1等于div.offsetLeft y1等于div.offsetTop x2等于ev.clientX(ev表示event事件) y2等于ev.clientY 当我们在方块上按下鼠标的时候,x2-x1即可确定.移动鼠标之后,我们用鼠标当前的位置即x4.y4减去x2-x1.y2-y1就可以得到方块现在的位置. 效果图:点击查看 代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 &l