Текущий архив: 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.45 MB
Время: 0.012 c