![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
В программе используется несколько справок .chm
Я хочу узнать Handle окна справки, открываемой пользователем из моего приложения для того чтобы при повторном запросе пользователя, не открывать ещё одно окно, а показать уже открытое (естественно в том случае, если оно уже было открыто и не было после этого закрыто). Как я понял, надо: 1. С помощью ShellExecuteEx узнать дескриптор запущенного процесса. 2. Затем, при повторном запуске проверять, имеется ли процесс с запущенным ранее дескриптором. Может есть у кого-нибудь опыт решения подобной задачи? |
|
#2
|
|||
|
|||
|
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
RunFileName: PChar;
i: word;
H: hWnd;
begin
H:= FindWindow(ИМЯ ГЛАВНОЙ ФОРМЫ ПРИЛОЖЕНИЯ , = CAPTION ГЛАВНОЙ ФОРМЫ ПРИЛОЖЕНИЯ);
if H=0 then
begin
RunFileName:=PChar(ПОЛНЫЙ ПУТЬ К ФАЙЛУ, МОЖНО ЧЕРЕЗ OpenDialog);
i:=WinExec(RunFileName,SW_RESTORE);
Case i of
0: ShowMessage('Не хватает памяти или ресурсов');
ERROR_BAD_FORMAT: ShowMessage('Файл приложения не совместим с данной версией ОС либо поврежден');
ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND: ShowMessage('Файл приложения не найден');
end; // case
Application.Minimize;// Свернёмся, если запустили удачно
end
else ShowMessage('Приложение уже запущено!');
end; |