C# 根据进程ID获取进程主窗口句柄 30

我的进程是个隐藏窗口的进程,所以用Process.MainWindowHandle无法获取到值,总是0。后来我在网上搜到了大家对于此类问题的处理方法,就是用枚举,API的... 我的进程是个隐藏窗口的进程,所以用Process.MainWindowHandle 无法获取到值,总是0。后来我在网上搜到了大家对于此类问题的处理方法,就是用枚举,API的EnumThreadWindows
代码如下:

虽然我能获取到句柄了,但是获取到的不是正确的句柄。这里的NRCServer进程是个exe程序,他的WindowState设置为Minimized,ShowInTaskbar 设置为 false 于是窗口被隐藏。所以我没能获取到它的MainWindowHandle,只有进程Id。并且在NRCServer进程启动的时候,弹出对话框显示了主窗口句柄,但是根据调用API函数获取到的句柄,不是显示的这个。
逐语句调试,发现,在EnumWindowsProc中,其实能获取到至少三个同Id号但是不同句柄的窗口。虽然这三个句柄都不是我的进程的,但是让我疑惑的是,怎么会有三个同Id的?另外,究竟该如何获取到正确的那个句柄?!
谢谢各位大虾,帮忙解答一下!
展开
 我来答
百度网友9976b697e
2012-07-17
知道答主
回答量:19
采纳率:0%
帮助的人:5.3万
展开全部
首先你要知道 你要找的是进程的句柄。句柄是操作系统操作的对象,任何一个对象比如一个textbox 也有他的句柄,不一定只要窗口才有句柄。现在你要找到进程的句柄,貌似用C#的话必须要用API 可以用Delphi 试试 这样比较方便 比如 FindWindow 我没有尝试用 这个函数来找 隐藏窗体的句柄 但是 一般 找窗体都没问题的。
追问
非常感谢,不过恐怕你没仔细看我的代码和说明。FindWindow只能找可见窗口,隐藏窗口的句柄是找不到的。不过还是谢谢你的回答。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式