回复:怎么做到WindowFromPoint对当前窗体无效
大概代码如下
Dim A(10) As Long。
Sub Timer1_Timer()
Call GetCursorPos(A(0))
A(10)=WindowFormPoint( A(0),A(1))
IF A(10)=hWnd Then
Me.Visible=0
Exit Sub
End If
End Sub
当然载图完成记得显示窗体就OK
贴吧:vb作者:《顾名思义》 2014-06-06 19:32
回复:怎么做到WindowFromPoint对当前窗体无效
看我的帖子吧,里面有一个用户控件,用来获取激活窗体句柄的
贴吧:vb作者:靐龘軚釨 2014-06-06 00:04
回复:怎么做到WindowFromPoint对当前窗体无效 贴吧:vb作者:1158736571 2014-06-06 17:38
怎么做到WindowFromPoint对当前窗体无效
想做个截图程序,但使用WindowFromPoint时容易获取到自己截图程序的句柄,哪位大神有办法新手先谢了
贴吧:vb作者:Pen血La 2014-06-05 20:21
回复:怎么做到WindowFromPoint对当前窗体无效
不过楼主不想让别人截图到你窗体中的内容可以试试看一些视频播放器他们就不能被一些截图软件取得画面得到的是一黑乎乎的东西。
贴吧:vb作者:《顾名思义》 2014-06-06 18:32
vb中,通过WindowFromPointXY获得一个文件夹的句柄,怎样通过该句
如题,是文件夹,而不是文件哦,谢谢了。。。
贴吧:vb作者:wuygbd 2010-03-16 19:55
易语言API函数大全3
9. API之设备场景函数 CombineRgn 将两个区域组合为个新区域 CombineTransform 驱动世界转换。它相当于依顺序进两次转换 CreateCompatibleDC 创建个与特定设备场景致的内存设备场景 CreateDC 为专门设备创建设备场景 CreateEllipticRgn 创建个椭圆 CreateEllipticRgnIndirect 创建个内切于特定矩形的椭圆区域 CreateIC 为专设备创建个信息场景 CreatePolygonRgn 创建个由系列点围成的区域 CreatePolyPolygonRgn 创建由多个多边形构成的区域。每个多边形都应是封闭的 CreateRectRgn 创建个矩形区
贴吧:gmkey作者:gmkey_com 2024-01-28 19:12
回复:PC按键精灵API编程之获取/修改外部进程ListView表格控件内容
源码
Import "win32.dll" 'WinApi扩展插件 下载地址 dnxl.ys168.com
const LVM_FIRST = &H1000&
const LVM_GETITEMCOUNT = &H1004&
const LVM_GETHEADER = &H101F&
Const LVM_GETITEMW = &H104B&
const LVM_SETITEMW = &H104C&
const PROCESS_ALL_ACCESS = &H1F0FFF&
const MEM_COMMIT = &H1000&
const MEM_RELEASE = &H8000&
const MEM_RESERVE = &H2000&
Const LVIF_TEXT = 1
Dim u32, k32, pt, LVITEM64, Hwnd
Set u32 = win32.load("user32.dll")
Set k32 = win32.load("kernel32.dll")
Set pt = win32.newstruct 'Point
pt.add "x", "long"
pt.add "y", "long"
Set LVITEM64 = win32.newstruct
With LVITEM64 '目标进程64位,结构体需要扩展
.add "mask","long"
.add "iItem" ,"long"
.add "iSubItem", "long"
.add "state" ,"long"
.add "stateMask","long"
.add "Reserved0","long" '8字节对齐 目标32位的话把这行注释
.add "pszText", "long" 'wchar* 这里本应该是64位指针占8字节,咱是32位进程用不了,就把这个指针分为高低4位,这是低4位
.add "Reserved1","long" '对齐 补上一成员高4位 目标32位的话把这行注释
.add "cchTextMax","long"
.add "iImage","long"
.add "lParam", "long" 'lParam 这里本应该是64位指针占8字节,咱是32位进程用不了,就把这个指针分为高低4位,这是低4位
.add "Reserved2","long" '对齐 补上一成员高4位 目标32位的话把这行注释
.add "iIndent","long"
.add "iGroupId","long"
.add "cColumns","long"
.add "Reserved3","long" '对齐 8字节 目标32位的话把这行注释
.add "puColumns","long" 'IntPtr 这里本应该是64位指针占8字节,咱是32位进程用不了,就把这个指针分为高低4位,这是低4位
.add "Reserved4","long" '对齐 补上一成员高4位 目标32位的话把这行注释
.add "piColFmt","long" 'IntPtr 这里本应该是64位指针占8字节,咱是32位进程用不了,就把这个指针分为高低4位,这是低4位
.add "Reserved5","long" '对齐 补上一成员高4位 目标32位的话把这行注释
.add "iGroup","long" 'IntPtr 这里本应该是64位指针占8字节,咱是32位进程用不了,就把这个指针分为高低4位,这是低4位
.add "Reserved6","long" '对齐 补上一成员高4位 目标32位的话把这行注释
End With
Function GetMousePoint //得到当前鼠标指向的窗口句柄
pt.ptr = k32.LocalAlloc(64, pt.size)
Call u32.GetCurSorPos(pt.ptr)//得到鼠标当前位置
GetMousePoint = u32.WindowFromPoint(pt.x, pt.y)//得到当前鼠标指向的窗口句柄
Call k32.LocalFree(pt.ptr)
End Function
Function GetItemLines(WndHandle) '取ListView控件行数(控件窗口句柄)
GetItemLines = u32.SendMessageW(WndHandle, LVM_GETITEMCOUNT, 0, 0)//得到ListView控件行数
End Function
Function GetItemCount(WndHandle) '取ListView控件例数(控件窗口句柄)
GetItemCount = u32.SendMessageW(u32.SendMessageW(WndHandle, LVM_GETHEADER, 0, 0), &H1200, 0, 0) //得到ListView控件例数
End Function
Function GetListViewText64(WndHandle, line, index) '取ListView控件指定格内容(控件窗口句柄,第N行,第N列) 可以把控件显示内容看作一个二维数组
Dim pid, hProcess, vCount, lines,vPointer,vBuffer
vCount = GetItemCount(WndHandle) //得到列数
If vCount < index Then Exit Function
Lines = GetItemLines(WndHandle) //得到总行数
If Lines < line Then Exit Function
vBuffer = k32.LocalAlloc(64, 1024) '在堆上分配1024个字节的内存空间
Call u32.GetWindowThreadProcessId(WndHandle, vBuffer)//通过窗口句柄获取目标进程ID
pid = Win32.Pint(vBuffer)
hProcess = k32.OpenProcess(PROCESS_ALL_ACCESS, false, pid) '打开进程
vPointer = k32.VirtualAllocEx(hProcess, 0, 4096, MEM_COMMIT, 64) '在目标进程申请4096字节内存空间
LVITEM64.Ptr = K32.LocalAlloc(64, LVITEM64.Size) '给结构体分配内存
lvitem64.Mask = LVIF_TEXT '将要操作文本
LVITEM64.iItem = line '将要操作的行
lvitem64.isubitem = index '将要操作的列
lvitem64.cchTextMax = 256 '最大字符数
lvitem64.pszText = vPointer + lvitem64.size '文本指针
Call k32.WriteProcessMemory(hProcess, vPointer, lvitem64.ptr, lvitem64.size, 0) '将数据写入目标进程
Call u32.SendMessageW(WndHandle, LVM_GETITEMW, line, vPointer) '发消息告诉目标,我想取文本,按照vPointer里面的要求获取,取第N行第N列的文本数据,存到指定地址vPointer + lvitem64.size
Call k32.ReadProcessMemory(hProcess, lvitem64.pszText, vBuffer, 256, 0)'从目标内存指定地址把数据读出来存到vBuffer这块内存里
Call k32.VirtualFreeEx(hProcess, vPointer, 0, MEM_RELEASE)'释放在目标进程申请的内存空间
GetListViewText64 = Win32.PbStr(vBuffer) '以字符串类型从地址vBuffer取出数据,作为函数返回
Call k32.CloseHandle(hProcess) '关闭进程,打开进程必需关闭
Call k32.LocalFree(lvitem64.Ptr) '释放结构体空间
Call k32.LocalFree(vBuffer) '释放vBuffer空间
End Function
Sub SetListViewText64(WndHandle, Line, Index, ItemText) '设置ListView控件指定格内容(控件窗口句柄,第N行,第N列,内容) 可以把控件显示内容看作一个二维数组
Dim pid, hProcess, vCount, Lines,vPointer,vBuffer
vCount = GetItemCount(WndHandle) //得到列数
If vCount < index Then Exit Sub
Lines = GetItemLines(WndHandle) //得到总行数
If Lines < line Then Exit Sub
vBuffer = k32.LocalAlloc(64, 1024)
Call u32.GetWindowThreadProcessId(WndHandle, vbuffer)//通过窗口获取进程ID
pid = Win32.Pint(vbuffer)
hProcess = k32.OpenProcess(PROCESS_ALL_ACCESS, false, pid)
vPointer = k32.VirtualAllocEx(hProcess, 0, 4096, MEM_COMMIT, 64)
LVITEM64.Ptr = K32.LocalAlloc(64, LVITEM64.Size)
lvitem64.mask = LVIF_TEXT
LVITEM64.iItem = line
lvitem64.isubitem = index
lvitem64.cchTextMax = Len(ItemText) * 2 + 2
lvitem64.pszText = vPointer + lvitem64.size
Call k32.WriteProcessMemory(hProcess, lvitem64.pszText, ItemText, lvitem64.cchTextMax, 0) '把想修改的内容写入目标进程
Call k32.WriteProcessMemory(hProcess, vPointer, lvitem64.ptr, lvitem64.size, 0) '把想修改的内容写入目标进程
Call u32.SendMessageW(WndHandle, LVM_SETITEMW, line, vPointer)'发消息告诉目标窗口,我要修改数据,数据在vPointer这个地址里
Call k32.VirtualFreeEx(hProcess, vPointer, 0, MEM_RELEASE)
Call k32.CloseHandle(hProcess)
Call k32.LocalFree(lvitem64.Ptr)
Call k32.LocalFree(vBuffer)
End Sub
Hwnd = GetMousePoint
TracePrint GetListViewText64(Hwnd, 0, 0) & " " & GetListViewText64(Hwnd, 0, 1)
TracePrint GetListViewText64(Hwnd, 1, 0) & " " & GetListViewText64(Hwnd, 1, 1)
TracePrint GetListViewText64(Hwnd, 2, 0) & " " & GetListViewText64(Hwnd, 2, 1)
'Call SetListViewText64(Hwnd, 1, 0, "abcd.exe")
贴吧:按键精灵作者:dnxl2019 2023-07-19 11:14
回复:vb怎么实现知道网址关闭网页
窗口按钮代码:
'按住按钮并拖动至窗口标题再松开,本窗口上显示松开时目标窗体的句柄与名称
Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim NowPOINT As POINTAPI '记录鼠标松开时所在位置
Dim TheHwnd As Long '目标窗体句柄
Dim TheName As String '目标窗体名称
GetCursorPos NowPOINT '获取鼠标位置
TheHwnd = WindowFromPoint(NowPOINT.X, NowPOINT.Y) '获取鼠标位置所指窗口句柄
Cls
Print "目标句柄:" & TheHwnd
TheName = String(255, Chr(0)) '必要的
GetWindowText TheHwnd, TheName, 255 '获取目标窗体名称
Print "目标句柄:" & TheName
End Sub
模块代码:
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" (ByVal XPoint As Long, ByVal yPoint As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Type POINTAPI
X As Long
Y As Long
End Type
贴吧:vb作者:嘟嘟逸凡 2023-01-10 15:12
回复:大佬们问一个问题
不获取句柄的情况下不可能搜得到,所有的方法都是建立在句柄上的。不过有用名字搜句柄的办法。
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
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 GetModuleFileNameEx Lib "psapi.dll" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Function GetFileName(hwnd As Long) As String
Dim lpid As Long
Dim sBuffer As String
Dim hHandle As Long
Dim hInst As Long
Dim lRet As Long
sBuffer = Space(255) '必要
GetWindowThreadProcessId hwnd, lpid '获取进程ID
hHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, lpid) '获取进程句柄
lRet = GetModuleFileNameEx(hHandle, 0, sBuffer, 255) '获取进程所在文件路径
GetFileName = sBuffer
End Function
Private Sub Command1_Click()
Dim WinName As String
WinName = InputBox("请输入需要查找的任务名称:", "路径查找器")
If WinName = "" Then Exit Sub
Dim hwndWow As Long
hwndWow = FindWindow(vbNullString, WinName)
If hwndWow <= 0 Then
MsgBox "您搜索的程序 """ & WinName & """ 不存在,请重新查找。", vbOKOnly, "路径查找器"
Exit Sub
End If
Cls
Print "选中窗体名称:" & WinName
Print "选中窗体句柄:" & hwndWow
Print "选中窗体路径:" & GetFileName(hwndWow) '获取句柄窗体文件的路径
End Sub
贴吧:vb作者:嘟嘟逸凡 2023-02-07 16:08