精易论坛

标题: 窗口热键冲突问题 [打印本页]

作者: 育空刘    时间: 2025-3-23 22:12
标题: 窗口热键冲突问题





我打开同一个程序 开两个窗口 我使用了窗口1 我按了F2 窗口1和窗口2都会触发按了F2
怎么样只要我使用窗口1不管我按了什么热键 窗口2永远不会触发到我按到的热键

我使用窗口2也是按下F3也是一样不会冲突到窗口1的热键F3


其他热键设置也是一样 只用使用窗口1按热键都不会触发到窗口2的热键


补充内容 (2025-3-24 08:20):
exe程序不是我的  只有dll是我的 dll也没有窗口
作者: jingyi11023995    时间: 2025-3-23 22:13

通过判断窗口是否为激活状态,决定是否执行就可以了。
作者: 失地农民    时间: 2025-3-23 22:22
用窗口句柄来判断
作者: 是可可吖    时间: 2025-3-23 22:29
用注册热键()热键标识写不同的  这样2个窗口就不冲突了
作者: lishengliang    时间: 2025-3-23 22:31
.版本 2
.支持库 shellEx

.子程序 _窗口1_创建完毕

F7 = 注册热键 (窗口1.取窗口句柄 (), 标签1.取窗口句柄 (), 0, #F7键)
F8 = 注册热键 (窗口1.取窗口句柄 (), 标签1.取窗口句柄 (), 0, #F8键)

.子程序 _标签1_反馈事件, 整数型
.参数 参数一, 整数型
.参数 参数二, 整数型

.如果真 (参数一 = F7)
    ' 执行代码
.如果真结束
.如果真 (参数一 = F8)
    ' 执行代码

作者: lishengliang    时间: 2025-3-23 22:32
lishengliang 发表于 2025-3-23 22:31
.版本 2
.支持库 shellEx
  
子程序名返回值类型公开备 注
_窗口1_创建完毕  
F7 = 注册热键 (窗口1.取窗口句柄 (), 标签1.取窗口句柄 (), 0, #F7键 )
F8 = 注册热键 (窗口1.取窗口句柄 (), 标签1.取窗口句柄 (), 0, #F8键 )
子程序名返回值类型公开备 注
_标签1_反馈事件整数型 
参数名类 型参考可空数组备 注
参数一整数型
参数二整数型
如果真 (参数一 = F7)
' 执行代码
如果真 (参数一 = F8)
' 执行代码



i支持库列表   支持库注释   
shellEx扩展功能支持库一


作者: 育空刘    时间: 2025-3-23 22:35
lishengliang 发表于 2025-3-23 22:32
[e=2].版本 2
.支持库 shellEx

你这个不行 我的劫持DLL 是没有窗口的
同一个程序是软件我用来劫持的
作者: 育空刘    时间: 2025-3-23 22:36
失地农民 发表于 2025-3-23 22:22
用窗口句柄来判断

判断不了 可以早用了
作者: 育空刘    时间: 2025-3-23 22:37
lishengliang 发表于 2025-3-23 22:32
[e=2].版本 2
.支持库 shellEx

你这个不行 我的dll没有窗口的
作者: 育空刘    时间: 2025-3-23 22:37
是可可吖 发表于 2025-3-23 22:29
用注册热键()热键标识写不同的  这样2个窗口就不冲突了

dll 没有窗口
作者: xizhihan    时间: 2025-3-23 23:03
一个用乐玩模块的全局热键
另一个用普通热键
然后设置一个周期=1的时钟,设置活动窗口永远是那个全局热键的窗口。
作者: 失地农民    时间: 2025-3-23 23:05
你这是注册windows系统的热键  两个程序都开了两个程序肯定触发
作者: 育空刘    时间: 2025-3-23 23:07
失地农民 发表于 2025-3-23 23:05
你这是注册windows系统的热键  两个程序都开了两个程序肯定触发

那有办法解决吗
作者: hongqingfeng    时间: 2025-3-23 23:31
做了测试,同时启动多个窗口,只有第一个窗口才可以用到热键,跟本没有发生你说的问题,(第二个窗口开始返回热键标识都是0)

QQ截图20250323232806.png (89.07 KB, 下载次数: 0)

QQ截图20250323232806.png

作者: 育空刘    时间: 2025-3-23 23:33
xizhihan 发表于 2025-3-23 23:03
一个用乐玩模块的全局热键
另一个用普通热键
然后设置一个周期=1的时钟,设置活动窗口永远是那个全局热键的 ...

有写法吗

作者: 失地农民    时间: 2025-3-23 23:34
窗口钩子呀
作者: xizhihan    时间: 2025-3-23 23:36
育空刘 发表于 2025-3-23 23:33
有写法吗

就是乐玩,模块的一些基本函数,一看就会了。现在我在手机上看论坛。难道你可以给我的手机上整一个易语言?

补充内容 (2025-3-23 23:37):
这些写法百du一下就有了。
作者: 育空刘    时间: 2025-3-23 23:38
xizhihan 发表于 2025-3-23 23:36
就是乐玩,模块的一些基本函数,一看就会了。现在我在手机上看论坛。难道你可以给我的手机上整一个易语言 ...

没有乐玩模块 没用过 我也不知道你手机上线
作者: xizhihan    时间: 2025-3-23 23:41
育空刘 发表于 2025-3-23 23:38
没有乐玩模块 没用过 我也不知道你手机上线

不好意思啊,给你添麻烦了。我毕竟是个初中生,晚上最多手机看看论坛,电脑上也嫌累。乐玩模块地址https://125.confly.eu.org/forum.php?mod ... 8789&highlight=乐玩模块
作者: 育空刘    时间: 2025-3-23 23:53
xizhihan 发表于 2025-3-23 23:41
不好意思啊,给你添麻烦了。我毕竟是个初中生,晚上最多手机看看论坛,电脑上也嫌累。乐玩模块地址https: ...

你初中都比我厉害了 我都搞不定这个东西
作者: xizhihan    时间: 2025-3-23 23:57
育空刘 发表于 2025-3-23 23:53
你初中都比我厉害了 我都搞不定这个东西

没有没有,兴趣爱好罢了。
作者: 算法艺术家    时间: 2025-3-24 00:09
因为你注册的是全局热键 当然不能有重复的键,两个窗口不能同时注册F2
作者: 育空刘    时间: 2025-3-24 00:20
算法艺术家 发表于 2025-3-24 00:09
因为你注册的是全局热键 当然不能有重复的键,两个窗口不能同时注册F2

那怎么防止出现这样
作者: 育空刘    时间: 2025-3-24 00:20
xizhihan 发表于 2025-3-23 23:57
没有没有,兴趣爱好罢了。

比我厉害多了
作者: 育空刘    时间: 2025-3-24 00:21
hongqingfeng 发表于 2025-3-23 23:31
做了测试,同时启动多个窗口,只有第一个窗口才可以用到热键,跟本没有发生你说的问题,(第二个窗口开始返 ...

dll 没有窗口
作者: 算法艺术家    时间: 2025-3-24 00:22
育空刘 发表于 2025-3-24 00:20
那怎么防止出现这样

那就别有重复的热键。非得有重复的 只能是非全局快捷键,用窗口的 按下某键的事件来做
作者: 算法艺术家    时间: 2025-3-24 00:24
这是只有本窗口生效的快捷键
  
子程序名返回值类型公开备 注
__启动窗口_按下某键逻辑型 
参数名类 型参考可空数组备 注
键代码整数型
功能键状态整数型
如果真 (键代码 = #F2键 )
' 你的代码
返回 ()
如果真 (键代码 = #F3键 )
' 你的代码
返回 ()


作者: 算法艺术家    时间: 2025-3-24 00:26
育空刘 发表于 2025-3-24 00:21
dll 没有窗口

没有窗口 那就用不了窗口事件
作者: 育空刘    时间: 2025-3-24 00:38
算法艺术家 发表于 2025-3-24 00:24
这是只有本窗口生效的快捷键
[e=3].版本 2

这样用不了
作者: 算法艺术家    时间: 2025-3-24 00:39
育空刘 发表于 2025-3-24 00:38
这样用不了

因为不是全局热键 必须窗口在最上边 有焦点才行,你先用鼠标点一下窗口
作者: 算法艺术家    时间: 2025-3-24 00:46
育空刘 发表于 2025-3-24 00:38
这样用不了

因为焦点跑到别的组件上去了  你把没用的组件删除了,或者直接在那个有焦点的组件下边 放这些代码
作者: 育空刘    时间: 2025-3-24 00:57
算法艺术家 发表于 2025-3-24 00:46
因为焦点跑到别的组件上去了  你把没用的组件删除了,或者直接在那个有焦点的组件下边 放这些代码 ...

没有别的组件啊 我都没有窗口
作者: 算法艺术家    时间: 2025-3-24 01:03
育空刘 发表于 2025-3-24 00:57
没有别的组件啊 我都没有窗口

没有窗口 哪来的启动事件
作者: 算法艺术家    时间: 2025-3-24 01:05
又想到了一个好的方法, 在全局钩子里 判断哪个窗口有焦点 就哪个窗口下的热键生效
  
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
载入 (窗口2, , )
载入 (窗口1, , )
返回 (0)  ' 可以根据您的需要返回任意数值
窗口程序集名保 留  保 留备 注
窗口程序集_窗口1   
变量名类 型数组备 注
钩子类_钩子  
集_钩子句柄整数型  
窗口1句柄整数型  
窗口2句柄整数型  

子程序名返回值类型公开备 注
_窗口1_创建完毕  
集_钩子句柄 = 钩子.安装钩子_键盘 (取窗口句柄 (), &调用回调, )
窗口1句柄 = 取窗口句柄 ()
窗口2句柄 = 窗口2.取窗口句柄 ()
子程序名返回值类型公开备 注
调用回调  
参数名类 型参考可空数组备 注
按键类型整数型256=按下,257=放开,258=单击
键代码整数型
变量名类 型静态数组备 注
焦点句柄整数型 
判断 (按键类型 = 256 键代码 = #F2键 )
焦点句柄 = 窗口_取焦点句柄 ()
如果真 (焦点句柄 = 窗口1句柄)
调试输出 (“ 窗口1按下F2”)
如果真 (焦点句柄 = 窗口2句柄)
调试输出 (“ 窗口2按下F2”)

判断 (按键类型 = 256 键代码 = #F3键 )
调试输出 (“按下F3”)



子程序名返回值类型公开备 注
_窗口1_将被销毁  
钩子.卸载 (集_钩子句柄)


i支持库列表   支持库注释   
spec特殊功能支持库


作者: 育空刘    时间: 2025-3-24 01:32
算法艺术家 发表于 2025-3-24 01:05
又想到了一个好的方法, 在全局钩子里 判断哪个窗口有焦点 就哪个窗口下的热键生效
[e=3].版本 2

不是这样啊 我的是劫吃 dll   不是我写的EXE  只有dll 才是我自己的 EXE不是我的
作者: 供供啊    时间: 2025-3-24 06:55
注册窗口热键
作者: zhtcCC    时间: 2025-3-24 08:09
窗口获取焦点注册热键 失去焦点得时候 注销热键
作者: jcy0307    时间: 2025-3-24 08:18

作者: 育空刘    时间: 2025-3-24 08:18
zhtcCC 发表于 2025-3-24 08:09
窗口获取焦点注册热键 失去焦点得时候 注销热键

问题我dll没窗口怎么获取焦点
作者: hongqingfeng    时间: 2025-3-24 10:58
育空刘 发表于 2025-3-24 00:21
dll 没有窗口

你还是要调用这个DLL 再套到窗口程序中不是吗?
要不把你那个封装DLL代码发出来,
作者: 改个名字    时间: 2025-3-24 14:16
  
窗口句柄 = FindWindowA (“我是窗口1”, “我是窗口1”)
窗口热键 = SetWindowLongA (窗口句柄, -4, 到数值 (&热键消息))
子程序名返回值类型公开备 注
热键消息整数型 
参数名类 型参考可空数组备 注
句柄整数型
消息整数型
窗口参数整数型
消息参数整数型
判断 (消息 = 257 窗口参数 = #F1键 )

判断 (消息 = 257 窗口参数 = #F2键 )



返回 (CallWindowProcA (窗口热键, 句柄, 消息, 窗口参数, 消息参数))


作者: 育空刘    时间: 2025-3-24 18:10
改个名字 发表于 2025-3-24 14:16
[e=0].版本 2

窗口句柄 = FindWindowA (“我是窗口1”, “我是窗口1”)

只有在登录界面有效果 到了窗口1界面那里就没有效果
作者: 育空刘    时间: 2025-3-24 18:10
hongqingfeng 发表于 2025-3-24 10:58
你还是要调用这个DLL 再套到窗口程序中不是吗?
要不把你那个封装DLL代码发出来, ...

对 就是劫chi到窗口程序那里 利用程序调用的dll  模仿的
作者: 改个名字    时间: 2025-3-24 18:14
育空刘 发表于 2025-3-24 18:10
只有在登录界面有效果 到了窗口1界面那里就没有效果

获取窗口1的句柄试试
作者: 育空刘    时间: 2025-3-24 18:15
hongqingfeng 发表于 2025-3-24 10:58
你还是要调用这个DLL 再套到窗口程序中不是吗?
要不把你那个封装DLL代码发出来, ...

对 调用这个DLL

补充内容 (2025-3-24 18:15):
用的是超级模块

新外显.e

982.24 KB, 下载次数: 2


作者: 育空刘    时间: 2025-3-24 18:17
改个名字 发表于 2025-3-24 18:14
获取窗口1的句柄试试

获取不了哦 我的是放在启动子程序那里的
作者: 改个名字    时间: 2025-3-24 18:19
育空刘 发表于 2025-3-24 18:17
获取不了哦 我的是放在启动子程序那里的

启动子程序加个线程循环每隔几秒获取一次窗口1的句柄 获取到后结束线程
作者: 育空刘    时间: 2025-3-24 18:21
改个名字 发表于 2025-3-24 18:14
获取窗口1的句柄试试

只有这个界面有效果

360截图20250324181814815.jpg (34.9 KB, 下载次数: 0)

360截图20250324181814815.jpg

作者: 育空刘    时间: 2025-3-24 18:26
改个名字 发表于 2025-3-24 14:16
[e=0].版本 2

窗口句柄 = FindWindowA (“我是窗口1”, “我是窗口1”)

是这样吗

360截图20250324182603131.jpg (31.14 KB, 下载次数: 0)

360截图20250324182603131.jpg

作者: 改个名字    时间: 2025-3-24 18:31



补充内容 (2025-3-24 18:33):
加上延迟
作者: 育空刘    时间: 2025-3-24 18:41
改个名字 发表于 2025-3-24 18:31
补充内容 (2025-3-24 18:33):
加上延迟

不行 无效
作者: 改个名字    时间: 2025-3-24 18:44
育空刘 发表于 2025-3-24 18:41
不行 无效

类名和标题改成登录后窗口的类名和标题了吗
作者: 育空刘    时间: 2025-3-24 18:45
改个名字 发表于 2025-3-24 18:44
类名和标题改成登录后窗口的类名和标题了吗

改的是窗口名称和窗口类型  不是改的登录的界面的
作者: 育空刘    时间: 2025-3-24 18:46
改个名字 发表于 2025-3-24 18:44
类名和标题改成登录后窗口的类名和标题了吗

线程这个有效果  按键没有效果

360截图20250324184618776.jpg (35.82 KB, 下载次数: 0)

360截图20250324184618776.jpg

作者: 改个名字    时间: 2025-3-24 18:49
育空刘 发表于 2025-3-24 18:45
改的是窗口名称和窗口类型  不是改的登录的界面的

方便发软件或者远程控制不
作者: 改个名字    时间: 2025-3-24 18:54
育空刘 发表于 2025-3-24 18:46
线程这个有效果  按键没有效果

启动子程序下面也加个延时试试

作者: 育空刘    时间: 2025-3-24 19:08
改个名字 发表于 2025-3-24 18:49
方便发软件或者远程控制不

软件发不了 远程也不行  后台会看到
作者: 育空刘    时间: 2025-3-24 19:10
改个名字 发表于 2025-3-24 18:54
启动子程序下面也加个延时试试

热键是不是有问题

360截图20250324190958496.jpg (31.23 KB, 下载次数: 0)

360截图20250324190958496.jpg

作者: 改个名字    时间: 2025-3-24 19:20
育空刘 发表于 2025-3-24 19:10
热键是不是有问题

在最顶上加个信息框输出消息 看看有没有内容
作者: 育空刘    时间: 2025-3-24 20:03
改个名字 发表于 2025-3-24 19:20
在最顶上加个信息框输出消息 看看有没有内容

加了 就热键那里不行 其他都没有问题
作者: 改个名字    时间: 2025-3-24 20:12
育空刘 发表于 2025-3-24 20:03
加了 就热键那里不行 其他都没有问题

是不是没登录的时候就取到句柄了
作者: 育空刘    时间: 2025-3-24 20:15
改个名字 发表于 2025-3-24 20:12
是不是没登录的时候就取到句柄了

没有  我的登录窗口句柄何 窗口1的句柄标题 类名都是不一样的
作者: 改个名字    时间: 2025-3-24 20:19
育空刘 发表于 2025-3-24 20:15
没有  我的登录窗口句柄何 窗口1的句柄标题 类名都是不一样的

看看窗口1有没有别的类名和标题   和信息框看看SetWindowLongA成功没有
作者: 育空刘    时间: 2025-3-24 20:32
改个名字 发表于 2025-3-24 20:19
看看窗口1有没有别的类名和标题   和信息框看看SetWindowLongA成功没有

SetWindowLongA   信息 成功了             窗口1标题 类名没有别的了

360截图20250324203235836.jpg (45.44 KB, 下载次数: 0)

360截图20250324203235836.jpg

作者: hongqingfeng    时间: 2025-3-26 00:18
你写个监视热键?不管多窗口只要你按下键盘某个健,检测到了就会触发命令。你用错了位置

测试.e

982.33 KB, 下载次数: 2


作者: 育空刘    时间: 2025-3-27 01:00
hongqingfeng 发表于 2025-3-26 00:18
你写个监视热键?不管多窗口只要你按下键盘某个健,检测到了就会触发命令。你用错了位置 ...

我的dll 没有窗口 用不了
作者: xk1296234074    时间: 2025-3-27 03:07
每日回帖
作者: 554755303    时间: 2025-3-28 02:33
        感谢分享,很给力!~
作者: 白陌陌    时间: 2025-3-28 10:18
育空刘 发表于 2025-3-24 01:32
不是这样啊 我的是劫吃 dll   不是我写的EXE  只有dll 才是我自己的 EXE不是我的 ...

试试用进程取窗口句柄呢?
作者: 育空刘    时间: 2025-3-29 21:29
jingyi11023995 发表于 2025-3-28 10:06
通过判断窗口是否为激活状态,决定是否执行就可以了。

dll没有窗口

作者: 育空刘    时间: 2025-3-29 21:30
白陌陌 发表于 2025-3-28 10:18
试试用进程取窗口句柄呢?

试过了 窗口1关闭 重新打开 就会失效
作者: lzx5460    时间: 2025-3-30 13:15
触发热键的时候加个判断呢?
激活条件=窗口是否被激活(_启动窗口.取窗口句柄())如果(激活条件=真)
触发快捷键
否则
返回()
'这样窗口不是激活状态下就不会触发热键了,只会在你当前使用的窗口下才会有触发作用

作者: 育空刘    时间: 2025-3-30 20:00
lzx5460 发表于 2025-3-30 13:15
触发热键的时候加个判断呢?
激活条件=窗口是否被激活(_启动窗口.取窗口句柄())如果(激活条件=真)
触 ...

我的dll 是没有窗口的 这个执行不了
作者: 育空刘    时间: 2025-3-30 20:01
lzx5460 发表于 2025-3-30 13:15
触发热键的时候加个判断呢?
激活条件=窗口是否被激活(_启动窗口.取窗口句柄())如果(激活条件=真)
触 ...

窗口1不是我自己的软件 dll才是我的
作者: jingyi11023995    时间: 2025-3-31 10:10
育空刘 发表于 2025-3-29 21:29
dll没有窗口

dll没有窗口,有关系吗?dll可以判断目标窗口是否激活状态,dll是你的,你在源码加上判断就行了。
作者: 育空刘    时间: 2025-4-1 02:44
jingyi11023995 发表于 2025-3-31 10:10
dll没有窗口,有关系吗?dll可以判断目标窗口是否激活状态,dll是你的,你在源码加上判断就行了。 ...

我试试看看
作者: jingyi11023995    时间: 2025-4-1 11:39
育空刘 发表于 2025-4-1 02:44
我试试看看

用精易的命令“窗口_还原()”:
.版本 2

.子程序 窗口_还原, 逻辑型, 公开, 恢复一个最小化的程序,并将其激活;成功把回真,失败返回假;
.参数 窗口句柄, 整数型, , 欲还原的窗口句柄

返回 (OpenIcon (窗口句柄))


dll如下:
.版本 2

.DLL命令 OpenIcon, 逻辑型, "user32.dll", "OpenIcon", 公开, 窗口_还原   恢复一个最小化的程序,并将其激活
    .参数 hwnd, 整数型





欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4