Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 22:42   #1
Garacio_cain
Пользователь
 
Аватар для Garacio_cain
 
Регистрация: 05.01.2008
Сообщений: 85
По умолчанию Обновление копии программы в оперативной памяти.

Есть программа. Она запущена, при запуске второй копии она (вторая копия) убивает первую и продолжает работу. Проверяю запущенную программу по мьютексу а вот убить первую что то не получилось.

Код:
hMutex := CreateMutex(0, true , 'Radionic');
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    FullProgPath := PChar(Application.ExeName);
    WinExec(FullProgPath, SW_SHOW); // Or better use the CreateProcess function
    Application.Terminate; // or: Close;
  end;
Garacio_cain вне форума Ответить с цитированием
Старый 16.05.2009, 23:18   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Гм... а просто найти окно первой копии и послать к примеру WM_QUIT или что еще. Не ужели это так сложно ?
BOBAH13 вне форума Ответить с цитированием
Старый 16.05.2009, 23:49   #3
Garacio_cain
Пользователь
 
Аватар для Garacio_cain
 
Регистрация: 05.01.2008
Сообщений: 85
По умолчанию

Логично ! Как то не додумался до этого!
Garacio_cain вне форума Ответить с цитированием
Старый 17.05.2009, 00:12   #4
Garacio_cain
Пользователь
 
Аватар для Garacio_cain
 
Регистрация: 05.01.2008
Сообщений: 85
По умолчанию

А вот нифига не срабатывает. Сделал так, программа при запуске в реестре считываешь хеш МД5 времени и даты запуска предыдущей копии программы и генерирует новый хеш для себя, который сохраняет в реестре и по старому хешу передает PostMessage(FindWindow(nil, PChar(last)), WM_QUIT, 0, 0); но почему то выгружается сама даже если она одна запущена.
Garacio_cain вне форума Ответить с цитированием
Старый 17.05.2009, 02:37   #5
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Попробуйте так:
Код:
Procedure Only;
Var
HMutex: Integer;
H: THandle;
Begin
HMutex:=CreateMutex(Nil, True, 'Radionic');
If GetLastError <> 0 Then
Begin
Form1.Caption:='Form';
H:=FindWindow(Nil,'Form1');
If H=0 Then
Exit;
PostMessage(H, WM_CLOSE, 0, 0);
End;
Form1.Caption:='Form1';
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Only;
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 17.05.2009, 10:29   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Для начала... Вызывайте лучше SendMessage вместо PostMessage, таким образом Вы будите дожидаться обработки сообщения. Второе, это то что сделайте на подобии этого
Код:
var Wnd: HWND;
begin
  Wnd := FindWindowW(PWChar('MyClass'), NIL);
  if (Wnd <> MyWindowHandle) then
     SendMessage(Wnd, WM_QUIT, 0, 0);
end;
Ну или вообще лучше свое сообщение создать,
Код:
SendMessage(Wnd, RegisterWindowMessageW('WM_MYMESSAGE'), 0, 0);
И в своей же программе, при получении этого сообщения вызывать типа
Код:
Application.Terminate;
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск программы из оперативной памяти? G&R Win Api 2 22.12.2008 21:26
Восстановить из оперативной памяти Problemaumenya Помощь студентам 1 08.05.2008 23:01
Текстирование оперативной памяти arxipmen Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 23.11.2007 14:30
Кол-во оперативной памяти Квэнди Win Api 2 25.07.2007 13:27
выделение оперативной памяти Alar Общие вопросы Delphi 0 29.10.2006 21:56