Hola Nelson.
Si yo había probado chequear el estado mediante un timer. Pero adolece del defecto que no funciona si existe alguna otra ventana modal abierta vg.: ShowMessage, MessageBox, ..., u otro form modal, ya que en ese caso WIN+D minimizará todo.
Agrego un poco de codigo a tu ejemplo para mostrar a lo que me refiero:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
const
WM_AFTER_SHOW = WM_USER + 301;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
private
procedure WmAfterShow(var Msg: TMessage); message WM_AFTER_SHOW;
public
end;
var
Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FormStyle := fsNormal;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not Application.Active then
Application.Restore;
if WindowState = wsMinimized then
WindowState := wsNormal;
if not Visible then
Visible := True;
end;
procedure TForm1.WmAfterShow(var Msg: TMessage);
begin
ShowMessage('Presiona WIN + D ...')
end;
procedure TForm1.FormShow(Sender: TObject);
begin
PostMessage(Self.Handle, WM_AFTER_SHOW,0,0);
end;
end.
Yo creo que
shoulder tendría que dejar bién claro cuales son los problemas intrínsecos a su aplicación y cuales no. Si no va a terminar escuchando en el teléfono cosas como: "¡ Venga urgente que el programa desapareció misteriosamente !" y resultó ser que el protector de pantalla se había activado...
Si sus empleados son inoperantes, que que hagan un curso del S.O. que estan empleando. Y si no, que vaya, solucione el problema y lo cobre como corresponde...
Saludos