Winapi DirectShow筛选器以获取特定窗口

Winapi DirectShow筛选器以获取特定窗口,winapi,directshow,gdi,screen-capture,Winapi,Directshow,Gdi,Screen Capture,我看到另一个问题,听起来几乎一样,但答案似乎是关于整个桌面屏幕捕获: 我已经看过PushSource,是的,它做了它想做的事情,但是我希望虚拟网络摄像头抓取一个特定的窗口,类似于你可以在Skype的共享屏幕上选择共享窗口的方式 我如何选择一个特定的窗口作为虚拟网络摄像头的捕获?DirectShow API中是否已经有我不知道的特定方法可以实现此目的?没有特定的方法。此外,从屏幕抓取的样本部分已经在DirectShowAPI之外,而是GDI 所以解决方案非常简单,您可以获取窗口的WindowRec

我看到另一个问题,听起来几乎一样,但答案似乎是关于整个桌面屏幕捕获:

我已经看过PushSource,是的,它做了它想做的事情,但是我希望虚拟网络摄像头抓取一个特定的窗口,类似于你可以在Skype的共享屏幕上选择共享窗口的方式


我如何选择一个特定的窗口作为虚拟网络摄像头的捕获?DirectShow API中是否已经有我不知道的特定方法可以实现此目的?

没有特定的方法。此外,从屏幕抓取的样本部分已经在DirectShowAPI之外,而是GDI


所以解决方案非常简单,您可以获取窗口的WindowRect位置,然后从屏幕上只抓取这个矩形,而不是整个桌面。或者,您可以将WM_PAINT或WM_PRINTCLIENT发送到窗口,以便在提供的设备上下文中请求其绘制。

没有特定的方法。此外,从屏幕抓取的样本部分已经在DirectShowAPI之外,而是GDI


所以解决方案非常简单,您可以获取窗口的WindowRect位置,然后从屏幕上只抓取这个矩形,而不是整个桌面。或者,您可以将WM_PAINT或WM_PRINTCLIENT发送到窗口,以便在提供的设备上下文中请求其绘制。

谢谢。我在msdn开发中心查看了WM_PAINT和WM_PRINTCLIENT的描述。我仍然对如何修改pushsource以获取特定窗口感到困惑。我对整个Directshow+GDI库还是有点陌生。我认为PRINTCLIENT是我处理这个问题的方式,我发现这个问题是调用中的hwnd,我不确定如何找到我需要的窗口的hwnd,我有点想让它得到一个特定的窗口,只有那个窗口,所以我想硬编码你必须先得到hwnd。FidnWindow之类的东西,没有HWND你是做不到的。我读了更多关于HWND的书,发现即使在程序运行时它也不是常量。有没有一种方法可以让我强制特定的HWND,这样我就可以确切地知道HWND要寻找什么?或者另一种方法来确保我想要的屏幕是唯一一个被捕获和重新捕获的屏幕,即使HWND被更改,应用程序也拥有自己的窗口,这样他们就可以创建和销毁它们,而无需与您确认。HWND是退出窗口的句柄。当窗口处于活动状态时,HWND保持不变。所以你需要找到它,然后使用它,只要它是好的,然后可能再次寻找它,如果它不见了。谢谢。我在msdn开发中心查看了WM_PAINT和WM_PRINTCLIENT的描述。我仍然对如何修改pushsource以获取特定窗口感到困惑。我对整个Directshow+GDI库还是有点陌生。我认为PRINTCLIENT是我处理这个问题的方式,我发现这个问题是调用中的hwnd,我不确定如何找到我需要的窗口的hwnd,我有点想让它得到一个特定的窗口,只有那个窗口,所以我想硬编码你必须先得到hwnd。FidnWindow之类的东西,没有HWND你是做不到的。我读了更多关于HWND的书,发现即使在程序运行时它也不是常量。有没有一种方法可以让我强制特定的HWND,这样我就可以确切地知道HWND要寻找什么?或者另一种方法来确保我想要的屏幕是唯一一个被捕获和重新捕获的屏幕,即使HWND被更改,应用程序也拥有自己的窗口,这样他们就可以创建和销毁它们,而无需与您确认。HWND是退出窗口的句柄。当窗口处于活动状态时,HWND保持不变。所以你需要找到它,然后使用它,只要它是好的,然后可能再次寻找它,如果它不见了。具有用于指定HWND等的选项。具有用于指定HWND等的选项。