Главная страница
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.025 c
6-1141748735
AllBrain
2006-03-07 19:25
2006.07.16
Пиринговые сети -> P2P Help !!!


2-1151591357
Id
2006-06-29 18:29
2006.07.16
Номер в имени компонента


1-1149671921
Ul
2006-06-07 13:18
2006.07.16
Excel и Delphi


2-1151503487
novill
2006-06-28 18:04
2006.07.16
Почему из сервиса(службы) с админскими правами не могу выключить


6-1141723811
vcat
2006-03-07 12:30
2006.07.16
IDSMTP