Главная страница
    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.45 MB
Время: 0.012 c
15-1150208840
SergProger
2006-06-13 18:27
2006.07.16
Строка в PHP


2-1151645400
Тоха
2006-06-30 09:30
2006.07.16
Как переименовать директорию?


2-1151651681
FFFF
2006-06-30 11:14
2006.07.16
Как открыть документ Word


6-1142177492
JaDS
2006-03-12 18:31
2006.07.16
Открыть чужой сокет


15-1149946886
Ламот
2006-06-10 17:41
2006.07.16
Диск D: был да сплыл...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский