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

Winapi 使用c+最小化插件的浏览器窗口+;,winapi,visual-c++,visual-studio-2008,plugins,Winapi,Visual C++,Visual Studio 2008,Plugins,我有一个主要用于屏幕捕获的插件。它与浏览器一起加载。现在,单击按钮时,会出现一个小窗口,通知屏幕捕获已开始 在这里,我还希望浏览器最小化 我尝试了以下方法: 方法1. HWND parentWH = ::GetAncestor(this->pluginWindowHandle,GA_ROOTOWNER); ::ShowWindow(parentWH,SW_MINIMIZE); HWND parentWH=::FindWindow(L“Chrome_WidgetWin_1”,L“test-

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

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

我尝试了以下方法:

方法1.

HWND parentWH = ::GetAncestor(this->pluginWindowHandle,GA_ROOTOWNER);
::ShowWindow(parentWH,SW_MINIMIZE);
HWND parentWH=::FindWindow(L“Chrome_WidgetWin_1”,L“test-SC1-googlechrome”)

它起作用了!但问题是,我应该如何动态地获取FindWindow的参数。 例如,参数1是“WindowClassName”,参数2是“WindowTitle”。对于不同的浏览器

方法2.

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

不行

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

  • 传递将插件嵌入到插件的页面的document.title(JavaScript)

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

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


  • 要最小化包含用于启动屏幕捕获的插件的浏览器窗口,我建议执行以下步骤:

  • 传递将插件嵌入到插件的页面的document.title(JavaScript)

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

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


  • 以下是我在最小化浏览器窗口方面所做的工作

    方法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()函数直接获得浏览器窗口句柄。

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

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

    要查看方法2是否有效,启动Visual Studio附带的Spy++并查看
    this->pluginWindowHandle
    是否作为
    Chrome\u WidgetWin\u 1
    窗口的祖先。若要查看方法2是否有效,请启动Visual Studio附带的Spy++并查看
    this->pluginWindowHandle
    是否作为
    Chrome\u WidgetWin\u 1
    窗口的祖先。