C#获取指定进程的主窗口句柄

C#获取指定进程的主窗口句柄

问题描述:

方法一:
通过在C#获取根据进程名获取进程Process,然后得到句柄 process.MainWindowHandle (获取关联进程主窗口的窗口句柄)

方法二:
通过调用windows底层API来获取指定进程的窗口句柄:主要用到两个
EnumWindows
GetWindowThreadProcessId

这两种方式对于大部分windows窗体都能获取到句柄;但是有些窗口,比如飞秋,获取到窗口句柄始终为0;

求各位大神赐教啊!!!!!!

解决办法: 通过窗口标题或者主窗体类名,调用API FindWindow()来获取窗口句柄,可以成功!包括托盘的隐藏窗口

那些窗口不是标准窗口,可能自己画的,你API所以拿不到。这一类窗口需要用hook等钩子去获取

EnumWindows,这个是可以的,但是一些程序,特别是 Delphi 写的,它所谓的主窗口其实是一个子窗口。你可以先用 spy++ 验证下。
如果那样,需要继续调用 GetChildWindow 获取真正的主窗口