Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по IDE Дельфи/ [D5, WinXP]


JohnKorsh ©   (2006-10-04 12:52:00) 

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


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

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


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

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

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

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


DrPass   (2006-10-04 18:48:00) [2]


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

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


Eraser   (2006-10-04 17:07:00) [3]


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

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


Rouse_   (2006-10-04 16:33:00) [4]

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

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


JohnKorsh   (2006-10-04 16:06:00) [5]

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


Rouse_   (2006-10-04 16:04:00) [6]

точнее 'DELPHI32.EXE'


JohnKorsh   (2006-10-04 16:03:00) [7]

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


Rouse_   (2006-10-04 16:02:00) [8]

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

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.


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо