Форум: "Основная";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизВопрос по 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c