鱼C论坛

 找回密码
 立即注册
查看: 3398|回复: 13

如何区分两个一模一样的窗口。

[复制链接]
发表于 2016-11-8 21:36:00 | 显示全部楼层 |阅读模式
200鱼币

如果两个窗口  进程映像名/ 进程标题 / 窗口类名完全相同。 且是两个不可控的进程。

这两个窗口不是同一个程序。

那如何给这两个窗口做区分。


或者换一种问法:

两个不同的程序会不会 进程映像名/ 进程标题/ 窗口类名都完全相同。


@小甲鱼 @~风介~ @不二如是 @无符号整形 @SixPy

最佳答案

查看完整内容

1.会的,有可能会完全相同! 2.可以实现辨别的。 先通过EnumWindow获得窗口句柄 然后调用GetWindowThreadProcessId获取进程ID 再OpenProcess 最后GetModuleFileNameEx获取路径 路径总不同吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-8 21:36:01 | 显示全部楼层
1.会的,有可能会完全相同!
2.可以实现辨别的。
先通过EnumWindow获得窗口句柄
然后调用GetWindowThreadProcessId获取进程ID
再OpenProcess
最后GetModuleFileNameEx获取路径
路径总不同吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-8 22:06:02 | 显示全部楼层
无符号整形 发表于 2016-11-8 21:50
1.会的,有可能会完全相同!
2.可以实现辨别的。
先通过EnumWindow获得窗口句柄

如果路径不可控呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-8 22:09:48 | 显示全部楼层
wei_Y 发表于 2016-11-8 22:06
如果路径不可控呢。

不明白啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-8 22:09:53 | 显示全部楼层
即使是同一个程序多开,pid是不一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-9 09:28:22 | 显示全部楼层
SixPy 发表于 2016-11-8 22:09
即使是同一个程序多开,pid是不一样的

但是如何做区分,只能获取到两个不一样的pid。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-9 09:41:13 | 显示全部楼层
wei_Y 发表于 2016-11-9 09:28
但是如何做区分,只能获取到两个不一样的pid。

你是要区分什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-9 10:18:21 | 显示全部楼层
SixPy 发表于 2016-11-9 09:41
你是要区分什么?

我想知道,如果两个 窗口,从外观上看去,一模一样。 从外部获取能不能 做出区分。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-9 10:35:56 | 显示全部楼层
wei_Y 发表于 2016-11-9 10:18
我想知道,如果两个 窗口,从外观上看去,一模一样。 从外部获取能不能 做出区分。

窗口句柄不一样啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-9 11:10:43 | 显示全部楼层
wei_Y 发表于 2016-11-9 10:18
我想知道,如果两个 窗口,从外观上看去,一模一样。 从外部获取能不能 做出区分。

栗子
import os, time
from win32gui import * #EnumWindows
from win32process import GetWindowThreadProcessId

titles = {} 
def foo(hwnd,mouse):
    if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd):
        t = GetWindowText(hwnd)
        tid,pid = GetWindowThreadProcessId(hwnd)
        titles.setdefault(t,[])
        titles[t].append({'pid':pid,'hwnd':hwnd})

os.popen('notepad')
os.popen('notepad')
time.sleep(2)

EnumWindows(foo, 0)
for t in titles:
    if t and len(titles[t])>1:
        print (t,titles[t])

print ('end')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-11 15:32:50 | 显示全部楼层
PID 不同:

搜狗截图20161111153231.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-12 20:14:13 | 显示全部楼层
PID不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-13 12:22:20 | 显示全部楼层

可能是我的问题不合理。
pid和窗口句柄都不相同,但是没法从外部直接做区分。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-13 15:13:17 | 显示全部楼层
进程ID不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 06:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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