我的应用程序必须做一些事情,但首先必须知道计算机上的所有Web浏览器都已关闭(未运行)。
如何确定它们当前是否正在运行?我想所有这些都没有通用的方法,但是所有版本的网络浏览器的解决方案都可以:< / p>
当然,在检查之后,我可以显示MessageBox
“请在继续之前关闭所有网络浏览器”,我不必通过程序关闭它们(我不知道)我想)。
我更喜欢不使用任何额外库等的解决方案,只需要一个基本的WinAPI / C ++ 如果就可以。
答案 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;
}
}
}
这比搜索可执行文件的名称更可靠 - 用户重命名可执行文件要比更改它创建的主窗口类更容易。
理论上,这个(可能几乎任何类似的)对竞争条件是开放的:如果用户在您检查了该浏览器后立即启动了浏览器,则可能认为当实际存在浏览器时没有运行浏览器