Добрый день.

Вопрос, оговоренный кучу раз... но вот столкнулся с такой проблемой. Процедура проверки запуска второй копии приложения.
program Project1;
uses
Windows,
Forms,
Dialogs,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
var
HM: THandle = 0;
PrevInstWnd: HWND;
function CheckForInstance: Boolean;
var
HW: THandle;
begin
HM := OpenMutex(MUTEX_ALL_ACCESS, False, 'MyMutex');
Result := True;
if HM <> 0 then begin
Result := False;
HM := 0;
end else HM := CreateMutex(nil, False, 'MyMutex');
end;
begin
if not CheckForInstance then begin
PrevInstWnd := FindWindow('TForm1', 'Form1');
ShowWindow(PrevInstWnd, SW_RESTORE);
SetForegroundWindow(PrevInstWnd);
Halt;
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
if HM <> 0 then ReleaseMutex(HM);
end.
Минимизирую первую копию. Пытаюсь запустить вторую. Все замечательно работает. Вторая копия не появляется. Но после Restore первой копии, не могу ее (первую копию) минимизировать кнопкой формы:xz:. Вставил в форму такой обработчик.
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMGetSysCommand(var Message :TMessage); message WM_SYSCOMMAND;
public
{ Public declarations }
end;
procedure TForm1.WMGetSysCommand(var Message : TMessage) ;
begin
if Message.wParam = SC_MINIMIZE then begin
ShowWindow(Application.Handle, SW_MINIMIZE);
ShowMessage('!');
end else inherited;
end;
MessageDlg показывает, но форма не минимизируется. Как быть

?
Заранее спасибо за ответы.