mw234920 2017-08-02 12:27 采纳率: 100%
浏览 3547
已采纳

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 获取真正的主窗口

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 微信实时共享位置修改
  • ¥100 TG的session协议号转成直登号号后客户端登录几分钟后自动退出设备
  • ¥30 共模反馈回路的小信号增益
  • ¥15 arduino ssd1306函数与tone函数放歌代码不兼容问题
  • ¥70 0.96版本hbase的row_key里含有双引号,无法deleteall
  • ¥20 Ida Pro增加插件出现问题
  • ¥15 诊断性META分析合并效能的检验
  • ¥15 请问abb根据色块判断奇偶数并根据批次号放入仓储
  • ¥66 开发PC客户端一定也要开发上位机吗?
  • ¥20 Java eclipse连接数据库