[模拟拖拽] 模拟将一个文件拖拽到一个软件窗口上,实现拖拽操作(微信语音播放器)...
“金蛇语音播放器” 是我随便写的一个假名。要实现的功能是:
我在网上下载了一个播放器,在自己公司的软件中使用,用来播放微信的语音。
因为版权问题,我不想让别人知道我用的是金蛇播放器,于是就将其窗口隐藏;
为了安全起见,再将其窗口标题名称改为“语音播放”。
关联不起作用:将语音文件格式与此播放器关联,然后双击语音文件,不能播放。
但支持拖拽操作:可以将一个语音文件拖拽到此软件的窗口中,然后就开始播放。
于是可以模拟拖拽文件到此软件,实现播放功能,代码如下:
BOOL SimulateDropFile(LPCTSTR lpszPath) {HWND hMain = ::FindWindow(NULL, _T("语音播放"));if (hMain == NULL) //第一次打开此播放器 {//打开语音播放器CString appPath = Utils::GetAppPath();appPath += L"Data\\amrplayer.exe";ShellExecute(NULL, L"open", appPath, NULL, NULL, SW_MINIMIZE);//SW_HIDE 没效果int count = 0;while (1){//找到语音播放器的窗口句柄,hMain = ::FindWindow(NULL, _T("金蛇语音播放器"));if (hMain != NULL)break;Sleep(200);count++;if (count > 50)break;}if (hMain == NULL){LOG_ERROR(L"未找到语音播放器");return FALSE;}//改变窗口播放器窗口的标题文本SetWindowText(hMain, L"语音播放");::ShowWindow(hMain, SW_HIDE); //隐藏窗口 }CString strFilePath = lpszPath;if (!::PathFileExists(strFilePath))return FALSE;//模拟拖拽操作char szFile[MAX_PATH] = { 0 };wcstombs(szFile, strFilePath.GetBuffer(0), _MAX_PATH);DWORD dwBufSize = sizeof(DROPFILES) + strlen(szFile) + 1;BYTE* pBuf = new BYTE[dwBufSize];if (pBuf == NULL)return FALSE;BOOL bResult = FALSE;memset(pBuf, 0, dwBufSize);DROPFILES* pDrop = (DROPFILES*)pBuf;pDrop->pFiles = sizeof(DROPFILES);strcpy((char*)(pBuf + sizeof(DROPFILES)), szFile);DWORD dwProcessId = 0;GetWindowThreadProcessId(hMain, &dwProcessId); //播发器的进程IDif (dwProcessId != NULL){HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwProcessId);if (hProcess != NULL){LPSTR pszRemote = (LPSTR)VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE);if (pszRemote && WriteProcessMemory(hProcess, pszRemote, pBuf, dwBufSize, 0)){::SendMessage(hMain, WM_DROPFILES, (WPARAM)pszRemote, NULL); //发送拖拽消息bResult = TRUE;}}}if (pBuf){delete[] pBuf;pBuf = NULL;}return bResult; }
转载于:https://www.cnblogs.com/pjl1119/p/8628788.html
[模拟拖拽] 模拟将一个文件拖拽到一个软件窗口上,实现拖拽操作(微信语音播放器)...相关推荐
- linux把文件移到当前目录下,松勤软件测试-如何用Linux将一个文件移动到另一个目录下...
原标题:松勤软件测试-如何用Linux将一个文件移动到另一个目录下 用mv命令进行操作 1.作用 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中.该命令等同于DOS系统下的ren和mov ...
- linux怎么将一个文件移动到另一个目录下
用mv命令 1.作用 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中.该命令等同于DOS系统下的ren和move命令的组合.它的使用权限是所有用户. 2.格式 mv [options] ...
- java 文件指定位置插入_java 中利用io流将一个文件插入到另一个文件中的指定位置,指定位置...
展开全部 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.F ...
- 将一个文件复制到另外一个文件中
#include<stdio.h> #include<stdlib.H> int main() { FILE *in,*out; ...
- linux初探——linux怎么将一个文件移动到另一个目录下
目录处理在日常工作中是比较常见的,今天就向大家介绍几个常用的跟目录处理有关的命令. 一.创建目录:mkdir mkdir 是 make directories 的缩写,该命令最简单的用法就是,直接在 ...
- Android音乐播放器开发(5)—播放界面(播放、暂停、上一首、下一首,顺序播放、随机播放、拖拽进度条…)
1. 说明 源码已同步到Gitee仓库,Github仓库,觉得还不错的话帮忙点个"star"吧,非常感谢. Android播放器专栏其它文章: 服务端:Android音乐播放器开发 ...
- vue+element制作音乐播放器播放进度条bug(鼠标拖拽slider滑块滑动到指定位置无效)
最开始bug还没解决时的效果图 bug解决后的效果图 项目场景: 想自己做一个基于vue仿网易云音乐的音乐网站,在制作播放器的时候用到了element ui里面的slider组件,制作完成后发现使用c ...
- 微信语音短消息amr文件转WAV
" 微信语音短消息amr文件转WAV." 在<SILK编码语音转WAV格式>中提到过,"腾讯系产品,包括QQ.微信.小程序,在语音相关的实现中,也大量使用到S ...
- Python-读取PDF文件显示在窗口上-Pdf阅读器
读取PDF文件显示窗口上 1.实现功能 2.需要模块 3.实现思路 4.效果展示 5.代码展示 6.扩展 1.实现功能 打开一个指定pdf文件,将pdf文件中第一页显示在窗口上. 2.需要模块 模块名 ...
最新文章
- [转]struts2处理.do后缀的请求
- python 下载网页文件_『如何用python把网页上的文本内容保存下来』python爬取网页内容教程...
- UA PHYS515A 电磁理论III 静磁学问题1 Maxwell方程与静磁学问题
- 网络爬虫ip代理服务器【程序样例】
- Zookeeper-02-概念
- 连续汗蒸一星期有什么好处?
- React server rendering —— 网易美学主站同构实录
- “软”苹果水逆的一周:杂志服务崩溃,新机型遭泄露,芯片首架离职
- AMD规范和requirejs入门
- hdu4757(可持久化 Trie )
- 关于Android的.so文件你所需要知道的 - 简书
- python卡方拟合优度检验_如何使用Python中的科学库执行卡方拟合优度测试?
- 设计模式之简单工厂模式和抽象工厂模式
- 简述微处理器、微型计算机、微机系统的组成和三者间关系?
- python关键词排名批量查排名_[代码全屏查看]-Python 批量获取Baidu关键词的排名并入库...
- Win11更改系统文件夹的默认保存位置方法分享
- C语言多人对战贪吃蛇,双人对战贪吃蛇
- 解决服务器上传的tar格式的中不可以解压tar格式的压缩包 zip解压中文会在文件中显示乱码
- android半透明图层颜色叠加,Android 图层混合模式PorterDuff.Mode
- MIT开创减少双量子比特门误差的新方法,提高鲁棒性迈向纠错量子计算机