windows - uso - ver comandos
¿Desencadenando el botón de la barra de tareas de un archivo por lotes? (1)
Es muy fácil hacerlo usando un simple * .exe externo. Simplemente tiene que llamar a la función FlashWindowEx
de la API de Windows.
Esta es una aplicación de consola Delphi de muestra:
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.
Simplemente llámalo como
flashwnd
para flashear la ventana de la consola actual diez veces. Llamada
flashwnd 27
para flashear la ventana 27 veces.
¿Es posible desencadenar "el botón de la barra de tareas X de Windows o hasta que la ventana llegue al primer plano" de un archivo por lotes? Estoy tratando de llamar la atención del usuario a un script de larga duración al finalizar.
El uso de un programa externo para activar el parpadeo está bien, siempre y cuando no requiera una instalación (es decir, el archivo ejecutable se puede incluir en mis scripts).
Actualizar
Esto es lo que terminé con (un puerto minimalista del código Delphi de Andreas). Lo he compilado bajo MinGW y parece depender solo de KERNEL32.DLL y USER32.DLL, por lo que debería ser altamente portátil.
Parpadea tres veces, luego permanece resaltado hasta que se pone en primer plano.
#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);
}