Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];
ВнизПередать параметр первой копии программы Найти похожие ветки
← →
tsarevep (2002-07-10 02:41) [0]Здравствуйте всем!
Ребят поможите, а то зациклился совсем.
Вообщем програма SDI интерфейс, с возможностью открытия нескольких документов. Повторный экземпляр программы недопстим и не должен быть нужен. Когда с програмной строки запускаю на открытие документ, то все прекрасно открывается, но если программа уже запущена, естественно ParamStr идёт для второй копии. И просто закрывается второй экземпляр.
Подскажите плиз как передать этот параметр первой копии программы.
С уважением.
← →
tsarevep (2002-07-10 10:10) [1]Ну разве никто этим не занимался?
С уважением.
← →
Fiend (2002-07-10 10:13) [2]я делал так:
при загрузке экземпляра искал окно предидущего инстанса. Затем посылал ему по хэндлу сообщение с параметрами. Если нада могу вырезать текст
← →
tsarevep (2002-07-10 10:49) [3]Конечно б надо!
Спасибо заранее.
← →
Fiend (2002-07-10 10:57) [4]const WM_MESSAGETOSERVER = WM_USER+1;
type
TMainForm = class(TForm)
private
{ Private declarations }
procedure MESSAGETOSERVER(var Message: TMessage); message WM_MESSAGETOSERVER;
public
{ Public declarations }
end;
procedure TMainForm.MESSAGETOSERVER(var Message: TMessage);
begin
//Это обработчик пользовательского события
case Message.WParam of
1 : pmShutDownServerClick(nil);
2 : pmStopServerClick(nil);
3 : StartServer;
end;
end;
А это функция которая ищет окно прдидущего инстанса, если находит возвращает его хэндл, если нет то 0
function FindHwnd: hWnd;
VAR Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
Result:=0;
Wnd := MainForm.Handle;
WHILE Wnd <> 0 DO
BEGIN
{
← →
handra (2002-07-10 11:09) [5]Вот только параметры в виде строки с помощью SendMessage не передать, придется задуматься над использованием DDE.
← →
tsarevep (2002-07-10 12:56) [6]Огромное спасибо!
Но поиск окна по Application.Title не подходит, так как он постоянно изменяется. Да и просто лежит компонента на форме которая не даёт второй запуск. Но у нее есть событие OnAlreadyExist в котором и можно передать ParamStr только не доходит как. Вот нужно как то засунуть в эту процедуру что то вроде.
if параметр then
не знаю чего
else
halt;// тоже не обязательно сама убьёт
Ну а DDE может и не плохо было бы только у меня 8 книжек и только в двух написано про то как связать свою прогу через DDE c Exсel, а зачем мне Excel. В остальных вобще этот протокол упущен.
C уважением.
← →
I am (2002-07-11 02:26) [7]Я это делал через FileMapping. При запуске приложения оно проверяет наличие файла отображаемого в память. Если его нет значит оно его создает и пишет туда свой хэндл, а если есть, то считывает из него хэндл уже запущенного приложения и посылает ему свои параметры через WM_COPYDATA.
CreateFileMapping
MapViewOfFile
← →
Юрий Зотов (2002-07-11 02:32) [8]Практически готовое решение (и даже не одно) см. здесь:
http://www.delphikingdom.com/helloworld/samples_win.htm
← →
tsarevep (2002-07-11 08:20) [9]Приогромнейшее спасибо всем!
То Юрий Зотов © - Да не практически, а готовое, даже названия переменных с моими совпали и поэтому только {Copy - Paste).
Прогнал я ее по всем статьям. Единственная ошибка почему то если сделать Edit With MYPROGRAMM больше 34 файлов Windows говорит "Отказано в доступе указанному пути или файлу". Хотя редко у кого ума хватает сразу 35 файлов отправить в какую нибудь прогу, но все равно неприятно. Если вам не трудно напишите почему это происходит.
Особая вам благодарность.
С уважением.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c