监视仅在我的wpf应用程序中的应用程序中发生的剪贴板操作

时间:2015-05-21 11:10:55

标签: c# wpf clipboard caliburn.micro wndproc

我想在我的WPF应用程序中添加监视剪贴板更改的功能。 但我也想过滤我的应用程序中发生的剪贴板更改。 所以我在其中一个主视图模型中编写了以下代码, 这个VM继承自

Conductor<IScreen> 
<>的Caliburn.Micro。

代码:

protected override void OnActivate()
{
    base.OnActivate();
    ScreenExtensions.TryActivate(ChildWindow);

    BuildClipboard();

    GotoLogin();
}

private void BuildClipboard()
{
    _windowHandle = (new WindowInteropHelper(Application.Current.MainWindow)).EnsureHandle();
    _hWndSource = HwndSource.FromHwnd(_windowHandle);
    _hWndSource.AddHook(new HwndSourceHook(WndProc));

    SetClipboardViewer(_windowHandle);
}

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam,      ref bool handled)
{
     try
     {
        if (_windowHandle == hwnd && msg == WM_DRAWCLIPBOARD)
        {
            IDataObject iData = Clipboard.GetDataObject();
            if (iData.GetDataPresent(DataFormats.Text))
            {
              /////
            }
        }
     }
     catch(Exception
     {
       ///
     }
 }

protected override void OnDeactivate(bool close)
{
   _hWndSource.RemoveHook(new HwndSourceHook(WndProc));
   _windowHandle = IntPtr.Zero;

   ScreenExtensions.TryDeactivate(ChildWindow, close);
   base.OnDeactivate(close);
   ....
}

我有一些问题: 第一,行

if (_windowHandle == hwnd && msg == WM_DRAWCLIPBOARD)

无助于获得我想要的行为。出于某种原因,即使我从Word而不是从我的应用程序复制内容,hwnd总是具有相同的int值。 第二个问题,每次我重新启动我的应用程序时,当我的应用程序启动时,它会获得WndProc方法,其中包含我在重新启动应用程序之前创建的副本的值。诅咒这不是我想要的行为。

我希望你能帮助我, 谢谢,Anat

0 个答案:

没有答案