// 로컬 아이피 주소 얻는넘
procedure GetLocalIpList(aList : TStrings);
type
TaPInAddr = array [0..255] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
buff : array [0..63] of char;
pHEnt : PHostEnt;
pptr : PaPInAddr;
WSData : TWSAData;
i : integer;
begin
aList.Clear;
if WSAStartup($101,WSData) <> 0 then begin
showmessagefmt('%d',[getlasterror]);
exit;
end;
try
if GetHostName (buff,sizeof(buff)) <> 0 then begin
showmessagefmt('%d',[getlasterror]);
exit;
end;
pHEnt := gethostbyname(buff);
if pHEnt <> nil then begin
pptr := PaPInAddr(pHEnt^.h_addr_list);
I := 0;
while pptr^[I] <> nil do begin
aList.Add(StrPas(inet_ntoa(pptr^[I]^)));
Inc(I);
end;
end;
finally
WSACleanup;
end;
end;
//OSVersion Chech하는 넘
procedure __OSVERSIONCHECK__;
var
osvi : TOSVersionInfo;
begin
osvi.dwOSVersionInfoSize := SIZEOF(TOSVersionInfo);
GetVersionEx (osvi);
case (osvi.dwMajorVersion) of
3 : // NT3.51
begin
WITH __OSVERSIONINFO DO BEGIN
OSTYPE := __WinNT;
MGVERSION := 3;
MNVERSION := 51;
BUILDNO := osvi.dwBuildNumber;
SVCPACK := osvi.szCSDVersion;
END;
end;
4 : // win95,98,ME, NT4.0
BEGIN
if (osvi.dwMinorVersion = 0) THEN BEGIN // win95 or nt4.0
if (osvi.dwPlatformId = VER_PLATFORM_WIN32_NT) THEN BEGIN// NT4.0
WITH __OSVERSIONINFO DO BEGIN
OSTYPE := __WinNT;
MGVERSION := 4;
MNVERSION := 0;
BUILDNO := osvi.dwBuildNumber;
SVCPACK := osvi.szCSDVersion;
END;
END
else
WITH __OSVERSIONINFO DO BEGIN
OSTYPE := __Win95;
MGVERSION := 4;
MNVERSION := 0;
BUILDNO := osvi.dwBuildNumber AND $0000FFFF; //LOWORD
IF StrLen(osvi.szCSDVersion) > 1 THEN
SVCPACK := 'OSR2'
ELSE
SVCPACK := '';
END;
END
else if (osvi.dwMinorVersion = 10) THEN // win98
WITH __OSVERSIONINFO DO BEGIN
OSTYPE := __Win98;
MGVERSION := 4;
MNVERSION := 10;
BUILDNO := osvi.dwBuildNumber AND $0000FFFF; //LOWORD
IF StrLen(osvi.szCSDVersion) > 1 THEN
SVCPACK := 'SE'
ELSE
SVCPACK := '';
END
else // winMe
WITH __OSVERSIONINFO DO BEGIN
OSTYPE := __WinME;
MGVERSION := 4;
MNVERSION := osvi.dwMinorVersion;
BUILDNO := osvi.dwBuildNumber;
SVCPACK := '';
END;
END;
5 : // Win2000,XP,.net Server
BEGIN
if ( osvi.dwMinorVersion = 0 ) THEN // 2000
WITH __OSVERSIONINFO DO BEGIN
OSTYPE := __Win2000;
MGVERSION := 5;
MNVERSION := osvi.dwMinorVersion;
BUILDNO := osvi.dwBuildNumber;
SVCPACK := osvi.szCSDVersion;
END
else // XP or .net Server
WITH __OSVERSIONINFO DO BEGIN
OSTYPE := __WinXP;
MGVERSION := 5;
MNVERSION := osvi.dwMinorVersion;
BUILDNO := osvi.dwBuildNumber;
SVCPACK := osvi.szCSDVersion;
END;
END;
END;
end;
// Cpu Vendor Check하는 넘..
const
ID_BIT = $200000; // EFLAGS ID bit
type
TCPUID = array[1..4] of Longint;
TVendor = array [0..11] of char;
function IsCPUID_Available: Boolean; register;
asm
PUSHFD {direct access to flags no possible, only via stack}
POP EAX {flags to EAX}
MOV EDX,EAX {save current flags}
XOR EAX,ID_BIT {not ID bit}
PUSH EAX {onto stack}
POPFD {from stack to flags, with not ID bit}
PUSHFD {back to stack}
POP EAX {get back to EAX}
XOR EAX,EDX {check if ID bit affected}
JZ @exit {no, CPUID not availavle}
MOV AL,True {Result=True}
@exit:
end;
function GetCPUVendor: TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI {Restore registers}
POP EBX
end;
'知 > Delphi' 카테고리의 다른 글
DBGrid DrawColumnCell 예제 (0) | 2015.12.11 |
---|---|
TClientDataSet 파일의 크기 줄이기 (0) | 2013.01.09 |
마우스 움직이는 범위를 패널 안으로 제약하기 (0) | 2012.05.03 |
한 주의 첫 번째 및, 마지막 날짜 구하기. (0) | 2010.01.22 |
작업관리자에서 프로세서 안보이게 하기(검증안함) (0) | 2009.10.26 |