mw234920
2017-08-02 12:27
采纳率: 100%
浏览 3.3k

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

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

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

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

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • mw234920 2017-08-10 12:47
    已采纳

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • oyljerry 2017-08-02 14:20

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

    评论
    解决 无用
    打赏 举报
  • threenewbee 2017-08-02 15:54

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题