Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用PrintWindow和interopbitmap消除wpf中的空域问题_C#_.net_Wpf_Windows_Winapi - Fatal编程技术网

C# 使用PrintWindow和interopbitmap消除wpf中的空域问题

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函数定期将窗口内容复制到某个内存空间中,在该内存空间中,我将使

我有一个关于wpf中空域问题的可能解决方案的问题。我所说的空域是指同时使用wpf和win32 windows的问题,以及win32 windows始终处于首位的事实

我有一个win32窗口,我想合并到我的wpf应用程序中。但我想使用所有的花式wpf的东西也有(如把它上面的东西等…)

我知道这是不可能的,因为空域问题

我的win32窗口只是一个视频窗口,因此它没有键盘或鼠标活动部件。因此,我的想法是使用PrintWindow win32函数定期将窗口内容复制到某个内存空间中,在该内存空间中,我将使用Interopbitmap获取它,然后我可以使用Interopbitmap作为源

我还将隐藏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