我有一个主要用于屏幕捕获的插件。它加载浏览器。现在单击该按钮会出现一个小窗口,通知屏幕捕获已开始。
在这里,我还希望浏览器最小化。
我尝试了以下方法:
方法1。
HWND parentWH = ::FindWindow(L"Chrome_WidgetWin_1", L"test - SC1 - Google Chrome");
::ShowWindow(parentWH,SW_MINIMIZE);
有效!但问题是我应该如何动态地获取FindWindow的参数。 比如,参数1是'WindowClassName',2是'WindowTitle'。对于不同的浏览器。
方法2。
HWND parentWH = ::GetAncestor(this->pluginWindowHandle,GA_ROOTOWNER);
::ShowWindow(parentWH,SW_MINIMIZE);
不起作用!
答案 0 :(得分:1)
为了最小化包含您用于开始捕获屏幕的插件的浏览器窗口,我建议采取以下步骤:
将嵌入插件的页面的document.title(JavaScript)传递给插件。
在WinApi dll中创建EnumWindowsProc回调函数。每次调用此函数时都会给出一个HWND。在此函数中,您应该使用GetWindowText函数来检查浏览器中的document.title是否是与当前HWND对应的标题的子字符串。如果是,则可以使用ShowWindow最小化当前HWND,如果要在捕获后恢复它,可以存储HWND并稍后再次使用。如果找到匹配则返回FALSE,否则返回TRUE。
使用EnumWindows功能枚举系统中的窗口。在此,您将传递一个指向上面回调函数的指针。 EnumWindows将一直运行,直到回调函数返回FALSE,或者它已通过所有窗口枚举。
答案 1 :(得分:0)
这对我来说最小化浏览器窗口的作用。
方法1:
::ShowWindow(pluginWindowHandle,SW_HIDE);
parentWH = ::GetForegroundWindow(); //for obtaining parent window handle
::ShowWindow(parentWH,SW_MINIMIZE);
方法2: 在显示插件窗口之前,我正在获取浏览器窗口句柄
void NotificationWindow::showNotification()
{
parentWH = ::GetForegroundWindow();
::ShowWindow(parentWH,SW_MINIMIZE);
this->close();
this->displayWindow();
}
这里,在调用displayWindow()函数之前,我们可以使用GetForegroundWindow()函数直接获取浏览器窗口句柄。