【问题标题】:minimize browser window of plugin using c++使用 C++ 最小化插件的浏览器窗口
【发布时间】:2013-07-05 05:02:36
【问题描述】:

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

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

我尝试了以下方法:

方法 1。

HWND parentWH = ::FindWindow(L"Chrome_WidgetWin_1", L"test - SC1 - Google Chrome");

::ShowWindow(parentWH,SW_MINIMIZE);

有效!但问题是我应该如何动态获取 FindWindow 的参数。 比如,parameter1 是 'WindowClassName' 而 2 是 'WindowTitle'。对于不同的浏览器

方法 2。

HWND parentWH = ::GetAncestor(this->pluginWindowHandle,GA_ROOTOWNER);
::ShowWindow(parentWH,SW_MINIMIZE);

不工作!

【问题讨论】:

  • 要查看方法 2 是否可行,启动 Visual Studio 附带的 Spy++ 并查看 this->pluginWindowHandle 是否作为 Chrome_WidgetWin_1 窗口的祖先。

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


【解决方案1】:

要最小化包含您用来启动屏幕截图的插件的浏览器窗口,我建议执行以下步骤:

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

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

  3. 使用EnumWindows 函数枚举系统上的窗口。为此,您将传递一个指向上述回调函数的指针。 EnumWindows 将一直运行,直到回调函数返回 FALSE,或者它已经枚举了所有的窗口。

【讨论】:

    【解决方案2】:

    以下是最小化浏览器窗口的方法。

    方法一:

    ::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()函数获取浏览器窗口句柄。

    【讨论】:

      猜你喜欢
      • 2017-07-27
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      相关资源
      最近更新 更多