Tag: hwnd

来自Process.MainWindowHandle的C#HwndSource

我试图“挂钩”窗口的消息以检测最小化/最大化。 我环顾四周,并认为这样做的唯一/最佳解决方案是挂钩窗口的消息,并检查WM_WINDOWPOSCHANGED消息,然后检查它的状态。 我遇到了一个问题。 System.Windows.Interop.HwndSource source = System.Windows.Interop.HwndSource.FromHwnd(System.Diagnostics.Process.GetProcessesByName(“notepad”)[0].MainWindowHandle); System.Windows.Interop.HwndSourceHook hook = new System.Windows.Interop.HwndSourceHook(WndProc); source.AddHook(hook); 它会给我一个“对象引用未设置为对象的实例”。 “source.AddHook …”上的错误。 在断点时,也清楚源变量为空。 换句话说:它无法在第一行获得HwndSource。 我知道可以使用“WindowInteropHelper”,但是当你将实际窗口作为Windows.Window可用时,但在我的情况下,我没有。 非常感谢任何解决方法/解决方案, RenéSackers PS我在执行代码时100%确定记事本是否正在运行,它设法找到它,它是主窗口句柄。

如何确定给定的hWnd是否仍然有效?

我正在使用第三方类来生成Internet Explorer实例。 该类有一个属性hWnd,它返回进程的hWnd。 接下来,我可能想要重用应用程序的实例(如果它仍然存在),所以我需要告诉我的帮助程序类附加到它。 在此之前,我想知道给定的hWnd是否仍然有效,否则我将生成另一个实例。 我怎样才能在C#和.NET 3.5中执行此操作?

如果我只有一个窗口句柄(hWnd),我如何GetModuleFileName()?

我正在尝试获取我的C#2.0应用程序之外的窗口的可执行文件的名称。 我的应用程序当前使用来自“user32.dll”的GetForegroundWindow()调用获取窗口句柄(hWnd)。 从我能够进行的挖掘,我想我想使用GetModuleFileNameEx()函数(来自PSAPI)来获取名称,但GetModuleFileNameEx()需要一个Process的句柄,而不是一个Window。 是否可以从窗口句柄获取进程句柄? (我是否需要先获取窗口的线程句柄?) 编辑第一句话,使我更清楚我正在尝试做什么。 UPDATE! 这是我发现为我工作的C#代码。 唯一需要注意的是它会返回一个文件/路径,其中驱动器号是“?” 而不是实际的驱动器号(如“C”)。 – 还没弄明白为什么呢。 [DllImport(“user32.dll”)] static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); [DllImport(“kernel32.dll”)] static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId); [DllImport(“psapi.dll”)] static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In] [MarshalAs(UnmanagedType.U4)] int nSize); [DllImport(“kernel32.dll”)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool CloseHandle(IntPtr hObject); private […]

我可以使用hwnd / NativeWindow设置我的WinForms表单所有者的行为吗?

我的应用程序是一个vb6可执行文件,但系统中的一些较新的表单是用C#编写的。 我希望能够使用主应用程序窗口的句柄设置C#表单的Owner属性,以便在我的应用程序和其他应用程序之间来回切换时,对话框保持在顶部。 我可以获得主应用程序窗口的hwnd。 我不确定我能从那里做些什么? 更新08年10月20日17:06: 斯科特, 谢谢你的回复。 我忽略了Show / ShowDialog方法参数不是Form类型 – 我只查看Owner属性。 我稍微修改了我正在使用的代码 – 我们有一个组件通常加载我们的Forms并调用ShowDialog。 我的代码如下所示: Form launchTarget = FormFactory.GetForm(xxx); // psuedo-code for generic form loader launchTarget.StartPosition = FormStartPosition.CenterParent; IWin32Window parentWindow = GetWindowFromHwnd(hwnd); launchTarget.ShowDialog(parentWindow); GetWindowFromHwnd是代码的方法包装版本: private IWin32Window GetWindowFromHost(int hwnd) { IWin32Window window = null; IntPtr handle = new IntPtr(hwnd); try { NativeWindow nativeWindow = new […]

从UWP中的CoreWindow对象获取HWND

这篇简短的MSDN文档称CoreWindow具有ICoreWindowInterop,它获取CoreWindow的句柄HWND。 但是我找不到关于如何获得它的引用(C#)。 请帮忙。 https://msdn.microsoft.com/en-us/library/dn302119(v=vs.85).aspx

将文本插入另一个应用程序的文本框中

如何使用C#或C ++将文本插入另一个应用程序的文本框中? 我很久以前这样做了,似乎记得有关使用应用程序HWND的一些事情。 但是,由于对应用程序的每个实例的更改,我觉得我不记得完整的故事。 我是否以某种方式获取正在运行的应用程序列表,提取我想要的那个,从中获取HWND然后……嗯….那么什么? 🙂