Как моя программа может сказать, работает ли Delphi?

Я делаю это так:

<% flash.each do |key, value| %>
  <%= content_tag :div, value, class: "flash #{key}" %>
<% end %>
8
задан Mason Wheeler 28 May 2009 в 17:10
поделиться

3 ответа

Здесь есть 2 разные идеи :
- Delphi запущена и работает
- Приложение работает под отладчиком

. Обычный способ проверить, работает ли Delphi , - это проверить наличие известных IDE Windows с определенным именем класса, например TAppBuilder или TPropertyInspector.
Эти 2 работают во всех версиях Delphi IIRC.

Если вы хотите знать, работает ли ваше приложение под отладчиком , то есть запускается в обычном режиме из среды IDE с помощью команды «Выполнить» (F9) или присоединено к отладчику, когда оно уже запущено, вам просто нужно проверить глобальная переменная DebugHook.
Обратите внимание, что «Отсоединить от программы» не удаляет значение DebugHook, но «Присоединить к процессу» устанавливает его.

function IsDelphiRunning: Boolean;
begin
  Result := (FindWindow('TAppBuilder', nil) > 0) and
    (FindWindow('TPropertyInspector', 'Object Inspector') > 0);
end;

function IsOrWasUnderDebugger: Boolean;
begin
  Result := DebugHook <> 0;
end;

Если цель - ограничить использование пробной версии вашего компонента, когда приложение разрабатывается, оба имеют недостатки :
- Скрытые окна с правильным именем класса / заголовком могут быть включены в приложение
- DebugHook можно установить вручную в коде

18
ответ дан 5 December 2019 в 07:36
поделиться

Вы можете использовать DebugHook <> 0 из кода вашего компонента. DebugHook - это глобальная переменная (IIRC, она находится в модуле «Системы»), которая устанавливается IDE Delphi / RAD Studio и не может быть установлена ​​из других источников.

Существуют и другие методы (например, FindWindow () для TAppBuilder ), но DebugHook берет на себя всю работу.

3
ответ дан 5 December 2019 в 07:36
поделиться

Это фрагмент кода из www.delphitricks.com/source-code/misc/check_if_delphi_is_running.html .

function WindowExists(AppWindowName, AppClassName: string): Boolean; 
var 
  hwd: LongWord; 
begin 
  hwd    := 0; 
  hwd    := FindWindow(PChar(AppWindowName), PChar(AppClassName)); 
  Result := False; 
  if not (Hwd = 0) then {window was found if not nil} 
    Result := True; 
end; 

function DelphiLoaded: Boolean; 
begin 
  DelphiLoaded := False; 
  if WindowExists('TPropertyInspector', 'Object Inspector') then 
    if WindowExists('TMenuBuilder', 'Menu Designer') then 
      if WindowExists('TAppBuilder', '(AnyName)') then 
        if WindowExists('TApplication', 'Delphi') then 
          if WindowExists('TAlignPalette', 'Align') then 
            DelphiLoaded := True; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  if DelphiLoaded then 
  begin 
    ShowMessage('Delphi is running'); 
  end; 
end; 


function DelphiIsRunning: Boolean; 
begin 
  Result := DebugHook <> 0; 
end;
1
ответ дан 5 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: