IDEからの実行かEXEからの実行かを知るには?

解決


monst  2004-04-24 22:29:36  No: 8566

IDEからの実行かEXEファイルからの実行かを判別する方法を教えて下さい。
FAQだと思うのですが、見つけられません。


るるとん@K  2004-04-25 00:28:54  No: 8567

IDEからの起動なら、Delphi側の停止ボタン等がEnabled=Trueになるのでは?


初心者999  2004-04-25 03:17:19  No: 8568

すみませんが、monstさんの質問に便乗させて下さい。

何をしたいのかがよくわかりませんが、もし、下記のようなことをしたいのであれば、
私も知りたいので、わかる方教えてください。

{$IFDEF IDEの時}
   { IDEの時のコード }
{$ELSE}
   { EXEの時のコード }  
{$ENDIF}


jok  2004-04-25 20:13:31  No: 8569

FAQ なんですか? 知りませんでした。
IsDebuggerPresent というAPIをつかってみたところ、D5 Windows2000 では
うまくいっているようです。D5 ではこのAPIがインポートされていないので
自前でインポートします。Windows98 以降で使えます。

function IsDebuggerPresent:Boolean;
type
  TFuncType = function ():Bool;stdcall;
var
  Handle:THandle;
  IsFromDelphiIDE:TFuncType;
begin
  Handle := LoadLibrary('kernel32.dll');
  @IsFromDelphiIDE := GetProcAddress(Handle,'IsDebuggerPresent');

  result := IsFromDelphiIDE;
  FreeLibrary(Handle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsDebuggerPresent then
    Label1.Caption := 'from Delphi IDE'
  else
    Label1.Caption := 'from EXE';
end;


monst  2004-04-26 22:08:02  No: 8570

jokのコードで解決しました(D7,WinXp)。
理解領域を超えていますので、blackboxで使わせて頂きます。
ありがとうございました。

初心者999さんのご指摘のとおり、 
{$IFDEF IDEの時}
   { IDEの時のコード }
{$ELSE}
   { EXEの時のコード }  
{$ENDIF}
で、debug時のパスワード入力を省略する際に使っています。


monst  2004-04-27 01:15:44  No: 8571

↑↑↑↑
jokのコードで解決しました(D7,WinXp)。→jokさんのコードで〜
の間違いです。
たいへん失礼をしました。


shaki  2004-04-27 02:32:23  No: 8572

解決なさっているようですが、
if DebugHook <> 0 then
  ShowMessage('debug')
else
  ShowMessage('no-debug');
が手軽でいいと思います。


jok  2004-04-27 03:13:17  No: 8573

> shaki さん

確認しました。DebugHook は、System.pas で宣言されている変数なんですね。
知りませんでした。こっちの方が確かにいいですね。


monst  2004-04-27 18:47:04  No: 8574

shakiさんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加