- Код: Выделить всё
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.
Всё казалось бы хорошо, но окно первой запущенной копии не разворачивается. Слежение с помошью мютексов работает, вторую копию запустить не получается, а вот нужное сообщение в первую копию никак не приходит. Помогите плиз, я в апи новичок. знаний пока не очень много.