При работе с приложениями, написанными на языке Object Pascal и использующими среду разработки Delphi, иногда возникает необходимость проверки состояния системных процессов, в том числе и браузеров. В данном случае, перед нами стоит задача определить, запущены ли браузеры Mozilla Firefox, Apple Safari и Google Chrome, чтобы затем изменить их домашнюю страницу, модифицировав конфигурационные файлы.
Использование API для проверки процессов
Для решения данной задачи можно использовать функцию CreateToolhelp32Snapshot, которая позволяет получить снимок всех процессов, запущенных в системе. Пример кода на Object Pascal:
uses
Windows,
tlhelp32,
SysUtils;
function IsProcessRunning(const ListProcess: Array of string): boolean;
var
hSnapshot : THandle;
lppe : TProcessEntry32;
I : Integer;
begin
result:=false;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnapshot <> INVALID_HANDLE_VALUE then
try
lppe.dwSize := SizeOf(lppe);
if Process32First(hSnapshot, lppe) then
repeat
for I := Low(ListProcess) to High(ListProcess) do
if SameText(lppe.szExeFile, ListProcess[i]) then
Exit(True);
until not Process32Next(hSnapshot, lppe);
finally
CloseHandle(hSnapshot);
end;
end;
Для более надежного определения запущенности браузера можно использовать функцию FindWindowEx, которая позволяет найти окно по классу. Пример кода:
function IsWebBrowserRunning(const ClassName, ExeName :string) : Boolean;
var
hWindow : THandle;
dwProcessId: DWORD;
begin
result:=False;
hWindow:= FindWindowEx(0, 0, PChar(ClassName), nil);
if hWindow<>0 then
begin
dwProcessId:=0;
GetWindowThreadProcessId(hWindow, dwProcessId);
if dwProcessId>0 then
exit(Sametext(GetProcessName(dwProcessId),ExeName));
end;
end;
Для каждого браузера необходимо знать соответствующий класс окна. Например, для Firefox это MozillaWindowClass, для Safari - {1C03B488-D53B-4a81-97F8-754559640193}, а для Chrome - Chrome_WidgetWin_1.
Примечание о безопасности
Изменение домашней страницы браузера без разрешения пользователя считается плохой практикой и может быть воспринято как вредоносное действие. В комментариях к вопросу пользователи выразили свое недовольство по поводу такой практики.
Выводы
Для проверки запущенности браузеров в Windows можно использовать функции CreateToolhelp32Snapshot для определения процессов или FindWindowEx и GetWindowThreadProcessId для определения окон и их процессов. Однако, необходимо помнить о том, что изменение конфигурации браузера без согласия пользователя может быть расценено как нежелательное поведение и вызвать подозрения в вирусной активности.
Проверка состояния браузеров в Windows для изменения их домашней страницы с использованием API и функций для работы с процессами и окнами.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS