Приложение запущено из Delphi?
- Использовать CreateToolHelp32SnapShot, чтобы получить список всех запущенных процессов
- Цикл через список (используя функции API Process32First и Process32Next) для поиска нашего процесса. После того, как мы найдем структуру нашего приложения, она будет содержать ID родительского процесса
- Цикл по списку, используя те же самые функции API для поиска процесса, котороый соответствует найденному ID
Когда найдем родительский процесс, проверим имя этого процесса. Если это Delphi32.exe, то программа запущена в отладчике, если нет, то нет.
var lclCurrProc: TProcessEntry32; lclPrntProc: TProcessEntry32; lclSnapHndl: THandle; lclEXEName: String; lclPrntName: String; begin // Получить текущий список процессов lclSnapHndl := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0); // Сохраним имя экзешника lclEXEName := ExtractFileName(Application.ExeName); // Нужно определить размер этих структур lclCurrProc.dwSize := SizeOf(TProcessEntry32); lclPrntProc.dwSize := SizeOf(TProcessEntry32); // Ищем текущие процессы Process32First(lclSnapHndl, lclCurrProc); repeat if lclCurrProc.szExeFile = lclEXEName then Break; until (not Process32Next(lclSnapHndl, lclCurrProc)); // Ищем родительские процессы Process32First(lclSnapHndl, lclPrntProc); repeat if lclPrntProc.th32ProcessID = lclCurrProc.th32ParentProcessID then Break; until (not Process32Next(lclSnapHndl, lclPrntProc)); lclPrntName := lclPrntProc.szExeFile; if AnsiCompareText(lclPrntName, 'Delphi32.exe') = 0 then ShowMessage('Из Delphi') else ShowMessage('НЕ из Delphi');
Поместите TLhelp32 в секцию uses.
Имейте ввиду, что при работе с Borland Developer Studio это будет файл BDS.exe.
Комментарии