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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2012, 22:49   #1
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 661
По умолчанию Вторая копия программы

Запрещаю запуск второй копии программы через мьютекс.
Код:
 Var HM :THandle;
function Check: boolean;
begin
  HM:=OpenMutex(MUTEX_ALL_ACCESS, false, 'form');
  Result:=(HM<>0);
if HM=0 then begin
HM:=CreateMutex(nil, false, 'form');


end
else begin
Showmessage(');
  
end;

Подскажите как можно при проверки мьютекса ,в данном случае Showmessage('); , заменить на процедуру из программы, например
"WindowsState=wsMaximized"
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 25.02.2012, 23:24   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

с головой:
Код:
function FirstHinstanceRunning(RunMode: Integer = 0): boolean;
const
  MemFileSize = 127;
var
  MemHnd: HWND;
  MemFileName: string;
  lpBaseAddress: ^HWND;
  FirstAppHandle: HWND;
begin
  Result := False;
  MemFileName := Application.ExeName;
  case RunMode of
    0:
      MemFileName := AnsiReplaceText(MemFileName, '\', '/');
    1:
      MemFileName := ExtractFileName(MemFileName);
  else
    Exit;
  end;
  MemHnd := CreateFileMapping(HWND($FFFFFFFF), nil,
    PAGE_READWRITE, 0, MemFileSize, PChar(MemFileName));
  if GetLastError <> ERROR_ALREADY_EXISTS then
  begin
    if MemHnd <> 0 then
    begin
      lpBaseAddress := MapViewOfFile(MemHnd, FILE_MAP_WRITE, 0, 0, 0);
      if lpBaseAddress <> nil then
        lpBaseAddress^ := Application.Handle;
    end;
  end
  else
  begin
    Result := True;
    if MemHnd <> 0 then
    begin
      lpBaseAddress := MapViewOfFile(MemHnd, FILE_MAP_READ, 0, 0, 0);
      if lpBaseAddress <> nil then
      begin
        FirstAppHandle := lpBaseAddress^;
        ShowWindow(FirstAppHandle, SW_RESTORE);
        SetForegroundWindow(FirstAppHandle);
      end;
    end;
  end;
  if lpBaseAddress <> nil then
    UnMapViewOfFile(lpBaseAddress);
end;
Код:
  //Не разрешён запуск более 1 копии HLR
  if not AllowedMultiRUN then
  begin
    if FirstHinstanceRunning(1) then
    begin
      Exit;
    end;
  end;
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копия программы на другой компьютер Ayubkhon Безопасность, Шифрование 5 15.06.2010 14:43
Вторая форма brutos Общие вопросы Delphi 3 20.05.2009 21:11
Точная копия программы на любом языке westcoastkilla Фриланс 2 20.12.2008 17:59
Точная копия программы на любом языке westcoastkilla Помощь студентам 5 20.12.2008 09:23
Вторая половинка RealSHELS Свободное общение 22 02.08.2008 11:04