Здравствуйте уважаемые жители королевства!
Прошу помощи в решении следующего вопроса, так как поиск по сайту,
к сожалению, успехов не принес:
Есть программа которая умеет сворачиваться в трей.
Требуется, чтобы при запуске копии программы, копия не запускалась,
а разворачивалась свернутая в трей.
С запретом запуска копии проблем нет.
Проблема в том, что, форма программы не разворачивается, а только появляется на таскбаре.
Использую следующий код:
procedure TForm1.FormCreate(Sender: TObject);
var
Wnd,ggg : hWnd; buff : ARRAY[0.. 127] OF Char;
begin
Form1.KeyPreview := True;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO
begin
IF (Wnd <> Application.Handle) AND (GetWindow(Wnd, gw_Owner) = 0) THEN
begin GetWindowText (Wnd, buff, sizeof (buff ));
IF StrPas (buff) = Application.Title THEN
begin
SetForegroundWindow(wnd);
ShowWindow(wnd,SW_SHOWNORMAL);
Halt;
end;
end;
Wnd := GetWindow (Wnd, gw_hWndNext);
end;
SetWndPos( Self );
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
function TryCreateMutex: Boolean;
var
Mutex: THandle;
begin
Result:=true;
Mutex:=CreateMutex(nil,true,'любой текст');
if GetLastError = ERROR_ALREADY_EXISTS then Result:=false;
ReleaseMutex(Mutex);
end;
begin
if not TryCreateMutex then begin
PrevWin:=FindWindow('TForm1','Form1');
SendMessage(PrevWin,UM_MYMESSSAGE,0,0);
end
else begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
Что ж так муторно сделано? Проще через Mutex и посылку определённого заранее сообщения WM_User + <сколько-то> окну свёрнутого в трей приложения. Это окно сообщение ловит и делает Application.Restore; и SetForegroundWindow. По крайней мере я так делал и всё работает.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.