2013-07-05 53 views
1

我有一个主要用于屏幕截图的插件。它随浏览器一起加载。现在点击按钮出现一个小窗口,通知屏幕截图已经开始。尽量减少使用C++的插件的浏览器窗口

在这里,我也希望浏览器得到最小化。

我尝试以下方法:

接近1

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

::ShowWindow(parentWH,SW_MINIMIZE); 

它的工作原理!但问题是,我应该如何动态地使用FindWindow的参数。 like,parameter1是'WindowClassName',2是'WindowTitle'。为不同的浏览器

方法2.

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

不起作用!

+0

要查看方法2将工作,启动间谍++与Visual Studio和看'这个 - > pluginWindowHandle'具有与'Chrome_WidgetWin_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()函数获取浏览器窗口句柄。

1

要最小化浏览器窗口中包含你用来启动一个屏幕捕获插件,我建议以下步骤:

  1. 通行证,嵌入网页的document.title时(JavaScript的)你的插件插件。

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

  3. 使用EnumWindows功能通过您的系统上的Windows枚举。在这里,你将传递一个指向上面回调函数的指针。 EnumWindows将运行,直到回调函数返回FALSE,或者它已经通过所有窗口枚举。