使用c ++最小化插件的浏览器窗口

时间:2013-07-05 05:02:37

标签: winapi visual-c++ visual-studio-2008 plugins

我有一个主要用于屏幕捕获的插件。它加载浏览器。现在单击该按钮会出现一个小窗口,通知屏幕捕获已开始。

在这里,我还希望浏览器最小化。

我尝试了以下方法:

方法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);

不起作用!

2 个答案:

答案 0 :(得分:1)

为了最小化包含您用于开始捕获屏幕的插件的浏览器窗口,我建议采取以下步骤:

  1. 将嵌入插件的页面的document.title(JavaScript)传递给插件。

  2. 在WinApi dll中创建EnumWindowsProc回调函数。每次调用此函数时都会给出一个HWND。在此函数中,您应该使用GetWindowText函数来检查浏览器中的document.title是否是与当前HWND对应的标题的子字符串。如果是,则可以使用ShowWindow最小化当前HWND,如果要在捕获后恢复它,可以存储HWND并稍后再次使用。如果找到匹配则返回FALSE,否则返回TRUE。

  3. 使用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()函数直接获取浏览器窗口句柄。