问题标签 [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.
c# - 启动进程并将句柄存储到窗口
有人介意帮助我解决我一直坚持一段时间的问题吗?我正在使用 C# 并尝试启动几个进程,然后将这些窗口移动到单独的监视器。
到目前为止,这是主要思想:
但是在尝试了一堆不同的东西之后,我无法让它发挥作用。谁能给我一些指示?
作为一个让我感到困惑的旁注,如果我打印那些以处理 ID(p1,p2),然后运行此代码:
这些进程 ID 不存在。我知道一定有一些简单的东西我错过了......?
更新:上述问题的原因是由于某种原因 MainWindowTitle 没有值,所以它没有打印 pid。
java - JNA - 在 OSX 上获取所有可见的窗口句柄
我正在寻找一种使用 Java 和 JNA 在 OSX 上获取(按 z 顺序)、移动和调整可见窗口大小的方法。该项目的目标是管理第 3 方窗口,因此我不拥有这些窗口,也无法通过简单的 java 代码访问它们。我已经在 windows7/8 上执行此操作,使用 user32.dll 是一项简单的任务。我已经浪费了几个小时在谷歌上搜索,但我找不到任何文档或任何关于如何在最新的 OSX 上完成此操作的信息。所以我的问题是——OSX 与 User32.dll 的等价物是什么,比如 FindWindow、EnumWindows、SetWindowPos 等?
或有关如何完成此类事情的任何其他建议。
c# - 模态 WPF 对话框不会在调用窗口的中心调用
我正在尝试从 Win32 应用程序的子窗口调用 WPF 对话框,并且能够使用调用窗口的窗口句柄 (HWND) 来实现这一点,并将其传递给我使用WindowInteropHelper
类设置所有者的 WPF 代码属性为调用窗口的句柄。下面的代码片段显示了我设置 Owner 属性的 WPF 代码。
我正在使用 Windows 函数获取调用对话框的 HWND,如下所示:
虽然这在功能上按预期工作(WPF 对话框作为模式对话框调用),但它在屏幕的左上角被调用。我什至WindowStartupLocation="CenterOwner"
在 XAML 代码中设置了该属性。当从 WPF 窗口调用时,它工作得非常好,但在涉及 Win32 窗口时却不行。我想我在这里的 WPF-Win32 互操作中遗漏了一些东西,尽管在我看来问题出在从 GetTopWindow(GetActiveWindow()) 检索的 HWND 上。
更新:我将上面的代码替换为将调用窗口的 HWND 替换为下面的代码,现在 WPF 对话框总是在屏幕中心调用,而不管调用它的窗口的位置。
这里 Window2 是调用 WPF 对话框的窗口。
shell - 识别传递特定命令行参数的进程/exe
有两个基于命令行参数执行任务的 exes/程序,我们称之为 Profile。用户可以使用特定配置文件运行这些 exe 的多个实例。
我们遇到了这样一种情况,如果一个 exe 使用配置文件运行,则另一个不应使用相同的配置文件运行,或者一个 exe 不能使用相同的配置文件实例化两次。为此,我们需要识别具有相同配置文件的正在运行的进程。
一种可能性是记录,但如果进程/exe 终止,它可能会失败。
编辑
我需要通过向他/她显示进程的窗口/表单标题来通知用户。由于我的 exes 是基于表单的,所以每个进程都会根据配置文件有自己的标题。基于 WMI 的解决方案,在下面作为我的答案发布,只能找到带有文件名的进程,WMI 没有任何列出窗口/表单标题的功能,所以我决定使用 Win32 API。
我使用了这篇文章中的代码示例,因为我只有 PID,但没有句柄。代码示例不返回任何标题。我检查了以下步骤
ProcessID
通过 WMI时没有返回任何标题。ParentProcessID
从 WMI 传递时返回父 exe 的正确标题。- 当 form.hwnd 从另一个 exe 传递时,返回了子 exe 的正确标题。
看起来代码示例不适用于子 exe(我的 exe 是从另一个 exe 调用的,即我的 exe 是孩子,调用者是父母)。找到的句柄EnumCallBack
不等于表单的句柄hWnd
,这就是它不返回标题的原因。
c++ - Windows 在线程关闭时创建事件
我正在尝试将句柄泄漏检测添加到我的代码的单元测试框架中。(Windows 7、x64 VS2010)
我基本上在每个单元测试之前和之后调用 GetProcessHandleCount() 。这工作正常,除非在测试中创建/销毁线程。
似乎 Windows 偶尔会在线程关闭时创建 1-3 个事件。在循环中运行相同的测试不会增加事件创建计数。(例如,在循环中运行 5000 次测试只会导致创建 1-3 个额外事件)
我不会在自己的代码中手动创建事件。
这似乎与这个问题类似: boost::thread 导致小事件句柄泄漏? 但我正在手动创建/关闭线程。
我遵循了这段代码:http: //blogs.technet.com/b/yongrhee/archive/2011/12/19/how-to-troubleshoot-a-handle-leak.aspx
并从 WinDbg 得到这个调用栈:
如您所见,这是在线程关闭时创建的事件。
有没有更好的方法来处理单元测试中的泄漏检测?我目前唯一的选择是:
- 忘记尝试执行此处理泄漏检测
- 启动一些虚拟任务以尝试创建这些虚假事件。
- 在泄漏中允许一些小的公差值并运行每个测试 100 次(因此实际泄漏会很大)
- 获取不包括事件的句柄计数(代码量困难)
我也尝试过在 VS2013 中切换到使用 std::thread,但似乎它在使用时会创建很多后台线程和句柄。(使计数差异更糟)
这是一个自包含的示例,其中 99% 以上的时间(在我的计算机上)在幕后创建了一个事件。(句柄数不同)。将启动/关闭代码放在循环中表明它不会直接泄漏,而是会累积偶尔发生的事件:
integration-testing - 专注于 lastordefault,但处理调用 open new window
我正在用 c# 编写单元测试,我想在新窗口中关注最后打开的页面。但是当我使用这个时:
Windows 句柄再打开一个窗口。我不需要那个打开,或者我可以通过 URL 或其他方式关注窗口?
c# - c# - 在启动固定到任务栏的应用程序时如何获取窗口句柄?
我正在创建一个应用程序,该应用程序使用以下代码通过程序关闭计算机显示:
并获取窗口句柄,我正在使用以下代码
注意:我正在创建的这个应用程序没有 UI。
在 Visual Studio 2008 Professional 中调试时,一切正常。但是当我将exe固定到任务栏并单击它时,返回的窗口句柄为0。所以显示无法关闭。现在,从任务栏启动应用程序时,我应该怎么做才能获取窗口句柄?
示例主程序将如下所示:
visual-studio-2012 - 编码的 UI 测试 - 在测试期间等待正在运行的应用程序完成
我正在尝试使用Visual Studio Ultimate 2012 的编码 ui 测试为我的应用程序创建测试,在我的应用程序中我运行另一个应用程序(在“另一个应用程序”运行期间打开 cmd 窗口)。我想等到这个“另一个应用程序”完成运行,然后检查一些结果。我怎样才能做到这一点?
如果有人知道如何使用编码的 ui 测试控制窗口,我认为它可能会有所帮助,直到现在我还没有找到一个例子!
multithreading - 应用中如何处理手柄?
我对控制我的应用程序 IpScanner(multithreded) 的句柄有疑问。当我运行我的代码句柄时,每次都会增加。例如:如果我将 IP 范围设置为 192.168.0.1 到 192.168.0.10,然后我用 10 个线程运行我的代码,它会第一次增加,就像我一开始有 40 个句柄一样,它达到某个值让我们说 56。当我再次运行 10 个线程时,它又从 56 增加到某个值,说 67 它一直持续到我终止我的应用程序。如何克服它有人可以帮助我吗?
单位主机名.dfm
如果我为更多线程运行我的代码,那么每次都会生成更多句柄。如何摆脱这些?谁能帮我?谢谢你
selenium-webdriver - 在不切换 selenium webdriver 的情况下获取窗口标题
有没有办法在不进行任何硒切换的情况下获得窗口标题?
目前我正在使用以下代码: