이 팁은 담비님(천리안 FREKBS)님이 1999년 04월 10일에 천리안 프로그래머포럼에 올리신 것입니다.
담비님으로부터는 전제하여 올리는 데 대해 허락을 받았습니다.
좋은 정보를 공유하도록 허락해주신 담비님께 감사드립니다.
───────────────────────────────────────
안녕하세요! 담비입니다.
출처 :
http://www.inprise.co.jp
Whoami.bpr
─────
# ---------------------------------------------------------------------------
!if !$d(BCB)
BCB = $(MAKEDIR)\..
!endif
# ---------------------------------------------------------------------------
# IDE ZNV
# ---------------------------------------------------------------------------
# vWFNgCNt@C京뵤ZNV?IDE 좔풍褘텯
# 궷ZNV燥X룬委A큰榕?IDE ?p룬濾?
# ?끼B
# ---------------------------------------------------------------------------
VERSION = BCB.03
# ---------------------------------------------------------------------------
PROJECT = whoami.exe
OBJFILES = whoami.obj account.obj
RESFILES =
RESDEPEN = $(RESFILES)
LIBFILES =
LIBRARIES = vcldb35.lib vcl35.lib
SPARELIBS = vcl35.lib vcldb35.lib
PACKAGES =
DEFFILE =
# ---------------------------------------------------------------------------
PATHCPP = .;
PATHASM = .;
PATHPAS = .;
PATHRC = .;
DEBUGLIBPATH = $(BCB)\lib\debug
RELEASELIBPATH = $(BCB)\lib\release
# ---------------------------------------------------------------------------
CFLAG1 = -Od -Hc -w -Ve -r- -k -y -v -vi- -c -b- -w-par -w-inl -Vx -tWC
CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -H=$(BCB)\lib\vcl35.csm
CFLAG3 = -Tkh30000
PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(DEBUGLIBPATH)
-I$(BCB)\include;$(BCB)\include\vcl \
-$Y -$W -$O- -v -JPHN -M
RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl
AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zd
LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(DEBUGLIBPATH) -ap -Tpe -x -Gn -v
IFLAGS =
# ---------------------------------------------------------------------------
ALLOBJ = c0x32.obj $(OBJFILES)
ALLRES = $(RESFILES)
ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib
# ---------------------------------------------------------------------------
!ifdef IDEOPTIONS
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1041
CodePage=932
[Version Info Keys]
CompanyName=
FileDescription=Executable (Console)
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=
[Excluded Packages]
e:\CBuilder3\Bin\dclstd35.bpl=Borland Standard Components
e:\CBuilder3\Bin\dcldb35.bpl=Borland Database Components
e:\CBuilder3\Bin\dcl31w35.bpl=Borland 1.0 Compatibility Components
C:\WINNT\System32\bcbsmp35.bpl=Borland C++ Sample Components
C:\WINNT\System32\dclocx35.bpl=Borland Sample Imported ActiveX Controls
e:\CBuilder3\Bin\dclqrt35.bpl=Borland QuickReport Components
e:\CBuilder3\Bin\rcexpert.bpl=Borland Resource Expert
e:\CBuilder3\Bin\dcltee35.bpl=Borland TeeChart Components
C:\WINNT\System32\ibsmp35.bpl=Borland C++ InterBase Alerter Component
e:\CBuilder3\Bin\dclint35.bpl=Borland International Tools
e:\CBuilder3\Bin\dcldss35.bpl=Borland Decision Cube Components
e:\CBuilder3\Bin\dclnet35.bpl=Borland Internet Components
C:\WINNT\System32\NMFast35.bpl=NetMasters Fastnet Tools
e:\CBuilder3\Bin\dclmid35.bpl=Borland Midas Components
[Debugging]
DebugSourceDirs=$(BCB)\source\vcl
[Parameters]
RunParams=
HostApplication=
!endif
# ---------------------------------------------------------------------------
# MAKE ZNV
# ---------------------------------------------------------------------------
# IDE ?WFNgt@C堅?NV?p돨♪뱉B
# R}hC?MAKE [eBeB?p돨rh룬쌩璥謙텯
# ---------------------------------------------------------------------------
.autodepend
# ---------------------------------------------------------------------------
!if !$d(BCC32)
BCC32 = bcc32
!endif
!if !$d(DCC32)
DCC32 = dcc32
!endif
!if !$d(TASM32)
TASM32 = tasm32
!endif
!if !$d(LINKER)
LINKER = ilink32
!endif
!if !$d(BRCC32)
BRCC32 = brcc32
!endif
# ---------------------------------------------------------------------------
!if $d(PATHCPP)
.PATH.CPP = $(PATHCPP)
.PATH.C = $(PATHCPP)
!endif
!if $d(PATHPAS)
.PATH.PAS = $(PATHPAS)
!endif
!if $d(PATHASM)
.PATH.ASM = $(PATHASM)
!endif
!if $d(PATHRC)
.PATH.RC = $(PATHRC)
!endif
# ---------------------------------------------------------------------------
$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE)
$(BCB)\BIN\$(LINKER) @&&!
$(LFLAGS) +
$(ALLOBJ), +
$(PROJECT),, +
$(ALLLIB), +
$(DEFFILE), +
$(ALLRES)
!
# ---------------------------------------------------------------------------
.pas.hpp:
$(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
.pas.obj:
$(BCB)\BIN\$(DCC32) $(PFLAGS) {$< }
.cpp.obj:
$(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
.c.obj:
$(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< }
.asm.obj:
$(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@
.rc.res:
$(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $<
# ---------------------------------------------------------------------------
Whoami.cpp
─────
#pragma hdrstop
#include
#include
#include "account.h"
//---------------------------------------------------------------------------
USEUNIT("account.cpp");
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char **argv)
{
try{
TNTAccount *accnt = new TNTAccount();
cout << accnt->NTAccount << endl;
}
catch( string Ex ){
cout << Ex << endl;
}
getchar();
return 0;
}
account.h
─────
//---------------------------------------------------------------------------
#ifndef accountH
#define accountH
#include
#include
using namespace std;
class TNTAccount
{
protected:
string __fastcall GetUserName( void );
string __fastcall GetDomain( void );
string __fastcall GetNTAccount( void );
string __fastcall GetErrorMsg( DWORD ErrNum );
public:
__fastcall TNTAccount();
__property string UserName = { read=GetUserName };
__property string Domain = { read=GetDomain };
__property string NTAccount = { read=GetNTAccount };
};
//---------------------------------------------------------------------------
#endif
account.cpp
──────
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "account.h"
//***********************************************
//* 함수명 : TNTAccount
//* 클래스명: TNTAccount
//* 리턴형 : 없음
//* 인수 : 없음
//* 설명 : 생성자
//***********************************************
__fastcall TNTAccount::TNTAccount()
{
}
//***********************************************
//* 함수명 : GetErrorMsg
//* 클래스명: TNTAccount
//* 리턴형 : string
//* 인수 : ErrNum ( Windows Error Code )
//* 설명 : Windows 에러 코드를
//* 일본어 메세지로 변환
//***********************************************
string __fastcall TNTAccount::GetErrorMsg( DWORD ErrNum )
{
string Result;
char *lpMsgBuf;
DWORD cnBytes;
cnBytes = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER :
FORMAT_MESSAGE_FROM_SYSTEM :
FORMAT_MESSAGE_MAX_WIDTH_MASK,
NULL,
ErrNum,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(char*)&lpMsgBuf, 0, NULL );
if (cnBytes > 0)
{
Result = lpMsgBuf;
LocalFree(lpMsgBuf);
}
return Result;
}
//***********************************************
//* 함수명 : SetUserName
//* 클래스명: TNTAccount
//* 리턴형 : 없음
//* 인수 : 없음
//* 설명 : 사용자명을 취득
//***********************************************
string __fastcall TNTAccount::GetUserName( void )
{
DWORD dwNameSize = 0;
char *pBuffStr = NULL;
string Result;
//UserName size 취득
::GetUserName( NULL, &dwNameSize );
try{
pBuffStr = new char[dwNameSize];
if( !::GetUserName( pBuffStr, &dwNameSize ))
{
throw GetErrorMsg(GetLastError());
}
Result = pBuffStr;
}
__finally{
delete[] pBuffStr;
}
return Result;
}
//***********************************************
//* 함수명 : SetDomain
//* 클래스명: TNTAccount
//* 리턴형 : 없음
//* 인수 : 없음
//* 설명 : 도메인명을 취득
//***********************************************
string __fastcall TNTAccount::GetDomain( void )
{
DWORD dwSidSize=0,
dwDomainSize=0;
SID_NAME_USE Snu;
SID *pSid;
char *pBuffStr;
string Result;
//Sid와 Domain의 size를 취득
LookupAccountName( NULL, UserName.c_str(), NULL, &dwSidSize,
NULL, &dwDomainSize, &Snu );
try{
pSid = (SID *)new BYTE[dwSidSize];
pBuffStr = new char[dwDomainSize];
if(!LookupAccountName( NULL, UserName.c_str(), pSid, &dwSidSize,
pBuffStr, &dwDomainSize, &Snu ))
{
throw GetErrorMsg(GetLastError());
}
Result = pBuffStr;
}
__finally{
delete[] pSid;
delete[] pBuffStr;
}
return Result;
}
//***********************************************
//* 함수명 : GetNTAccount
//* 클래스명: TNTAccount
//* 리턴형 : 없음
//* 인수 : 없음
//* 설명 : 도메인과 유저명을 취득
//***********************************************
string __fastcall TNTAccount::GetNTAccount( void )
{
return Domain+"\\"+UserName;
}
//---------------------------------------------------------------------------
#pragma package(smart_init)