问题标签 [window-handles]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
16197 浏览

c# - 在 C# 中获取子窗口句柄

我在 C# 中启动一个进程,然后使用 SendMessage 将 Windows 消息发送到该进程。通常我将消息发送到 Process.MainWindowHandle,但在某些情况下,我可能需要找到一个子窗口句柄并在那里发送消息。我将如何在 C# 中执行此操作以及查找子窗口的选项有哪些(即是否需要知道窗口的名称或是否有其他选项)?

0 投票
0 回答
144 浏览

.net - 检测有人挂在窗把手上

您能否检测到是否有人试图在 .NET 中挂接到您的应用程序(或其一部分)的窗口句柄?

0 投票
2 回答
873 浏览

.net - OutOfMemoryException,大量私有数据

在之前的系列中:

OutOfMemoryException,堆栈大小巨大,线程数多

我有一个消耗大量内存的 .net windows 服务。GC堆不大。堆栈大小也不大。重要的是所谓的私人数据。我还可以在任务管理器中看到我的应用程序消耗了很多任务管理器调用句柄的东西。我的应用程序消耗 2326 个句柄。我相信这些句柄是一些占用私有数据的窗口句柄。我可以看到这个私有数据被标记为Thread Environment Block的块占用。那是什么?

VMMap 我的应用程序内存使用情况的屏幕截图

任务管理器对我的应用程序内存使用情况的屏幕截图

更新

我运行 ProcessExplorer。目前我的服务有两个实例正在运行。我可以看到它们为 Gen2 GC 消耗了大量的虚拟内存。这看起来很可疑。为 GC Heap 保留的总大小对于两个进程也是相同的。

替代文字

0 投票
4 回答
14293 浏览

c# - 从窗口类名获取窗口句柄

我试图在我的进程中获取子窗口的窗口句柄,我拥有的唯一信息是窗口类名。有没有我可以使用的win32函数?我正在从 C# 执行此操作。

更详细一点:这是一个 Visual Studio 插件,用 C# 编写。所以我的流程是visual studio,它有很多窗口。其中一个有一个窗口类“VsTipWindow”。我不知道那个窗口的直接父窗口,我只有类名。有什么方法可以让我从中获取窗口句柄吗?

0 投票
3 回答
26954 浏览

c# - 获取进程的所有窗口句柄

使用 Microsoft Spy++,我可以看到属于一个进程的以下窗口:

处理 XYZ 窗口句柄,以树形式显示,就像 Spy++ 给我的一样:

我可以得到进程,MainWindowHandle 属性指向窗口 F 的句柄。如果我使用枚举子窗口,我可以获得 G 到 K 的窗口句柄列表,但我不知道如何找到窗口A 到 D 的句柄。如何枚举不是由 Process 对象的 MainWindowHandle 指定的句柄的子窗口?

枚举我正在使用 win32 调用:

0 投票
4 回答
9119 浏览

c# - 处理无效的窗口句柄

应用程序使用 Enum* 例程检索窗口句柄。

碰巧在应用程序管理枚举/创建窗口的句柄(获取类名,窗口统计信息......)时,句柄不再有效。管理窗口句柄的代码使用 try/catch 块进行保护,但窗口句柄被存储并随后用于管理所表示的窗口。

如何处理窗口句柄生命周期?是否可以检测到句柄无效?

每次应用程序使用窗口句柄时,我都想避免 try/catch 块。

0 投票
4 回答
2594 浏览

windows - 如何使用 JScript 获取进程的主窗口句柄?

JScript中是否有任何方法可以通过提供进程名称来获取进程主窗口的句柄?该Process.MainWindowHandle属性仅适用于 JScript .NET。经典 JScript 中是否有类似的功能?

0 投票
2 回答
1364 浏览

windows - 转储 Windows 进程的句柄和有关它们的额外信息

今天,我的应用程序在分配图像时在 Windows 上抛出“不再有句柄”错误。为了调试这个,我很想得到我的应用程序获得的所有句柄的列表。如果可能的话,甚至可以使用字体、图像或其他类型,并将信息包含在我的错误报告中,以查看我的应用程序泄漏的位置。

我使用 Java 和 SWT,但在这种情况下调用本机函数或第三方应用程序来获取信息没有问题。

0 投票
2 回答
6783 浏览

c# - C# 列出当前打开的文件和程序

有没有办法获得所有打开的应用程序的列表和所有打开的文件的列表?对于文件,我只需要我打开的文件(文档等)而不是操作系统的打开系统文件。应用程序(仅浏览器、文档处理器等)也是如此。

我已经尝试过来自 Windows API 的各种功能,例如 EnumWindows,但我无法得到我想要的。

我的最终目标的一个例子是有这样的列表:

应用

Microsoft Word、记事本、Mozilla Firefox

文件

foo.txt、foo.mp3、foo.doc

我需要的只是名称,我不需要句柄等(即使我确信我必须使用它们来获得我想要的东西)

0 投票
2 回答
3921 浏览

c# - 如何以编程方式退出第二个消息循环?

我正在尝试创建第二个消息循环以在 C# 中异步处理/过滤低级消息。它的工作原理是创建一个隐藏的表单,将它的 Handle 属性暴露为挂钩,并在单独的线程中运行第二个消息循环。目前我对结果非常满意,但我无法正确退出第二个循环。唯一的解决方法是将 IsBackground 属性设置为 true,因此第二个线程将在主应用程序退出时简单地终止(不处理所有待处理的消息)。

问题是:如何正确退出该消息循环以便第二个 Application.Run() 返回?我尝试了不同的方法来创建单独的 ApplicationContext 并控制各种事件(Application.ApplicationExit、Application.ThreadExit、ApplicationContext.ThreadExit),但它们都因我无法调试的竞争条件而失败。

有什么提示吗?谢谢

这是代码:

我以这种方式在主 Form 构造函数中使用它:

编辑:我的答案中的完整解决方案。