2010-08-24 1 views
18

Возможно ли запустить Windows «вспышку кнопки панели задач X раз или до тех пор, пока окно не выйдет на передний план» из командного файла? Я пытаюсь привлечь внимание пользователя к длительному сценарию по завершении.Запуск кнопки панели задач вспышки из пакетного файла?

Использование внешней программы для запуска мигания в порядке, если оно не требует установки (то есть исполняемый файл может быть связан с моими скриптами).

Update

Вот что я закончил с (минималистском порт Andreas' 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); 
} 
+0

Такой интересный вопрос, и только три вида за 45 минут ?! –

+0

... и всего 15 просмотров за 24 часа. Я не понимаю ... –

+0

Да, 'GetConsoleWindow' намного лучше, чем' FindWindow' и уникальный заголовок. Не знаю, почему я этого не делал ... –

ответ

5

Это очень просто сделать, используя очень простой внешний * .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 раз.

+0

Я подозревал, что это так, но я безнадежен в Windows API! Я посмотрю, смогу ли я это сделать. –

+0

Наконец-то он работал в MinGW (поскольку у меня нет компилятора Delphi). Благодаря! –

+0

привет, Бен, у вас есть скомпилированная версия этой утилиты? заранее спасибо – 2011-12-22 14:56:09