递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 568|回复: 11
打印 上一主题 下一主题

[视窗] 【WindowsAPI封装】WindowFromPoint(取坐标窗口句柄)方法

[复制链接]

467

主题

2万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
46814
跳转到指定楼层
楼主
发表于 2025-11-20 09:40:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 创世魂 于 2025-12-7 23:37 编辑

这个方法比较简单,如果是用火山表格方法来弄,可能还更麻烦。
所以直接嵌入代码是最方便的。


游客,如果您要查看本帖隐藏内容请回复








本帖被以下淘专辑推荐:

安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

115

主题

1150

帖子

6145

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6145
沙发
发表于 2025-11-20 11:33:53 | 只看该作者
这样...缩减成一行 就可以用嵌入式方法了
(INT_P)WindowFromPoint(POINT{@<横坐标>, @<纵坐标>})
回复

使用道具 举报

15

主题

584

帖子

1711

积分

金牌会员

Rank: 6Rank: 6

积分
1711
板凳
发表于 2025-11-20 13:26:43 来自手机 | 只看该作者
不错,不过用途不大
回复

使用道具 举报

3

主题

14

帖子

59

积分

注册会员

Rank: 2

积分
59
地板
发表于 2025-11-20 13:59:13 | 只看该作者
学到了
回复

使用道具 举报

40

主题

404

帖子

3501

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3501
5#
发表于 2025-11-20 15:06:21 来自手机 | 只看该作者
调用API还是嵌入式好用
回复

使用道具 举报

0

主题

4

帖子

114

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
114
QQ
6#
发表于 前天 19:23 | 只看该作者
学习
回复

使用道具 举报

0

主题

13

帖子

132

积分

注册会员

Rank: 2

积分
132
7#
发表于 昨天 15:41 | 只看该作者
,品牌名,;了,了
回复

使用道具 举报

216

主题

1411

帖子

5649

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5649
QQ
8#
发表于 昨天 17:19 | 只看该作者
1111111111
全国活动会议直播拍摄
回复

使用道具 举报

7

主题

377

帖子

2325

积分

金牌会员

Rank: 6Rank: 6

积分
2325
9#
发表于 昨天 20:18 | 只看该作者
WindowFromPoint
回复

使用道具 举报

23

主题

260

帖子

1466

积分

金牌会员

Rank: 6Rank: 6

积分
1466
10#
发表于 8 小时前 | 只看该作者
火山编程(中文编程)封装 WindowFromPoint 模块教程
以下是完整的「取坐标窗口句柄」模块封装实现,基于火山编程的中文语法,适配 Windows API 规范,包含结构体定义、API 声明、封装函数及使用说明。
一、模块整体结构
新建火山模块(建议命名:窗口坐标操作模块),模块内包含:
Windows POINT 结构体定义(对应 API 坐标参数)
WindowFromPoint API 声明(调用 user32.dll 底层接口)
中文封装函数「取坐标窗口句柄」(简化调用,适配火山语法)
二、完整模块代码
plaintext
' ===================== 模块声明区 =====================
' 1. 定义 Windows POINT 结构体(对应屏幕坐标点)
结构体 POINT
    长整数型 x  ' 横坐标(屏幕坐标)
    长整数型 y  ' 纵坐标(屏幕坐标)
结束 结构体

' 2. 声明 WindowFromPoint API 函数(user32.dll)
DLL命令 WindowFromPoint, 整数型, "user32.dll", "WindowFromPoint", 公开, 根据屏幕坐标获取窗口句柄
    参数 pt, POINT, 传址, , 包含屏幕坐标的POINT结构体

' 3. 中文封装函数(简化调用,无需手动构造结构体)
函数 取坐标窗口句柄, 整数型, 公开, 根据屏幕坐标获取对应窗口的句柄
    参数 屏幕横坐标, 长整数型, , 要查询的屏幕横坐标(像素)
    参数 屏幕纵坐标, 长整数型, , 要查询的屏幕纵坐标(像素)
    局部变量 坐标点, POINT  ' 构造API所需的坐标结构体
   
    ' 给结构体赋值
    坐标点.x = 屏幕横坐标
    坐标点.y = 屏幕纵坐标
   
    ' 调用API并返回结果
    返回 WindowFromPoint(坐标点)
结束 函数
三、关键说明
数据类型对应:
Windows API 的 LONG 对应火山的「长整数型」
Windows API 的 HWND(窗口句柄)对应火山的「整数型」
POINT 结构体是 API 强制要求的参数格式,必须传址调用。
坐标类型:
该函数接收的是「屏幕绝对坐标」(不是窗口客户区坐标),如果需要使用客户区坐标,需先通过 ClientToScreen API 转换。
返回值说明:
返回非 0 数值:对应坐标位置的窗口句柄
返回 0:坐标位置无可见窗口(如桌面空白处)
四、使用示例(在火山窗口程序中调用)
plaintext
' 示例:获取鼠标当前位置的窗口句柄
子程序 按钮_获取句柄_被单击
    局部变量 鼠标X, 长整数型
    局部变量 鼠标Y, 长整数型
    局部变量 目标句柄, 整数型
   
    ' 获取鼠标当前屏幕坐标
    获取鼠标位置(鼠标X, 鼠标Y)
   
    ' 调用封装的函数获取窗口句柄
    目标句柄 = 取坐标窗口句柄(鼠标X, 鼠标Y)
   
    ' 显示结果
    信息框("鼠标位置的窗口句柄:" + 到文本(目标句柄), "查询结果", 0)
结束 子程序

' 辅助:获取鼠标当前屏幕坐标(火山内置函数)
DLL命令 获取鼠标位置, 逻辑型, "user32.dll", "GetCursorPos", 公开
    参数 lpPoint, POINT, 传址
五、注意事项
模块需引用「Windows 核心库」(火山默认已引用,无需额外操作)。
该函数返回的是「最顶层可见窗口」的句柄(如覆盖在上方的窗口会优先返回)。
如果需要排除透明窗口 / 系统控件,需结合 GetParent/GetWindowLongPtr 等 API 二次筛选。
64 位程序编译时,需确保 API 声明的调用约定为 stdcall(火山默认适配,无需修改)。
此模块可直接导入火山编程工程使用,完全遵循中文编程习惯,封装后无需关注底层 API 细节,只需传入屏幕坐标即可获取窗口句柄。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-12-10 18:40 , Processed in 0.096775 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表