如何使用C ++和WinAPI检查是否有任何Web浏览器在运行?

时间:2013-11-22 09:16:12

标签: c++ internet-explorer google-chrome winapi firefox

我的应用程序必须做一些事情,但首先必须知道计算机上的所有Web浏览器都已关闭(未运行)。

如何确定它们当前是否正在运行?我想所有这些都没有通用的方法,但是所有版本的网络浏览器的解决方案都可以:< / p>

  1. Internet Explorer
  2. Mozilla Firefox
  3. Google Chrome
  4. 当然,在检查之后,我可以显示MessageBox “请在继续之前关闭所有网络浏览器”,我不必通过程序关闭它们(我不知道)我想)。

    我更喜欢不使用任何额外库等的解决方案,只需要一个基本的WinAPI / C ++ 如果就可以。

1 个答案:

答案 0 :(得分:5)

似乎很明显的可能性是使用FindWindow来查找是否有任何打开(主)窗口。对于Chrome,您似乎需要一类“Chrome_WidgetWin_1”,而FireFox则需要一类“MozillaWindowClass”和IE“IEFrame”。

#include <iostream>
#include <windows.h>
#include <vector>
#include <string>

int main(){
    std::vector<std::string> names{
        "MozillaWindowClass", 
        "IEFrame",  
        "Chrome_WidgetWin_1" 
    };

    for (auto const &name : names) {
        if (NULL != FindWindow(name.c_str(), NULL)) {
            std::cout << "Please close all browsers to continue\n";
            break;
        }
    }
}

这比搜索可执行文件的名称更可靠 - 用户重命名可执行文件要比更改它创建的主窗口类更容易。

理论上,这个(可能几乎任何类似的)对竞争条件是开放的:如果用户在您检查了该浏览器后立即启动了浏览器,则可能认为当实际存在浏览器时没有运行浏览器