Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Вопрос по IDE Дельфи/   Найти похожие ветки 

 
JohnKorsh ©   (2006-10-04 12:52) [0]

Есть ли в Дельфи предопределённая переменная, позволяющая программе понять, запускается ли она в Дельфи или уже как exe файл?


 
Игорь Шевченко ©   (2006-10-04 13:10) [1]

IsWindow(FindWindow("TAppBuilder", nil)) ?


 
Юрий Зотов ©   (2006-10-04 13:12) [2]

if IsDebuggerPresent then
 мы_под_Delphi_или_под_другим_отладчиком


 
Rouse_ ©   (2006-10-04 16:02) [3]

Я бы сделал примерно таким образом:

program Test;

uses
 Windows, TlHelp32;

function IsDelphiPresent: Boolean;
var
 hSnapShot: THandle;
 ProcEntry: PROCESSENTRY32;
 CurrentPID: DWORD;
begin
 Result := False;
 CurrentPID := GetCurrentProcessId;
 hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if hSnapShot <> INVALID_HANDLE_VALUE then
 try
   ProcEntry.dwSize := SizeOf(PROCESSENTRY32);
   if Process32First(hSnapShot, ProcEntry) then
   begin
     repeat
       if ProcEntry.th32ProcessID = CurrentPID then
       begin
         CurrentPID := ProcEntry.th32ParentProcessID;
         Break;
       end;
     until not Process32Next(hSnapShot, ProcEntry);
   end;
   if Process32First(hSnapShot, ProcEntry) then
   begin
     repeat
       if ProcEntry.th32ProcessID = CurrentPID then
       begin
         Result := CharUpper(ProcEntry.szExeFile) = "BDS.EXE";
         if not Result then
           Result := CharUpper(ProcEntry.szExeFile) = "DELPHI.EXE";
         Break;
       end;
     until not Process32Next(hSnapShot, ProcEntry);
   end;
 finally
   CloseHandle(hSnapShot);
 end;
end;

function IsDebuggerPresent: BOOL; external kernel32;

begin
 if IsDebuggerPresent then
   MessageBox(0, "Запуск произведен из под Delphi", nil, 0)
 else
   MessageBox(0, "Запуск произведен в виде самостоятельного приложения.", nil, 0)
end.


 
JohnKorsh ©   (2006-10-04 16:03) [4]

"if IsDebuggerPresent then"
у меня D5. Он не видит IsDebuggerPresent. Может надо чего в uses добавить?


 
Rouse_ ©   (2006-10-04 16:04) [5]

точнее "DELPHI32.EXE"


 
JohnKorsh ©   (2006-10-04 16:06) [6]

Спасибо, Rouse_, заработало как хотелось.


 
Rouse_ ©   (2006-10-04 16:33) [7]

Ыть, там я не то скопировал :)
вот это убери:
function IsDebuggerPresent: BOOL; external kernel32;
а вот это: if IsDebuggerPresent then
замени на if IsDelphiPresent then

:)
Просто проверял как среагирует IsDebuggerPresent на запуск проекта без отладочной информации :)


 
Eraser ©   (2006-10-04 17:07) [8]


> [0] JohnKorsh ©   (04.10.06 12:52)

 if csDesigning in TComponent(Self).ComponentState then
   MessageBox(0, "Запуск произведен из под Delphi", nil, 0);


 
DrPass ©   (2006-10-04 18:48) [9]


> if csDesigning in TComponent(Self).ComponentState then
>    MessageBox(0, "Запуск произведен из под Delphi", nil,
>  0);

Нуууу... Это сработает только для кода, вызываемого дизайнером форм. Автор вроде бы имеет в виду запуск программы на выполнение, а не бросание компонент на форму


 
Eraser ©   (2006-10-04 19:57) [10]

> [9] DrPass ©   (04.10.06 18:48)


> Автор вроде бы имеет в виду запуск программы на выполнение,
> а не бросание компонент на форму

судя по
> запускается ли она в Дельфи или уже как exe файл

это не очевидно :-)
под отладчиком программа уже является скомпилированным exe-файлом.

по-моему самый лучший вариант - [2], если хочется узнать, запущена ли программа именно под управлением Делфи, то надо еще и проверять имя parent-процесса, вроде того как в [3].



Страницы: 1 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
2-1161599893
Megabyte
2006-10-23 14:38
2006.11.12
Компоненты работы с почтой


15-1161510263
Dib@zol
2006-10-22 13:44
2006.11.12
Ворох вопросов по API, дубель два


3-1158317143
Sergey_b
2006-09-15 14:45
2006.11.12
выбор данных, в соответствии с иерархией


15-1161504536
Чародей
2006-10-22 12:08
2006.11.12
Поиск похожих jpg


2-1160925543
Albenous
2006-10-15 19:19
2006.11.12
Загрузка файлов в dll