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

解決


monst  2004-04-24 13:29:36  No: 8566  IP: 192.*.*.*

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

編集 削除
るるとん@K  2004-04-24 15:28:54  No: 8567  IP: 192.*.*.*

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

編集 削除
初心者999  2004-04-24 18:17:19  No: 8568  IP: 192.*.*.*

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

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

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

編集 削除
jok  2004-04-25 11:13:31  No: 8569  IP: 192.*.*.*

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 13:08:02  No: 8570  IP: 192.*.*.*

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

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

編集 削除
monst  2004-04-26 16:15:44  No: 8571  IP: 192.*.*.*

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

編集 削除
shaki  2004-04-26 17:32:23  No: 8572  IP: 192.*.*.*

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

編集 削除
jok  2004-04-26 18:13:17  No: 8573  IP: 192.*.*.*

> shaki さん

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

編集 削除
monst  2004-04-27 09:47:04  No: 8574  IP: 192.*.*.*

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

編集 削除