안녕하세요.
우선 문제는 제가... 작업그룹을 알아낼려고 하는데... Win98과 2000, XP는 작업그룹을 알아네는 방법이 틀리네요...
그래서 아래와 같이 한 PAS에서 설정하고 컴파일 하니.. 에러가 납니다.
Win2000에서는 문제가 없는듯 보이고 WIn98에서는 컴파일시 에러가 납니다.
function NetApiBufferFree(Buffer: Pointer): LongWord; stdcall;
function NetWkstaGetInfo(ServerName: LPWSTR; Level: DWORD; var BufPtr: Pointer): DWord; stdcall;
이 부분인것 같은데.... 98에서는 참조 하는 함수가 없어서 그런것 같습니다.
질문의 요지는 IFDEF ~ ENDIF 컴파일러 함수을 사용하여 운영체제 따라 컴파일을 할 수 없는지요..????
델파이 버전에 따라 컴파일은 가능 한데.... 운영체제에 따라 어떻게 해야 하는지....
아래내용은 네트워크 그룹알아내기 입니다.(팁)에 있습니다. 참고 하세요
그럼 부탁드립니다.
------------------------------------------------------------
안녕하세요. 최용일입니다.
윈도우의 WorkGroup이름을 알아내는 팁입니다.
Windows 9x, Me: 레지스트리에서 읽어오시면 됩니다.
procedure TForm1.Button1Click(Sender: TObject);
const
WGKey = '\System\CurrentControlSet\Services\VxD\VNETSUP';
WGName = 'WorkGroup';
var
RegFile: TRegistry;
WorkGroup: string;
begin
RegFile := TRegistry.Create;
try
RegFile.RootKey := HKEY_LOCAL_MACHINE;
if RegFile.OpenKey(WGKey, True) then
begin
WorkGroup := RegFile.ReadString(WGName);
ShowMessage('WorkGroup: ' + WorkGroup);
end;
RegFile.CloseKey;
finally
RegFile.Free;
end;
end;
Windows 2000, NT: NetWork Management Function을 이용하시면 됩니다.
interface
type
PWKSTA_INFO_102 = ^TWKSTA_INFO_102;
TWKSTA_INFO_102 = packed record
wki102_platform_id: DWORD;
wki102_computername: LPWSTR;
wki102_langroup: LPWSTR;
wki102_ver_major: DWORD;
wki102_ver_minor: DWORD;
wki102_lanroot: LPWSTR;
wki102_logged_on_users: DWORD;
end;
function NetApiBufferFree(Buffer: Pointer): LongWord; stdcall;
function NetWkstaGetInfo(ServerName: LPWSTR; Level: DWORD; var BufPtr: Pointer): DWord; stdcall;
implementation
function NetWkstaGetInfo; external 'Netapi32.dll' name 'NetWkstaGetInfo';
function NetApiBufferFree; external 'Netapi32.dll' name 'NetApiBufferFree';
procedure TForm1.Button1Click(Sender: TObject);
const
Level: LongWord = 102;
ServerName: PWideChar = '';
var
Status: LongWord;
BufPtr: PWKSTA_INFO_102;
WorkGroup: string;
begin
Status := NetWkstaGetInfo(ServerName, Level, Pointer(BufPtr));
try
if (Status = ERROR_SUCCESS) then
begin
WorkGroup := PWideChar(BufPtr.wki102_langroup);
ShowMessage('WorkGroup: ' + WorkGroup);
end;
finally
if (BufPtr <> nil) then
NetApiBufferFree(BufPtr);
end;
end;