Готовый скрипт Оповещение о капче со звуком

SARCAZM

Administrator
Команда форума
Автор: Krickt
Скрипт можно запустить на любом окне(теперь же можно добавлять пустые окна под подобные скрипты), после этого он будет искать диалог(капчу) на всех окнах.
Не запускается, если не найден файл звука.

Не могу сказать, что это супер полезный скрипт. Я его писал, т.к. надоело в адреналине настраивать событие, да и событие на капчу какое-то багнутое в адрике.

Настройки:
Код:
const
  // ключевые слова/фразы для обнаружения
  CaptchaTexts: array of string = ['Enter', 'Введите'];
  // проигрывать звук при обнаружении (true - да / false - нет)
  CaptchaSound = true;
  // название файла звука (в папке Sounds)
  CaptchaSoundName = 'hp.wav';
  // подсветить нужное окно на панели задач (true - да / false - нет)
  CaptchaFlashWindow = true;
  // переместить окно на передний план (true - да / false - нет)
  CaptchaSetForegroundWindow = false;

Код:
uses
  SysUtils;
 
function SetForegroundWindow(hwnd: integer):boolean; stdcall; external 'user32.dll';


const
  // ключевые слова/фразы для обнаружения
  CaptchaTexts: array of string = ['Enter', 'Введите'];
  // проигрывать звук при обнаружении (true - да / false - нет)
  CaptchaSound = true;
  // название файла звука (в папке Sounds)
  CaptchaSoundName = 'hp.wav';
  // подсветить нужное окно на панели задач (true - да / false - нет)
  CaptchaFlashWindow = true;
  // переместить окно на передний план (true - да / false - нет)
  CaptchaSetForegroundWindow = false;


procedure CaptchaThread(CaptchaTexts: array of string);
var
  EngineCustom: TL2Control;
  i, j: integer;
  Have: boolean;
  SoundPath: string;
begin
  SoundPath:= ExePath + 'Sounds\' + CaptchaSoundName;
  if (CaptchaSound) and (not FileExists(SoundPath)) then
  begin
    print('Файла звука не найден. Путь: ' + SoundPath);
    Script.Stop;
  end;

  while (true) do
  begin
    delay(100);
    for i:= 0 to 100 do
    begin
      EngineCustom:= GetControlByIndex(i);
      if (EngineCustom = nil) then
        break;
      if (EngineCustom.Status <> lsOnline) then
        continue;
        
      Have:= false;
      for j:= 0 to high(CaptchaTexts) do
        if (pos(CaptchaTexts[j], EngineCustom.DlgText) > 0) then
        begin
          Have:= true;
          break;
        end;
      if (Have) then
      begin
        if (CaptchaSound) then
          PlaySound(SoundPath, false);
        if (CaptchaFlashWindow) then
          EngineCustom.BlinkWindow(true);
        if (CaptchaSetForegroundWindow) then
          SetForegroundWindow(EngineCustom.GameWindow);
        delay(5000);
      end;
    end;
  end;
end;
 
begin
  Script.NewThread(@CaptchaThread(CaptchaTexts));
end.
 
Сверху