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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2012, 09:28   #1
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию как отобразить окно копии.

Пишу программу, должна быть запущенна только одна копия её на компе. в программе 1 форма.
вот не понял где ошибка для отображения уже запущенной копии.
хочу сделать что бы при попытке запуска второй копии отображалась уже запущенная программа.
Код:
program asu_arb;

uses
  Forms,
  Windows,
  SysUtils,
  tlhelp32,
  MainForm in 'MainForm.pas' {Form1};

{$R *.res}
var
  hSnap,hand:THandle;
  pe:TProcessEntry32;
  pid: DWORD;
  Ini_I_O:TextFile;
  prov:byte;
begin
  prov:=0;
  pe.dwSize:=SizeOf(pe);
  hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  If Process32First(hSnap,pe) then
    While Process32Next(hSnap,pe) do
      if ExtractFileName(pe.szExeFile)='asu_arb.exe' then //нашли имя программы, но можно и по названию окна искать.
      begin
        prov:=prov+1;//наш запуск создаёт вторую копию и это учитываем.
        hand:=OpenProcess(PROCESS_QUERY_INFORMATION,false,pe.th32ProcessID);
        ShowWindow(hand,SW_SHOWNORMAL); //пытаюсь отобразить и свою и первую программу
        if prov>1 then //нашли более 1 программы себя и уже запущенную.
        begin //сохраняем лог запусков
          AssignFile(Ini_I_O,'log.txt');
          if FileExists('log.txt') then
          begin
            Append(Ini_I_O);
            Writeln(Ini_I_O, DateTimeToStr(Now) +' ' + 'попытка запустить вторую копию проги '+IntToStr(pe.th32ProcessID));
          end
          else
          begin
            rewrite(Ini_I_O);
            Writeln(Ini_I_O, DateTimeToStr(Now) +' ' + 'попытка запустить вторую копию проги '+IntToStr(pe.th32ProcessID));
          end;
          CloseFile(Ini_I_O);
          Exit;
        end;
      end;

  Application.Initialize;
  Application.Title := 'Арбаны, второй подъем';
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как разрешить запуск второй копии чужого приложения s1s1s1 Общие вопросы Delphi 4 02.11.2011 01:47
Как на копии страницы залить графические элементы? sunnyws Microsoft Office Excel 4 09.06.2011 20:58
как отобразить на диаграмме время GUSEVV Microsoft Office Access 2 26.08.2009 12:16
Как в excel отобразить формулу как текст ? mihhon Microsoft Office Excel 3 03.06.2009 22:05
Как в Adobe Reader 8 отключить сохранение копии? Mikalai Софт 0 14.03.2008 14:48