C# 使用PrintWindow和interopbitmap消除wpf中的空域问题
我有一个关于wpf中空域问题的可能解决方案的问题。我所说的空域是指同时使用wpf和win32 windows的问题,以及win32 windows始终处于首位的事实 我有一个win32窗口,我想合并到我的wpf应用程序中。但我想使用所有的花式wpf的东西也有(如把它上面的东西等…) 我知道这是不可能的,因为空域问题 我的win32窗口只是一个视频窗口,因此它没有键盘或鼠标活动部件。因此,我的想法是使用PrintWindow win32函数定期将窗口内容复制到某个内存空间中,在该内存空间中,我将使用Interopbitmap获取它,然后我可以使用Interopbitmap作为源 我还将隐藏win32窗口,使其不显示(假定printwindow在隐藏窗口下工作) 不幸的是,我对win32编程了解不多,所以到目前为止我失败了。还有其他人有这方面的经验吗?或者可能有另一种解决办法来逃避空域问题 我在做这样的事情C# 使用PrintWindow和interopbitmap消除wpf中的空域问题,c#,.net,wpf,windows,winapi,C#,.net,Wpf,Windows,Winapi,我有一个关于wpf中空域问题的可能解决方案的问题。我所说的空域是指同时使用wpf和win32 windows的问题,以及win32 windows始终处于首位的事实 我有一个win32窗口,我想合并到我的wpf应用程序中。但我想使用所有的花式wpf的东西也有(如把它上面的东西等…) 我知道这是不可能的,因为空域问题 我的win32窗口只是一个视频窗口,因此它没有键盘或鼠标活动部件。因此,我的想法是使用PrintWindow win32函数定期将窗口内容复制到某个内存空间中,在该内存空间中,我将使
this.dispatcher = Dispatcher.CurrentDispatcher;
Utilities.GetClientRect(this.hwnd, out rect);
width = rect.Right;
height = rect.Bottom;
this.dc = Utilities.CreateCompatibleDC(IntPtr.Zero);
this.hBitmap = Utilities.CreateCompatibleBitmap(dc, width, height);
Utilities.SelectObject(this.dc, this.hBitmap);
this.BitmapSource = (InteropBitmap)Imaging.CreateBitmapSourceFromHBitmap(this.hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
然后定期从另一个线程(每秒5次)执行此操作
Utilities.PrintWindow(this.hwnd, dc, WindowPart.Client);
this.dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)this.BitmapSource.Invalidate);
我只是有一个黑屏,所以这显然不起作用
任何帮助都将不胜感激。请编辑您的问题以解释“空气空间”。PrintWindow()不保证有效。它必须由为窗口编写消息处理程序的程序员实现,以响应WM_PRINTCLIENT消息。通常容易做到,有时不容易,但往往被忽视。黑色是结果。联系原程序员以获得支持。您知道有更好的方法将屏幕内容复制到内存以供以后使用吗?不管是谁制作了被截屏的程序,都能正常工作的东西?我会用那个内存把它连接到interopbitmap