Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
19-03-2006 14:33
Если с помошью мьютексов, то
Const MutexName='YourAppMutex';
var Mutex:integer;
Han:integer;
P:pchar;
begin
Mutex:=OpenMutex(MUTEX_ALL_ACCESS,false,MutexName);
if Mutex<>0 then begin
CloseHandle(Mutex);
GetMem(P,1024);
Han:=FindWindow('YourAppClass',nil);
while(Han<>0)and(lstrcmp(P,'TApplication')<>0)do begin
Han:=GetWindow(Han,GW_HWNDNEXT);
GetClassName(Han,P,1024);
end;
FreeMem(P,1024);
if Han<>0 then begin
if IsIconic(Han) then ShowWindow(Han,SW_RESTORE);
SetForegroundWindow(Han);
end;
end else begin
Mutex:=CreateMutex(nil,true,MutexName);
Application.Initialize;
Application.Title := 'Моя супер прога';
Application.CreateForm(TSubClient, SubClient);
Application.Run;
CloseHandle(Mutex);
end;
end.
Тогда дай форме нестандартное имя, при запуске программы ищи через FindWindow окно с таким именем класса, если оно есть, не запускайся.
Вряд ли имелось в виду запрет повторного запуска приложения, но если да - то это обычно делается с помощью мьютексов или отображаемых файлов. Уточните, что автор вопроса имел в виду, если это, то напишу подробнее.
"Нельзя было открыть" - а кто открывает форму?
Программа же и открывает.
Ну, делай вместо "Form123.Show" так: "MyShow(Form123);", где
procedure MyShow(F:TForm);
begin
if not Form1.Visible then F.Show;
end;
Или вместо Show вызывайте ShowModal, но тогда следующая за этим команда не выполнится до закрытия окна.
В общем, очень странный вопрос...
Или нужно, чтобы программа не запускалась дважды?
Тогда дай форме нестандартное имя, при запуске программы ищи через FindWindow окно с таким именем класса, если оно есть, не запускайся.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.