Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Открыть ParamStr(1) и не загрузить программу заново.   Найти похожие ветки 

 
Adil ©   (2006-07-01 00:08) [0]

Как это делается?? Мне надо делать так чтобы когда Открывал файл(файл открывается через мою прогу) он не загружал прогу если оно уже есть, а открывал его в сушествующем окне проги.

Многие способы придумал от WinAPI до COM. На некоторых(а может у всех) это через DDE делали.

Вообшим как это законно делат??


 
koha   (2006-07-01 06:14) [1]

В вайле проекте .dpr может быть стоит использовать функцию FindWindow("Class окна","Caption окна") для поиска уже запущенной копии своей проги. Вот например сдесь прога будет запускаться находить свою копию уже запущенной и вырубаться, а ты в своем случае можешь послать сообщение своей проге.

program New;
uses
 Forms,SysUtils,Windows,Classes,
 Unit1 in "Unit1.pas" {Fm};
Var
 hw: HWND;
{$R *.res}

begin  

 if FindWindow("TFm","Fm") <> 0 then Application.Terminate;

 Application.Initialize;
 Application.CreateForm(TFm, Fm);
 Application.Run;
end.


 
Юрий Зотов ©   (2006-07-01 12:33) [2]

> koha   (01.07.06 06:14) [1]

Это не самый лучший способ. Многие программы довольно долго инициализируются ДО создания своего первого окна. Если в это время запустить вторую копию, то FindWindow, естественно, ничего не найдет и она спокойно запустится. А также запустятся третья копия, четвертая и т.д. - сколько угодно, пока одна из копий не создаст окно.

Давайте отвлечемся от окон и посмотрим на саму идею. Она состоит в том, что первая копия создает в системе некий уникальный объект, а другие копии проверяют существование этого объекта.

В приведенном Вами примере таким объектом выбрано окно. Но кто сказал, что им может быть только окно? Никто. Им может служить любой объект, к которому система разрешает глобальный доступ. Например, memory mapped file, мьютекс, семафор и пр.

Преимущество такого решения состоит в том, что если программа требует длительной инициализации, то создавать окно ПЕРЕД ней - плохо (получится как бы "зависшее" окно и чтобы избежать эффекта "зависания", придется мудрить с потоками, что усложняет программу). А вот создать перед этой инициализацией не окно, а НЕВИДИМЫЙ объект - это никто мешает и это никому не мешает. И программа практически не усложняется.

> Adil ©   (01.07.06 00:08)

Здесь пример готового решения:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=904


 
Desdechado ©   (2006-07-01 13:32) [3]

а что значит "Открыть ParamStr(1)" ?



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
3-1147626786
Alpine
2006-05-14 21:13
2006.07.16
Вопрос по настройке клиента в IB


15-1149861184
Ihor Osov'yak
2006-06-09 17:53
2006.07.16
эт, о перспективах...


15-1150125355
Гарри Поттер
2006-06-12 19:15
2006.07.16
Как прочитать покоцаный СД?


15-1150396039
apavl
2006-06-15 22:27
2006.07.16
SMTP STARTTLS


2-1151128446
JEK_DELPHI
2006-06-24 09:54
2006.07.16
Я не могу устранить глюк при запуску печати! ПОМОГИТЕ