![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по 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)) ?