{*******************************************************************************}
{ }
{ модуль vmsLocalInformation }
{ v.3.0.0.20 }
{ створено 22/06/2009 }
{ }
{ Модуль містить процедури та функції, що повертають локальну системну }
{ інформацію }
{ }
{*******************************************************************************}
unit vmsLocalInformation;
interface
uses
Windows, WideStrUtils, SysUtils, SHFolder, ComObj, ActiveX, WinSock, Registry;
type
TLocalInformation = class(TObject)
{
Description:
Повертає повний шлях до каталогів по ідентифікатору
\All Users\Application Data
\Program Files\
\Program Files\Common\
\My Pictures\
...
Parameters:
aFolder: константа, що визначає каталог, описана в SHFolder.pas з префіксом CSIDL_
}
class function GetSpecialFolderPath(aFolder: integer): string;
{
Description:
Повертає системну інформацію;
Parameters:
aFlag: константа, описана в Windows.pas з префіксом LOCALE_
}
class function GetLocaleInformation(aFlag: Integer): string;
{
Description:
Повертає системну кодову сторінку
}
class function GetSystemCodePage: integer;
{
Description:
Повертає серійний номер логічного диска
Parameters:
aLetterDrive: літера диску, наприклад C:, D:
}
class function GetDriveSerialNumber(aLetterDrive: PChar): string;
{
Description:
Повертає шлях до системного каталогу System32
}
class function GetDirSystem32: string;
{
Description:
Повертає шлях до каталогу Windows
}
class function GetDirWindows: string;
{
Description:
Повертає шлях до темпового каталогу
}
class function GetDirTemp: string;
{
Description:
Повертає повний шлях до тимчасового файлу
}
class function GetFileTemp(aExtension: string = ''; aPrefix: string = ''): string;
{
Description:
Повертає інформацію, чи зареєстровано OLE-об'єкт, наприклад 'Excel.Application'
}
class function IsOLEObjectInstalled(aName: string): boolean;
{
Description:
Повертає версію Windows
}
class function GetWindowsVersion: string;
{
Description:
Повертає користувача Windows
}
class function GetUserFromWindows: string;
{
Description:
Повертає IP-адресу і домен
}
class procedure GetLocalIPAddressName(var aIP, aDomain: string);
{
Description:
Повертає версію InternetExplorer
}
class function GetIEVersion: string;
end;
implementation
class function TLocalInformation.GetLocaleInformation(aFlag: Integer): string;
var
pcLCA: array[0..20] of Char;
begin
if GetLocaleInfo(LOCALE_USER_DEFAULT, aFlag, pcLCA, 19) <= 0 then
pcLCA[0] := #0;
Result := pcLCA;
end;
class procedure TLocalInformation.GetLocalIPAddressName(var aIP, aDomain: string);
var
WSAData : TWSAData;
p : PHostEnt;
sName : array [0..$FF] of AnsiChar;
begin
WSAStartup($0101, WSAData);
GetHostName(@sName, $FF);
p := GetHostByName(@sName);
aIP := inet_ntoa(PInAddr(p.h_addr_list^)^);
aDomain := sName;
WSACleanup;
end;
class function TLocalInformation.GetSpecialFolderPath(aFolder: Integer): string;
const
SHGFP_TYPE_CURRENT = 0;
var
path: array[0..MAX_PATH] of Char;
begin
if SUCCEEDED(SHGetFolderPath(0, aFolder, 0, SHGFP_TYPE_CURRENT, @path[0])) then
Result := path
else
Result := '';
if (Length(Result) > 0) and (Result[Length(Result)] <> '\') then
Result := Result + '\';
end;
class function TLocalInformation.GetSystemCodePage: Integer;
begin
result := StrToInt(GetLocaleInformation(LOCALE_IDEFAULTANSICODEPAGE));
end;
class function TLocalInformation.GetDirWindows: string;
var
A: array[0..144] of Char;
begin
GetWindowsDirectory(A, sizeof(A));
result := StrPas(A) + '\';
end;
class function TLocalInformation.GetDirSystem32: string;
var
A: array[0..144] of Char;
begin
GetSystemDirectory(A, sizeof(A));
result := StrPas(A) + '\';
end;
class function TLocalInformation.GetDirTemp: string;
var
sTemp: PAnsiChar;
begin
Result := GetEnvironmentVariable('TEMP');
if (Result = '') then
Result := GetEnvironmentVariable('TMP');
if (Result = '') then
begin
GetMem(sTemp, 255);
GetTempPathA(255, sTemp);
try
if (sTemp <> '') then
Result := sTemp;
finally
FreeMem(sTemp);
end;
end;
if (Length(Result) > 0) then
Result := IncludeTrailingPathDelimiter(Result);
end;
class function TLocalInformation.GetFileTemp(aExtension: string = ''; aPrefix: string = ''): string;
begin
Result := Concat(GetDirTemp, aPrefix, IntToHex(StrToInt(FormatDateTime('hhmmsszzz', Time)), 8), '.tmp');
if (aExtension <> '') then
begin
if (aExtension[1] <> '.') then
aExtension := Concat('.', aExtension);
Result := ChangeFileExt(Result, aExtension);
end;
end;
class function TLocalInformation.GetDriveSerialNumber(aLetterDrive: PChar): string;
var
DW : DWord;
FileSystem : array[0..$FF] of Char;
SerialNumber : DWord;
SysFlags : DWord;
VolumeLabel : array[0..$FF] of Char;
begin
GetVolumeInformation(aLetterDrive,
VolumeLabel,
SizeOf(VolumeLabel),
@SerialNumber,
DW,
SysFlags,
FileSystem,
SizeOf(FileSystem));
Result := IntToStr(SerialNumber);
end;
class function TLocalInformation.IsOLEObjectInstalled(aName: string): boolean;
var
ClassID : TCLSID;
Rez : HRESULT;
begin
Rez := CLSIDFromProgID(PWideChar(WideString(aName)), ClassID);
if Rez = S_OK then
Result := True
else
Result := False;
end;
class function TLocalInformation.GetWindowsVersion: string;
begin
Result := TOSVersion.ToString;
end;
class function TLocalInformation.GetUserFromWindows: string;
var
sUserName : string;
sUserNameLen : Dword;
begin
sUserNameLen := 255;
SetLength(sUserName, sUserNameLen);
if GetUserName(PChar(sUserName), sUserNameLen) then
Result := Copy(sUserName,1,sUserNameLen - 1)
else
Result := 'Unknown';
end;
class function TLocalInformation.GetIEVersion: string;
var
loReg: TRegistry;
begin
loReg := TRegistry.Create;
try
loReg.RootKey := HKEY_LOCAL_MACHINE;
loReg.OpenKey('Software\Microsoft\Internet Explorer', False);
try
Result := loReg.ReadString('Version');
except
Result := '';
end;
loReg.CloseKey;
finally
FreeAndNil(loReg);
end;
end;
end.
Завантажити файл
В заголовку бібліотеки всі функції описано в коментарях, нема додаткової потреби в поясненнях.
Приклад використання:
procedure TForm1.Button1Click(Sender: TObject);
var
sIP : string;
sName: string;
sText: string;
begin
TLocalInformation.GetLocalIPAddressName(sIP, sName);
sText := Concat('GetDirSystem32 - ', TLocalInformation.GetDirSystem32, sLineBreak,
'GetDirTemp - ', TLocalInformation.GetDirTemp, sLineBreak,
'GetDriveSerialNumber - ', TLocalInformation.GetDriveSerialNumber('C:'), sLineBreak,
'GetFileTemp - ', TLocalInformation.GetFileTemp, sLineBreak,
'GetSystemCodePage - ', IntToStr(TLocalInformation.GetSystemCodePage), sLineBreak,
'GetUserFromWindows - ', TLocalInformation.GetUserFromWindows, sLineBreak,
'GetWindowsVersion - ', TLocalInformation.GetWindowsVersion, sLineBreak,
'Host - ', sName, sLineBreak,
'IP-address - ', sIP);
Application.MessageBox(PWideChar(sText), 'Local Information');
end;
Немає коментарів :
Дописати коментар