Запускать кнопку панели задач из пакетного файла?
Можно ли запустить Windows "вспыхнуть кнопку панели задач X раз или до тех пор, пока не появится окно" переднего плана "из командного файла? Я пытаюсь привлечь внимание пользователя к длительному script после завершения.
Использование внешней программы для запуска мигания в порядке, если она не требует установки (т.е. исполняемый файл может быть связан с моими скриптами).
Обновление
Вот что я в итоге получил (минималистский порт кода Андреаса Delphi). Я скомпилировал его под MinGW, он, похоже, зависит только от KERNEL32.DLL и USER32.DLL, поэтому он должен быть очень портативным.
Мигает три раза, затем остается подсвеченным до тех пор, пока не появится на переднем плане.
#define WINVER 0x501
#define _WIN32_WINNT 0x501
#include <windows.h>
void main(int argc, char **argv) {
FLASHWINFO info = { sizeof(info), GetConsoleWindow(), FLASHW_TIMERNOFG | FLASHW_TRAY, 3, 0 };
FlashWindowEx(&info);
}
Ответы
Ответ 1
Это очень просто сделать, используя очень простой внешний *.exe. Он просто должен вызвать функцию FlashWindowEx
для Windows API.
Это пример приложения консоли Delphi:
program flashwnd;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var
OldTitle, UniqueTitle: string;
h: HWND;
c: cardinal;
fwi: TFlashWInfo;
begin
try
h := GetConsoleWindow();
c := 10;
if ParamCount = 1 then
c := StrToInt(ParamStr(1));
FillChar(fwi, sizeof(fwi), 0);
fwi.cbSize := sizeof(fwi);
fwi.hwnd := h;
fwi.dwFlags := FLASHW_ALL;
fwi.uCount := c;
fwi.dwTimeout := 0;
FlashWindowEx(fwi);
except
on E: Exception do
Writeln(E.ClassName + ': ' + E.Message);
end;
end.
Просто назовите его
flashwnd
чтобы развернуть текущее окно консоли десять раз. Вызов
flashwnd 27
чтобы развернуть окно 27 раз.