我想让我的应用程序窗口保持在另一个程序窗口的前面。 我的应用是使用WPF创建的,我将所有者设置为另一个窗口的hwnd,如下所示:
// this: my wpf window
WindowInteropHelper helper = new WindowInteropHelper(this);
//The hwnd is handle of window that other program I want to follow
helper.Owner = new IntPtr(hwnd);
一切都很完美,但是我无法在窗口(hwnd窗口)的RichEditComponent中用鼠标选择文本。
有什么办法解决这个问题吗?
不知道其他程序是用哪种语言编写的,也许是c ++。使用Windows API“ FindWindowEx”获得的其他程序的窗口句柄。
答案 0 :(得分:0)
如果您的 other 程序是Winforms程序,则需要添加对
的引用
System.Windows.Forms.Integration.dll
并向ElementHost.EnableModelessKeyboardInterop(Window window)
添加呼叫,如下所示:
WindowInteropHelper helper = new WindowInteropHelper(this);
helper.Owner = new IntPtr(hwnd);
ElementHost.EnableModelessKeyboardInterop(this);
因为显然Winforms和WPF具有处理文本输入的不同方法(因此也影响了文本选择-更具体地讲,还复制和粘贴所选文本-)。
除此之外,问题可能是HWND指针-您如何获取它?
例如这是通过指定进程名称来获取主窗口句柄的方法:
Process process = Process.GetProcessesByName("...")[0];
IntPtr hwnd = process.MainWindowHandle;
答案 1 :(得分:0)
我已经通过检测鼠标拖动事件使用全局挂钩解决了这个问题。拖动开始时,取消设置所有者,然后,拖动完成后,再次使用跟随窗口设置所有者。
使用MouseKeyHook检测全局鼠标拖动事件。
https://www.nuget.org/packages/MouseKeyHook
再次感谢@Thomas Flinkow,为您提供帮助!