C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[148] [팁] WhoamI Source Code
박지훈.임프 [cbuilder] 8969 읽음    2001-07-31 18:05
이 팁은 담비님(천리안 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)

+ -

관련 글 리스트
148 [팁] WhoamI Source Code 박지훈.임프 8969 2001/07/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.