Главная страница
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.07 c
3-1158044838
SergP.
2006-09-12 11:07
2006.11.12
Как узнать тип поля в открытом датасете?


2-1161834050
LexXL
2006-10-26 07:40
2006.11.12
BeforeNavigate


2-1162063796
Уця Шпиндель
2006-10-28 23:29
2006.11.12
Помогите разобраться с калькулятором


3-1157838144
lookin
2006-09-10 01:42
2006.11.12
Значение поля - только определенные величины


15-1161954746
Гарри Поттер
2006-10-27 17:12
2006.11.12
грядет сухой закон?