VB6之SendMessage模拟拖放事件
原文链接:http://hi.baidu.com/coo_boi/item/e1e0f5ab45bddbdd5af191df
网上找了个C++的翻一下,原文链接:http://www.cnblogs.com/zhujian198/archive/2009/07/14/1523426.html
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Sub RtlZeroMemory Lib "kernel32" (dest As Any, ByVal numBytes As Long) Private Type POINTAPI
x As Long
y As Long
End Type Private Type DROPFILES
pFiles As Long
pt As POINTAPI
fNC As Long
fWide As Long
End Type Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, _
ByVal lpAddress As Long, _
ByVal dwSize As Long, _
ByVal flAllocationType As Long, _
ByVal flProtect As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, _
ByVal lpBaseAddress As Long, _
lpBuffer As Any, _
ByVal nSize As Long, _
lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualFree Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const WM_DROPFILES = &H233&
Private Const PROCESS_VM_OPERATION = &H8&
Private Const PROCSS_VM_READ = &H100&
Private Const PROCESS_VM_WRITE = &H20&
Private Const MEM_COMMIT = &H1000&
Private Const PAGE_READWRITE = &H4&
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Sub Command1_Click()
Dim hWnd As Long
Dim dwPid As Long
Dim hProc As Long
Dim pMem As Long
Dim pBuff() As Byte
Dim objDFS As DROPFILES
Dim dwBuffSize As Long
Dim szFileName() As Byte szFileName = StrConv("d:\1.txt", vbFromUnicode)
dwBuffSize = Len(objDFS) + UBound(szFileName) + ReDim pBuff(dwBuffSize - )
Call RtlZeroMemory(ByVal VarPtr(pBuff()), dwBuffSize)
Call RtlZeroMemory(ByVal VarPtr(objDFS), Len(objDFS))
objDFS.pFiles = Len(objDFS)
Call CopyMemory(ByVal VarPtr(pBuff()), ByVal VarPtr(objDFS), Len(objDFS))
Call CopyMemory(ByVal VarPtr(pBuff(Len(objDFS))), ByVal VarPtr(szFileName()), UBound(szFileName) + ) hWnd = FindWindow("notepad", vbNullString)
If hWnd Then
Call GetWindowThreadProcessId(hWnd, dwPid)
hProc = OpenProcess(&H8& + &H20&, False, dwPid)
If hProc Then
pMem = VirtualAllocEx(hProc, &, dwBuffSize, MEM_COMMIT, PAGE_READWRITE)
If pMem Then
Debug.Print pMem
If WriteProcessMemory(hProc, pMem, pBuff(), dwBuffSize, &) Then
Call SendMessage(hWnd, WM_DROPFILES, pMem, ByVal &)
Debug.Print "SendMessage OK"
Else
Debug.Print "WriteProcessMemory Failed"
End If
Call VirtualFree(ByVal pMem, dwBuffSize, &)
End If
Call CloseHandle(hProc)
End If
End If
End Sub
VB6之SendMessage模拟拖放事件的更多相关文章
- Android 模拟MotionEvent事件 触发输入法
Android 模拟MotionEvent事件 触发输入法 android输入法layoutbutton文本编辑encoding 关键词:MotionEvent,模拟按键,模拟点击事件,主动弹出输 ...
- 浅谈Winform事件的实现以及模拟其事件的实现(附实现源码)
当我们初学Winform的时候被其神奇的事件功能所吸引,当点击一个按钮时,便会跳到我们所写的点击方法当中去.然而这并不符合我们对方法的理解,究竟.net在后面帮助我们实现了什么.我们怎样模拟其事件的实 ...
- HTML5拖放事件(Drag-and-Drop,DnD)
拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 拖放是在“拖放源(drag source)”和“拖放目标(drop target ...
- android 模拟按键事件
模拟按键事件可以提高代码的复用性,比如在一个edittext的回车事件里做的一些处理 在该edittext的另一个输入要做相同的处理时,模拟按键事件就非常方便了. 代码很简单,直接上代码: new T ...
- js模拟触发事件
html标签元素封装着实用的[事件],但在很多时候,需要[模拟触发事件],比如 [按钮单机事件] 可以实实在在点击按钮触发该事件,但体验而言,很多时候需要js逻辑处理让实现 触发事件的效果这时就用 ...
- 模拟DOMContentLoaded事件
window.onload事件 文档中所有图片,脚本,链接以及子框完成加载后,才会触发window.onload事件. 浏览器兼容性:All DOMContentLoaded事件 当页面中的文档树解析 ...
- JS模拟键盘事件 -- 原理及小例子
提问: 键盘默认事件,比如tab切换,alt+f4关闭,ctrl+t新建等,如果不想通过键盘而是一些按钮点击来触发这些功能,该咋办呢? 例子: 先以tab为例上一个小例子: <!DOCTYPE ...
- Android事件详解——拖放事件DragEvent
1.Android拖放框架的作用? 利用Android的拖放框架,可以让用户用拖放手势把一个View中的数据移到当前layout内的另一个View中去. 2.拖放框架的内容? 1)拖放事件类 2)拖放 ...
- H5 拖放事件详解
拖放事件 H5的拖放事件提供了多个接口: 1.drag:当元素或者选中的文本被拖动时触发(每几百毫秒触发一次),应用在被拖拽元素上 2.dragend:当拖动操作结束时触发(通过释放鼠标按钮或者点击转 ...
随机推荐
- Github+Hexo,搭建专有博客
前言 记得从大二开始,就一直想搭个专属网站,当时使劲抠页面[前端页面是从QQ空间抠的,现在想抠估计没这么容易了],写代码,忙活半天才把程序弄好. 可惜最终项目还是没上线,因为当时有两问题绕不开 需要购 ...
- 解决相关css基础问题
//html代码 <div class="operateWays"> <label> <input type="radio" na ...
- docker dead but pid file exists 问题
You may have to enable the public_ol6_latest repo in order to get this package. sudo yum-config-mana ...
- SQL Server 在Alwayson上使用内存表"踩坑"
200 ? "200px" : this.width)!important;} --> 介绍 因为线上alwayson环境的一个数据库上使用内存表.经过大概一个星期监控程序发 ...
- SqlDataReader 之指定转换无效
//获取最新显示顺序数据 string str = string.Format(@"if exists(select ShowOrder from GIS_FuncDefaultLayer ...
- php面向对象1
类和对象的关系 首先看一段代码 var_dump()后的结果 注意 一个对象系统自动分配一个对象标识符!
- Nginx实用教程(二):配置文件入门
Nginx配置文件结构 nginx配置文件由指令(directive)组成,指令分为两种形式,简单指令和区块指令. 一条简单指令由指令名.参数和结尾的分号(;)组成,例如: listen backlo ...
- CSS3学习系列之选择器(三)
E:enabled伪类选择器和E:disabled伪类选择器 E:enabled伪类选择器用来指定元素处于可用状态的样式. E:disabled伪类选择器用来指定当元素处于不可用状态时的样式. 当一个 ...
- Perl正则表达式例子
Perl正则表达式 一.介绍 正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配:由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则 ...
- AutoResetEvent类的使用
线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号.如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程通过调用 Set 发出资源可用的 ...