Вот подпрограммы, работающие у меня в связке D1 и Win
Code: |
function LaunchedFromDelphiIDE: Boolean; {----------------------------------------------------------------} { Осуществляем проверку запущенности приложения из-под Delphi } { IDE. Идея взята из сообщения в Delphi-Talk от Ed Salgado } { из Eminent Domain Software. } {----------------------------------------------------------------}
begin LaunchedFromDelphiIDE := Bool(PrefixSeg) {т.е. не DLL}and Bool(PWordArray(MemL[DSeg: 36])^[8]); end; {LaunchedFromDelphiIDE}
function DelphiLoaded: Boolean; {----------------------------------------------------------------} { Проверяем, загружена ли Delphi. Дает правильные результаты } { - если вызывающее приложение запущено отдельно, или из-под IDE} { - если Delphi имеет открытый проект } { - если Delphi минимизирована. } { Автор идеи Wade Tatman (Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.). } {----------------------------------------------------------------}
begin DelphiLoaded := false; if WindowExists('TPropertyInspector', 'Object Inspector') then if WindowExists('TMenuBuilder', 'Menu Designer') then if WindowExists('TAppBuilder', '(AnyName)') then if WindowExists('TApplication', 'Delphi') then if WindowExists('TAlignPalette', 'Align') then DelphiLoaded := true; end; {DelphiLoaded}
function DelphiInstalled: Boolean; {----------------------------------------------------------------} { Проверяем наличие Delphi.ini, ищем в нем путь к Библиотеке } { Компонентов, после чего проверяем ее наличие по этому пути. } {----------------------------------------------------------------}
var IniFile: string; begin DelphiInstalled := false; IniFile := WindowsDirectory + '\Delphi.ini'; if FileExists(IniFile) then if FileExists(GetIni(IniFile, 'Library', 'ComponentLibrary')) then DelphiInstalled := true; end; {DelphiInstalled}
Я уверен, что один из приведенных выше методов вам поможет.Последние две подпрограммы используют некоторые другие инкапсуляции Windows API и классов Delphi, и они определены следующим образом:
function WindowExists(WindowClass, WindowName: string): Boolean; {----------------------------------------------------------------} { С помощью паскалевских строк проверяем наличие определенного } { окна. Для поиска только имени окна (WindowName), используем } { WindowClass '(AnyClass)'; для поиска только класса окна } { (WindowClass), используем WindowName '(AnyName)'. } {----------------------------------------------------------------}
var PWindowClass, PWindowName: PChar; AWindowClass, AWindowName: array[0..63] of Char; begin if WindowClass = '(AnyClass)'then PWindowClass := nil else PWindowClass := StrPCopy(PChar(@AWindowClass), WindowClass);
if WindowName = '(AnyName)'then PWindowName := nil else PWindowName := StrPCopy(PChar(@AWindowName), WindowName);
if FindWindow(PWindowClass, PWindowName) <> 0then WindowExists := true else WindowExists := false; end; {WindowExists}
function WindowsDirectory: string; {----------------------------------------------------------------} { Возвращаем путь к каталогу Windows (без обратной косой черты) } {----------------------------------------------------------------}
const BufferSize = 144; var ABuffer: array[0..BufferSize] of Char; begin if GetWindowsDirectory(PChar(@ABuffer), BufferSize) = 0then WindowsDirectory := '' else WindowsDirectory := StrPas(PChar(@ABuffer)); end; {WindowsDirectory}
function GetIni(const IniFile, Section, Entry: string): string; {----------------------------------------------------------------} { Получаем инициализационную 'profile' строку из определенного } { пункта (Entry) определенной секции [Section] определенного } { INI-файла (дополняем '.ini', если отсутствует). Возвращаем } { нулевую строку, если IniFile, Section или Entry не найден. } {----------------------------------------------------------------}
var IniFileVar: string; IniFileObj: TIniFile; begin if StrEndsWith(IniFile, '.ini') then IniFileVar := IniFile else IniFileVar := IniFile + '.ini'; IniFileObj := TIniFile.Create(IniFileVar); GetIni := IniFileObj.ReadString(Section, Entry, ''); IniFileObj.Free; end; {GetIni} |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!