Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define UNICODE
- #include <iostream>
- #include <string>
- #include <dshow.h>
- #include <thread>
- #include "comptr.h"
- #pragma comment(lib, "strmiids.lib")
- #pragma comment(lib, "ole32.lib")
- struct CoInitializeRAII {
- CoInitializeRAII() {CoInitialize(nullptr);}
- ~CoInitializeRAII() {CoUninitialize();}
- };
- DxUtil::ComPtr<IVMRWindowlessControl> InitWindowlessVMR(HWND hwnd, const DxUtil::ComPtr<IGraphBuilder> &graphBuilder) {
- if (!graphBuilder) {
- return nullptr;
- }
- HRESULT hr;
- DxUtil::ComPtr<IBaseFilter> baseFilter;
- if (FAILED(hr = CoCreateInstance(CLSID_VideoMixingRenderer, nullptr, CLSCTX_INPROC, IID_IBaseFilter, reinterpret_cast<void **>(baseFilter.address())))) {
- std::cout << "Creating IBaseFilter failed: " << hr << "\n";
- return nullptr;
- }
- if (FAILED(hr = graphBuilder->AddFilter(baseFilter.get(), L"Video Mixing Renderer"))) {
- std::cout << "AddFilter() failed: " << hr << "\n";
- return nullptr;
- }
- DxUtil::ComPtr<IVMRFilterConfig> filterConfig;
- if (FAILED(hr = baseFilter->QueryInterface(IID_IVMRFilterConfig, reinterpret_cast<void **>(filterConfig.address())))) {
- std::cout << "Creating IVMRFilterConfig failed: " << hr << "\n";
- return nullptr;
- }
- if (FAILED(hr = filterConfig->SetRenderingMode(VMRMode_Windowless))) {
- std::cout << "SetRenderingMode() failed: " << hr << "\n";
- return nullptr;
- }
- DxUtil::ComPtr<IVMRWindowlessControl> windowlessControl;
- if (FAILED(hr = baseFilter->QueryInterface(IID_IVMRWindowlessControl, reinterpret_cast<void **>(windowlessControl.address())))) {
- std::cout << "Creating IVMRWindowlessControl failed: " << hr << "\n";
- return nullptr;
- }
- if (FAILED(hr = windowlessControl->SetVideoClippingWindow(hwnd))) {
- std::cout << "SetVideoClippingWindow() failed: " << hr << "\n";
- return nullptr;
- }
- return windowlessControl;
- }
- int PlayInWindow(HWND hwnd) {
- const std::wstring fileName = L"F:/Heyayayay.avi";
- //HWND hwnd = FindWindowA(className.c_str(), nullptr);
- if (!hwnd) {
- std::cout << "Window not found.\n";
- return 1;
- }
- CoInitializeRAII coInit;
- HRESULT hr;
- DxUtil::ComPtr<IGraphBuilder> graphBuilder;
- if (FAILED(hr = CoCreateInstance(CLSID_FilterGraph, nullptr, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, reinterpret_cast<void **>(graphBuilder.address())))) {
- std::cout << "Creating IGraphBuilder failed: " << hr << "\n";
- return 1;
- }
- auto windowlessControl = InitWindowlessVMR(hwnd, graphBuilder);
- if (!windowlessControl) {
- std::cout << "Windowless control creation failed.\n";
- return 1;
- }
- RECT src = { 0, 0 };
- windowlessControl->GetNativeVideoSize(&src.right, &src.bottom, nullptr, nullptr);
- RECT dest;
- GetClientRect(hwnd, &dest);
- dest.left = 0;
- windowlessControl->SetVideoPosition(&src, &dest);
- DxUtil::ComPtr<IMediaControl> mediaControl;
- if (FAILED(hr = graphBuilder->QueryInterface(IID_IMediaControl, reinterpret_cast<void **>(mediaControl.address())))) {
- std::cout << "Creating IMediaControl failed: " << hr << "\n";
- return 1;
- }
- DxUtil::ComPtr<IMediaEvent> mediaEvent;
- if (FAILED(hr = graphBuilder->QueryInterface(IID_IMediaEvent, reinterpret_cast<void **>(mediaEvent.address())))) {
- std::cout << "Creating IMediaEvent failed: " << hr << "\n";
- return 1;
- }
- if (FAILED(hr = graphBuilder->RenderFile(fileName.c_str(), nullptr))) {
- std::cout << "RenderFile() failed: " << hr << "\n";
- return 1;
- }
- if (FAILED(hr = mediaControl->Run())) {
- std::cout << "Run() failed: " << hr << "\n";
- return 1;
- }
- long code;
- if (FAILED(hr = mediaEvent->WaitForCompletion(INFINITE, &code))) {
- std::cout << "WaitForCompletion() failed: " << hr << "\n";
- return 1;
- }
- }
- /*BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) {
- if (IsWindowVisible(hWnd)) {
- std::thread t(PlayInWindow, hWnd);
- return FALSE;
- }
- return TRUE;
- }*/
- int main() {
- //EnumWindows(EnumWindowsProc, NULL);
- PlayInWindow(FindWindow(nullptr, L"PuTTY Configuration"));
- // std::thread t1(PlayInWindow, FindWindow(L"Notepad", nullptr));
- // std::thread t2(PlayInWindow, FindWindow(L"CalcFrame", nullptr));
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment