- Код: Выделить всё
- unit AppExistSpy;
 interface
 uses
 Windows;
 function SpyEnable(Handle: THandle): Boolean;
 implementation
 const
 WM_EXISTS = 1024 + 1;
 var
 Mutex: THandle;
 OldWndProc: WndProc;
 function NewWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; StdCall;
 begin
 if msg = WM_EXISTS then
 begin
 ShowWindow(hWnd, SW_RESTORE);
 SetActiveWindow(HWND);
 end
 else
 result := CallWindowProc(OldWndProc, hWnd, Msg, wParam, lParam);
 end;
 function SpyEnable(Handle: THandle): boolean;
 begin
 result := false;
 Mutex := CreateMutex(nil, false, 'MyMutex');
 if GetLastError = ERROR_ALREADY_EXISTS then SendMessage(Handle, WM_EXISTS, 0, 0)
 else
 begin
 OldWndProc := WndProc(SetWindowLong(Handle, GWL_WNDPROC, LongInt(@NewWndProc)));
 result := true;
 end;
 end;
 end.
Всё казалось бы хорошо, но окно первой запущенной копии не разворачивается. Слежение с помошью мютексов работает, вторую копию запустить не получается, а вот нужное сообщение в первую копию никак не приходит. Помогите плиз, я в апи новичок. знаний пока не очень много.




