2012-09-26 33 views
1

我看到另一個聽起來幾乎相同的問題,但答案似乎是關於整個桌面屏幕捕獲:DirectShow Source filter using Dekstop window as sourceDirectShow過濾器來抓住一個特定的窗口

我已經看過PushSource,是的,它做它的意義,但我想要虛擬攝像頭抓住一個特定的窗口(類似於你可以選擇共享Skype的共享屏幕上的窗口)。

我該如何選擇一個特定的窗口作爲虛擬攝像頭的捕捉? DirectShow API中是否存在特定的方法,我不知道這是否是這樣的?

+0

https://github.com/rdp/screen-capture-recorder-to-video-windows-free有指定HWND等的選項。 – rogerdpack

回答

4

沒有具體的方法。此外,從屏幕抓取的樣本部分已經不在DirectShow API之外,而是GDI。

所以解決方法很簡單,你的窗口位置爲GetWindowRect,然後從屏幕上只抓取這個矩形,而不是整個桌面。或者相反,您可以將WM_PAINTWM_PRINTCLIENT發送到窗口,以請求將其繪製到提供的設備上下文中。

+0

謝謝你。我查看了msdn開發中心描述中的WM_PAINT和WM_PRINTCLIENT。我仍然困惑我如何修改pushsource搶特定的窗口。我對整個Directshow + GDI庫還是一個新手。我認爲,PRINTCLIENT是我走這個的方式,我發現這個問題是呼叫中的hwnd,我不知道如何找到我需要的窗口的HWND(我想讓它得到一個特定的窗口,只有那個窗口,所以我想硬編碼它) – Wilson1989

+0

你必須先獲得'HWND'。 'FidnWindow'什麼的,沒有'HWND'就不行。 –

+0

我對HWND有更多的瞭解,並發現它不是常量(即使在程序運行時)([hWnd Property](http://msdn.microsoft.com/en-us/library/aa979055%28v=vs 0.71%29.aspx))。有沒有辦法讓我強制一個特定的HWND,以便我可以確切知道要查找什麼HWND?或另一種方法來確保我想要的屏幕是唯一一個即使在HWND被更改時也被捕獲並重新捕獲的屏幕 – Wilson1989