无法在RichEditComponent控件中选择文本

时间:2018-06-22 08:49:38

标签: c# wpf hwnd owner

我想让我的应用程序窗口保持在另一个程序窗口的前面。 我的应用是使用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”获得的其他程序的窗口句柄。

2 个答案:

答案 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,为您提供帮助!