Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вторая копия программы ! [D7, NT4, Win2k, WinXP]


Страницы:   1 2 3 4

Конопелька ©   (2005-12-07 00:12:00) 

Здравтвуйте !
Подскажите пожалуйста исключение варианта запуска второй копии программы !! и что б при повторном запуске программы открывалось уже запущеное мое приложение ! у меня есть несколько примеров но они не совсем меня устраивают ! И подскажите обязательно ли для этого нужно знать название программы !и если его изменить получиться ли исключить запуск второй копии !
И тут же еще один вопрос к этой теме ! есть два приложение - первое простое с двумя кнопками (к примеру ) а второе имеет две формы ! и вот нужно что б по нажатию той или иной кнопки открывалось то или иное окно второй программы (уже запущеной) !
Заранее огромное спасибо за помощь ! ))


Alexander Panov   (2005-12-07 13:46:00) [61]

Удалено модератором


gdaujk   (2005-12-07 13:15:00) [62]

Удалено модератором


Alexander Panov   (2005-12-07 12:17:00) [63]


> PS: сабж был уже много раз. Можно было и поискать...


Что ж ты сам не поискал правильныйответ?

Например, вот -
http://forum.sources.ru/index.php?showtopic=123826&view=showall


Alexander Panov   (2005-12-07 12:10:00) [64]


> gdaujk ©   (07.12.05 11:33) [8]


Приведенного кода недостаточно для правильного восстановления приложения.


> PS: сабж был уже много раз. Можно было и поискать...


Поэтому высказывание мимо кассы.


gdaujk   (2005-12-07 11:33:00) [65]

>Alexander Panov ©   (07.12.05 09:32) [6]
>Думаю, что как раз этот момент и будет самым сложным;)

 
  procedure ForceForegroundWindow(MainWnd: HWND);
 var
   fPID, cPID: DWORD;
 begin
   fPID := GetWindowThreadProcessId(GetForegroundWindow, nil);
   cPID := GetWindowThreadProcessId(MainWnd, nil);
   AttachThreadInput(fPID, cPID, True);
   ShowWindow(MainWnd, SW_SHOW);
   SetForegroundWindow(MainWnd);
   AttachThreadInput(fPID, cPID, False);
 end;


PS: сабж был уже много раз. Можно было и поискать...


Eraser   (2005-12-07 11:31:00) [66]


> Alexander Panov ©   (07.12.05 01:07) [4]

Ну эт почему же? :)
2-3 строки + обработка сообщения, imho.


Alexander Panov   (2005-12-07 09:32:00) [67]


> При получении показать себя пользователю.


Думаю, что как раз этот момент и будет самым сложным;)


gdaujk   (2005-12-07 09:12:00) [68]

Eraser ©   (07.12.05 00:35) [3]

Удобнее для пользователя будет програмное переключение на первый экземпляр:

var
 UniqueMes: Integer;
const
 UNIQUE_APP_STR = 'MyCoolProject';

...

 UniqueMes := RegisterWindowMessage(UNIQUE_APP_STR);
 hMutex := CreateMutex(nil, False, UNIQUE_APP_STR);
 if GetLastError = ERROR_ALREADY_EXISTS then
   begin
     PostMessage(HWND_BROADCAST, UniqueMes, 0, 0);
     Exit;
   end;

...


и после ловить сообщение с Msg = UniqueMes. При получении показать себя пользователю.


Alexander Panov   (2005-12-07 01:07:00) [69]


> легко реализуется через пользовательские сообщения.


Совсем даже не легко.


Eraser   (2005-12-07 00:35:00) [70]


> Конопелька   (07.12.05 00:26) [2]

В dpr файл проекта вставь перед Application.Initialize

   CreateMutex(nil, True, 'MyCoolProject');
   if GetLastError = ERROR_ALREADY_EXISTS then
   begin
     MessageBox(0, PChar('Config window already EXISTS!'), SApplicationName, MB_ICONERROR);
     Halt;
   end;


Конопелька   (2005-12-07 00:26:00) [71]

обьясни пожалуйста как это сделать через Мьютекс !? я с этим не знаком  ! и если можна то малеенький наглядный пример !!) ?


Eraser   (2005-12-07 00:21:00) [72]


> Конопелька   (07.12.05 00:12)


> Подскажите пожалуйста исключение варианта запуска второй
> копии программы

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

>  у меня есть несколько примеров но они не совсем меня устраивают

чем конкретно?

> обязательно ли для этого нужно знать название программы

не обязательно.

> и вот нужно что б по нажатию той или иной кнопки открывалось
> то или иное окно второй программы (уже запущеной)

легко реализуется через пользовательские сообщения.
см. FindWindow, Send/PostMessage.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо