Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров
0/0

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Уважаемые читатели!
Тут можно читать бесплатно Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров. Жанр: Программирование. Так же Вы можете читать полную версию (весь текст) онлайн книги без регистрации и SMS на сайте Knigi-online.info (книги онлайн) или прочесть краткое содержание, описание, предисловие (аннотацию) от автора и ознакомиться с отзывами (комментариями) о произведении.
Описание онлайн-книги Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров:
…начиная с 1001. Смотрите другие файлы…
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 110 111 112 113 114 115 116 117 118 ... 123

 function WindowExists(ClassName, WindowName: string): boolean;

 { Проверяем наличие определенного окна Window, используя для этого паскалевские строки вместо PChars. }

 var

  PClassName, PWindowName: PChar;

  AClassName, AWindowName: array[0..63] of char;

 begin

  if ClassName = '' then PClassName := nil

  else PClassName := StrPCopy(@AClassName[0], ClassName);

  if WindowName = '' then PWindowName := nil

  else PWindowName := StrPCopy(@AWindowName[0], WindowName);

  if FindWindow(PClassName, PWindowName) <> 0 then WindowExists := true

  else WindowExists := false;

 end; {WindowExists}

begin {DelphiLoaded}

 DelphiLoaded := false;

 if WindowExists('TPropertyInspector', 'Object Inspector') then

  if WindowExists('TMenuBuilder', 'Menu Designer') then

   if WindowExists('TApplication', 'Delphi') then

    if WindowExists('TAlignPalette', 'Align') then

     if WindowExists('TAppBuilder', '')  then DelphiLoaded := true;

end; {DelphiLoaded}

Следующая программа возвращает TRUE при запуске в Delphi IDE (ПРИМЕЧАНИЕ: это _не_ сработает, если подпрограмма в DLL).

function InIDE: Boolean;

begin

 Result := Bool(PrefixSeg) and Bool(PWordArray(MemL[DSeg:36])^[8]));

end; { InIDE }

Работа с IDE из программы

Вот три подпрограммы, работающие у меня в связке D1 и Win 3.1x:

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 ([email protected]).                   }

{----------------------------------------------------------------}

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) <> 0 then 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) = 0 then 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} 

Как исправить проблемы с вызовом помощи при одновременно стоящих Delphi 1 и Delphi 2?

Nomadic отвечает:

A: (AP): Решаются так…

В regedit убейте из секции HKLMSOFTWAREMicrosoftWindowsHelp все, что равно «…help».

Изменив соответствующие пути, импортируйте в реестр следующий файлик:

REGEDIT4

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionAppPathsdelphi32.exe]

@="C:\DELPHI2\BIN\delphi32.exe

"Path"="C:\DELPHI2\HELP"

Защита 

Борьба с SoftIce

Igor Nikolaev aKa The Sprite пишет:

Hаткнулся в инете на некий модуль StopIce, и любопытство сделало своё дело. Как долго я смеялся… :))))

Для тех, кто не в курсе: посмотрите export NmSymIsSoftIceLoaded (или что-то подобное) в nmtrans.dll.

Вот полный юнит против SOFTICE, при обнаружении отладчика перезагружает компьютер:

unit StopIce;

interface

implementation

uses Windows;

Function IsSoftIce95Loaded: boolean;

Var hFile: Thandle;

Begin

 result := false;

 hFile := CreateFileA('\.SICE', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

 if (hFile <> INVALID_HANDLE_VALUE) then begin

  CloseHandle(hFile);

  result := TRUE;

 end;

End;

Function IsSoftIceNTLoaded: boolean;

Var hFile: Thandle;

Begin

 result := false;

 hFile := CreateFileA('\.NTICE', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

 if (hFile <> INVALID_HANDLE_VALUE) then begin

  CloseHandle(hFile);

  result := TRUE;

 end;

End;

function WinExit(flags: integer): boolean;

 function SetPrivilege(privilegeName: string; enable: boolean): boolean;

 var

  tpPrev, tp: TTokenPrivileges;

  token: THandle;

  dwRetLen: DWord;

 begin

  result := False;

  OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);

  tp.PrivilegeCount := 1;

  if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then begin

   if enable then tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED

   else tp.Privileges[0].Attributes := 0;

1 ... 110 111 112 113 114 115 116 117 118 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий

Рейтинговые книги