首页 / C# / c# – 如何检测线程是否有窗口句柄?
c# – 如何检测线程是否有窗口句柄?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何检测线程是否有窗口句柄?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1830字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何检测线程是否有窗口句柄?](/upload/InfoBanner/zyjiaocheng/782/4ffa9aea9ac04a24a45363f921d61fb5.jpg)
如何以编程方式检测线程是否在给定进程上有窗口句柄?
间谍给了我这个信息,但我需要以编程方式进行.
我需要在C#中执行此操作,但.net诊断库不会向我提供此信息.我想间谍正在使用一些我不知道的Windows api调用.
我可以访问我正在尝试调试的系统代码.我想定期嵌入一些由定时器调用的代码,它将检测有多少线程包含窗口处理并记录此信息.
谢谢
解决方法:
我相信你可以使用win api函数:EnumWindowsProc遍历窗口句柄和GetWindowThreadProcessId来获取与给定窗口句柄相关联的线程id和进程id
请检查以下示例是否适合您:
此代码使用System.Diagnostics迭代进程和线程;对于每个线程ID,我正在调用GetWindowHandlesForThread函数(参见下面的代码)
foreach (Process procesInfo in Process.GetProcesses())
{
Console.WriteLine("process {0} {1:x}", procesInfo.ProcessName, procesInfo.Id);
foreach (ProcessThread threadInfo in procesInfo.Threads)
{
Console.WriteLine("\tthread {0:x}", threadInfo.Id);
IntPtr[] windows = GetWindowHandlesForThread(threadInfo.Id);
if (windows != null && windows.Length > 0)
foreach (IntPtr hWnd in windows)
Console.WriteLine("\t\twindow {0:x}", hWnd.ToInt32());
}
}
GetWindowHandlesForThread实现:
private IntPtr[] GetWindowHandlesForThread(int threadHandle)
{
_results.Clear();
EnumWindows(WindowEnum, threadHandle);
return _results.ToArray();
}
private delegate int EnumWindowsProc(IntPtr hwnd, int lParam);
[DllImport("user32.Dll")]
private static extern int EnumWindows(EnumWindowsProc x, int y);
[DllImport("user32.dll")]
public static extern int GetWindowThreadProcessId(IntPtr handle, out int processId);
private List<IntPtr> _results = new List<IntPtr>();
private int WindowEnum(IntPtr hWnd, int lParam)
{
int processID = 0;
int threadID = GetWindowThreadProcessId(hWnd, out processID);
if (threadID == lParam) _results.Add(hWnd);
return 1;
}
上面代码的结果应该像这样转储到控制台smth:
...
process chrome b70
thread b78
window 2d04c8
window 10354
...
thread bf8
thread c04
...
内容总结
以上是互联网集市为您收集整理的c# – 如何检测线程是否有窗口句柄?全部内容,希望文章能够帮你解决c# – 如何检测线程是否有窗口句柄?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。