ip/ mac 주소 얻기

const char* get_mac()

{

DWORD dwRetVal = 0;

PIP_ADAPTER_INFO pai = 0;

ULONG* pul = 0;


static char buf [20] ={};


ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);

pai = (IP_ADAPTER_INFO *)calloc(sizeof (IP_ADAPTER_INFO), 1);

if (pai == NULL) {

printf( "Error allocating memory needed to call GetAdaptersinfo\n");

return 0;

}


if (GetAdaptersInfo(pai, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {

pul = new ULONG[ulOutBufLen];

pai = PIP_ADAPTER_INFO(pul);

if (pai == NULL) {

printf( "Error allocating memory needed to call GetAdaptersinfo\n");

return 0;

}

}

if ((dwRetVal = GetAdaptersInfo(pai, &ulOutBufLen)) == NO_ERROR) 

{

while( pai )

{

if( strcmp( pai->IpAddressList.IpAddress.String, "0.0.0.0" ))

break;


pai = pai->Next;

}


BYTE addr [MAX_ADAPTER_ADDRESS_LENGTH] = {};



if(pai)

{

memcpy (addr, pai->Address, sizeof (addr));

sprintf_s( buf, sizeof(buf), "%0.2X-%0.2X-%0.2X-%0.2X-%0.2X-%0.2X", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5] );

}



if(pul)

delete [] pul;

}else{


printf( "Failed to get an AdapterInfo!" );

if(pai)

free(pai);

return 0;

}

return buf;


}


void get_ip()

{

WORD wVersionRequested;

WSADATA wsaData;


char name[255]= {0,};

CString ip;


PHOSTENT hostinfo;

wVersionRequested = MAKEWORD(2,0);


try{

if(WSAStartup(wVersionRequested, & wsaData))

throw WSAGetLastError();

if( gethostname(name, sizeof(name)) || !(hostinfo = gethostbyname(name)))

throw WSAGetLastError();


ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);

printf("\n ip : %s \n", ip.GetString());


WSACleanup();


}

catch(int n)

{

WSACleanup();

printf("WSAGetLastError : %d\n",n);

}

}

'c/c++' 카테고리의 다른 글

MMF(Memory Mapping File) & Shared Memory  (0) 2013.03.26
JSON 사용하기  (0) 2013.03.13
서비스  (0) 2013.02.25
const 과 #define  (0) 2013.01.30
구조체  (0) 2013.01.30

서비스

서비스의 종류

  • 윈도우 서비스    SDK
  • 드라이버 서비스    DDK




- 현재 문제점

  1.  드라이버 서비스 설치
  2.  서비스 설치가 되면 모든 계정에서도 설치가 되는가 
  3.  서비스를 설치하는데 권한이 필요
- 고려할점
계정에 비밀번호를 적용하지 않은 사용자 


'c/c++' 카테고리의 다른 글

JSON 사용하기  (0) 2013.03.13
ip/ mac 주소 얻기  (0) 2013.02.25
const 과 #define  (0) 2013.01.30
구조체  (0) 2013.01.30
함수에서 값을 반환하는 방법  (0) 2013.01.18

BOOK


  1. TCP/IP 소켓 프로그래밍 (윤성우)
  2. 글로벌 소프트웨어를 꿈꾸다 (김익환)
  3. 리딩으로 리드하라
  4. 아키텍트이야기
  5. 리눅스 커맨드라인 완벽 입문서
  6. 우분투 환경에서 C언어로 배우는 리눅스 프로그래밍
  7. C++코딩의 정석

'기록 > 읽고 싶은 책' 카테고리의 다른 글

dddd  (0) 2013.05.10

뜨거운 침묵


뜨거운 침묵

저자
백지연 지음
출판사
중앙북스 | 2010-03-10 출간
카테고리
자기계발
책소개
세상이 먼저 나를 돌아보게 하는 힘, 뜨거운 침묵!MBC 뉴스데...
가격비교



빌 게이츠가 스스로 IT의 황제라고 소리쳐 알리지 않아도 세상이 그를 알듯,

우리 어머니들이 우리를 키우느라 당신 마음속이 얼마나 짓물렀는지 일일이 말하지 않아도

부모가 된 후 그 마음을 깨달은 것처럼, 조용하지만 위대한 힘을 지닌 것이 바로 뜨거운 침묵이다.


나는 성실이란 단어를 좋아합니다. 

성실은 내 신념과도 같은 말입니다. 성실이란 단어는 반드시 열매를 가져다줍니다. 

남의 성공은 반드시 이유가 있는 것이고, 

내 실패 또한 반드시 이유가 있습니다. 

노력이 없으면 성공은 없습니다. 실패가 있다 하더라도 계속 노력하면 종국에 가선 반드시 이루게 됨을 나는 믿습니다.


남의 성공을 부러워하지 말고 질시하지도 말라,

나약한 인간의 한ㄱ를 넘지 못해 내 마음속에서 그런 생각이 스멀스멀 기어 오르면 이런 생각으로 청소하라.

'어제 새벽 내가 자는 사이에 저 아이가 또 11바퀴를 뛰었군'


긍정적인 생각이 들 때와 부정적인 생각이 들 때 

먼저 할 일은 진단과 처방이다.

진단한다 함은 부정적인 생각이 들 때와 긍정적인 생각으로 움직일 때를 분류해 기록해 보는 것이다.

나는 배고플 때, 아침에 일어난 직후, 냄새가 좋지 않은 곳에 있을 때, 내가 해야 될 책임을 망쳤을 때, 

무서운 영화를 보았을 때, 자기 직전에 라면을 먹었을 때, 햇볕이 따가울 때 부정적인 생각이 든다.

반면에 샤워하고 난 직후, 특히 샤워하고 나서 커피 마실 때, 맛있다는 소리가 절로 나오는 음식을 먹을 때, 

로맨틱 코미디 영화를 본 직후, 아주 아름다운 음악이나 글을 읽은 직후,  긍정적인 생각이 든다.

내가 어떨 때 큰 사고를 저질렀는지, 후회할 행동을 했는지 또 내가 언제 위험한 상황에서 별 무리 없이 일을 잘 처리했는지, 등을 떠올려 보라.

그다음 처방이라는 단계는 더욱 간단하다. 

생각이 부정적으로 흐르는 상황에서는 중요한 일이나 사람 만나는 일 따위는 하지 않기로 정하거나, 빨리 제거하거나 대체하는 것이다

예) 배고플 때는 중요한 회의를 하지 않는다. 해야 한다면 간단하게 뭘 먹고 한다.

내 생각이 부정적으로 흐른느 상황에서 가장 중요한 일을 하기 위해 생각이 긍정적으로 흐르게 하는 상황을 가능한 많이 만드는 것이다.


관계에 대한 여러 조언이 있지만, 좋은 관계를 맺기 위해 가장 중요한 토대는 우선 자기 마음 자세이다.

기대지 않고 똑바로 서는 것이 중요하다. 

각자 똑바로 섰을 때, 기댄 것이 아닐 때 건강한 관계를 형성할 수 있는 토대가 마련된다.

가정에서. 학교에서, 직장에서 사랑하는 사랑하는 사람과 좋은 관계를 맺고 싶다면 

우선 첫째 조건이 기대지 않고 똑바로 서는 것이다.



 

'기록 > ' 카테고리의 다른 글

인생학교: 일  (0) 2013.04.23
스크럼과 XP  (3) 2013.03.11
독립연습  (0) 2013.02.17
늦지 않았어 지금 시작해  (0) 2012.05.16
런던에 미치다  (0) 2012.02.13

API _ 선, 박스, 도형 그리기

출처

http://blog.naver.com/PostView.nhn?blogId=eunbear1030&logNo=70033469547&redirect=Dlog&widgetTypeCall=true

]선(라인)그리기

MoveToEx와 LineTo라는 두 개의 함수를 쌍으로 사용

MoveToEx함수는 그리는 시작점으로 그리기 좌표를 이동시키는 기능

LineTo함수는 MoveToEx함수를 실행한 후에 그 위치부터 라인을 그리고자 할때 사용

 

BOOL MoveToEx( 
HDC hdc, // 디바이스 컨텍스트 핸들
int X, // 새로운 위치의 x좌표
int Y, // 새로운 위치의 y자표
LPPOINT lpPoint // 이전 위치 좌표
);

 

BOOL LineTo( 
HDC hdc, // 디바이스 핸들
int nXEnd, // 그리는 좌표 종점 x
int nYEnd // 그리는 좌표 종점 y
);

 

]박스 그리기

박스를 그리는 함수 중 중요한 함수는 2개

  1. Rectangle함수 - 일반적인 박스를 그리는 함수
  2. RoundRect 함수 - 모서리가 둥근 박스를 그리는 함수

BOOL Rectangle( 
HDC hdc, // 디바이스 컨텍스트 핸들 
int nLeftRect, // 좌측 x좌표
int nTopRect, // 상단 y좌표
int nRightRect, // 우측 x좌표
int nBottomRect //하단 y좌표
);

BOOL RoundRect( 
HDC hdc, // 디바이스 컨텍스트 핸들
int nLeftRect, // 좌측 x좌표
int nTopRect, // 상단  y좌표
int nRightRect, // 우측 x좌표
int nBottomRect, // 하단 y좌표
int nWidth, // 모서리의 가로측 지름
int nHeight // 모서리의 세로측 지름
); 

]다양한 원 그리기

  1. Ellipse함수 - 설정한 박스영역에 맞는 원을 그려줌
  2. Arc함수 - 설정된 영역에 그리기 시작좌표 (x,y)에서 종료지점 (x,y)까지 원호를 그려줌
  3. Chord함수 - 현을 그려줌
  4. Pie함수 - 부채꼴을 그려줌

BOOL Ellipse( 
HDC hdc, // handle to device context 
int nLeftRect, // 좌측 x좌표
int nTopRect, // 상단 y좌표
int nRightRect, // 우측 x좌표
int nBottomRect // 하단 y좌표

);

BOOL Arc( 
HDC hdc, // 디바이스 컨텍스 핸들 
int nLeftRect, // 좌측 x좌표
int nTopRect, // 상단 y좌표
int nRightRect, // 우측 x좌표
int nBottomRect, // 하단 y좌표
int nXRadial1, // 그리기를 시작하는 x지점
int nYRadial1, // 그리기를 시작하는 y지점
int nXRadial2, // 그리기를 종료하는 x지점
int nYRadial2 // 그리기를 종료하는 y지점
);

BOOL Chord( 
HDC hdc, // 디비이스 컨텍스 핸들
int nLeftRect, // 좌측 x좌표
int nTopRect, // 상단 y좌표
int nRightRect, // 우측 x좌표
int nBottomRect, //하단 y좌표 
int nXRadial1, // 그리기를 시작하는 x지점
int nYRadial1, // 그리기를 시작하는 y지점
int nXRadial2, // 그리기를 종료하는 x지점
int nYRadial2 // 그리기를 종료하는 y지점

);

BOOL Pie( 
HDC hdc, // 디비이스 컨텍스 핸들
int nLeftRect, // 좌측 x좌표
int nTopRect, // 상단 y좌표
int nRightRect, // 우측 x좌표
int nBottomRect, //하단 y좌표 
int nXRadial1, // 그리기를 시작하는 x지점
int nYRadial1, // 그리기를 시작하는 y지점
int nXRadial2, // 그리기를 종료하는 x지점
int nYRadial2 // 그리기를 종료하는 y지점

);


]다각형과 poly Line

다각형은 여러점을 연결하는 도형을 의미, Poly Line은 여러점에 직선을 연결한 것을 의미

 

Polygon함수 - 다각형을 그릴때 이용

Polyline함수 - Poly Line을 그릴때 이용

 

BOOL Polyline( 
HDC hdc, // 디바이스 컨텍스트 핸들
CONST POINT *lppt, // 그릴 좌표
int cPoints // 좌표의 수
); 
BOOL Polygon( 
HDC hdc, // 디바이스 컨텍스트 핸들
CONST POINT *lppt, // 그릴 좌표
int cPoints // 좌표의 수
); 

]베지어 곡선 그리기

베지어곡선은 설정해준 최소 3개의 점 사이로 곡선이 그려지는 것을 의미, PolyBezier함수를 이용

 

BOOL PolyBezier( 
HDC hdc, // 디바이스 컨텍스트 핸들
CONST POINT *lppt, // 그릴 좌표
int cPoints // 좌표의 수
); 

*` 소스 *

 

#include <windows.h>


LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "DrawEx" ;
HWND        hwnd ;
MSG         msg ;
WNDCLASSEX  wndclass ;

 

wndclass.cbSize        = sizeof (wndclass) ;
wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc   = WndProc ;
wndclass.cbClsExtra    = 0 ;
wndclass.cbWndExtra    = 0 ;
wndclass.hInstance     = hInstance ;
wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName  = NULL ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;

 

RegisterClassEx (&wndclass) ;

 

hwnd = CreateWindow (szAppName,     
"기본그리기예제:DrawEx",   
WS_OVERLAPPEDWINDOW,  
CW_USEDEFAULT,        
CW_USEDEFAULT,        
CW_USEDEFAULT,        
CW_USEDEFAULT,        
NULL,                 
NULL,                 
hInstance,            
NULL) ;           

 

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

 

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

 

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC         hdc ;
PAINTSTRUCT ps ;
RECT rect;
POINT prevpos;
POINT pline[6]={50,133,146,99,246,133,247,212,58,216,50,133};
POINT pgon[4]={308,120,440,118,380,212,308,120};

 

switch (iMsg)
{
case WM_CREATE :
return 0 ;

case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect(hwnd,&rect);
//박스 그리기
Rectangle(hdc,rect.left+10,rect.top+10,rect.right-10,rect.bottom-10);
//라운드 박스 그리기    
RoundRect(hdc,rect.left+20,rect.top+20,rect.right-20,rect.bottom-20,20,20);
//원 그리기
Ellipse(hdc,rect.left+30,rect.top+30,rect.right-30,rect.bottom-30);
Arc(hdc,0,0,100,100,50,0,100,50);
//직선 그리기
MoveToEx(hdc,rect.left+10,rect.top+10,&prevpos);
LineTo(hdc,rect.right-10,rect.bottom-10);
//베지어 곡선
PolyBezier(hdc,pline,4);
//폴리 라인
Polyline(hdc,pline,6);
//다각형
Polygon(hdc,pgon,4);
EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}

 

*`출력 결과*

 


Win32 프로젝트를 빈프로젝트로 생성하여 DialogBox 띄우기

#include <Windows.h>

#include "resource.h"


BOOL CALLBACK MainDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);

HINSTANCE g_hInst;

HWND hDlgMain, hStatic;


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParma, int nCmdShow)

{

g_hInst = hInstance;


DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), HWND_DESKTOP, MainDlgProc);


return 0;

}


BOOL CALLBACK MainDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)

{

switch(iMessage)

{

case WM_INITDIALOG:

//SetWindowPos(hDlg, HWND_TOP, 100, 100, 0,0,SWP_NOSIZE);

break;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDOK:

case IDCANCEL:

EndDialog(hDlgMain, 0);

return TRUE;

}

return FALSE;

case WM_CLOSE:

PostQuitMessage(0);

return TRUE;

}


return FALSE;

}

독립연습


독립연습

저자
황상민 지음
출판사
생각연구소 | 2012-03-16 출간
카테고리
인문
책소개
온전한 ‘나’를 발견하는 순간, 무한한 자유를 맛볼 수 있다!심...
가격비교

1. 독립연습은 내 안에 숨은 나를 찾아가 악수를 청하고 독립을 선언하도록 이끄는 심리 해방서다.

 모두의 마음을 뒤흔다는 관계 막기의 괴로움, 갈등, 삶의 고단함 아픔으로부터 자유로워지는 방법을

'나'에게서 찾으라고 독려하는 책이다.


2. 남의 성공은 내 실패나 성공과 완전히 별개의 것이다.

우리는 흔히 남이 성공하면 내가 실패할 확룰이 높아진다고 생각하지만 그건 착각이다.


3. 솔직히 자기 자신조차 마음대로 바꾸기 어렵지 않은가. 나를 바꿀 수 없듯 상대방도 바꿀 수 없기는 마찬가지이다.


4. 혼자 있으면 '나'에 대해 많은 것을 생각하게 된다. 

아니, 그걸 넘어서서 남에 대해서도 생각이 깊어진다. 나 역시 그랬다. 나는 외로움이 힘이 되어 나를 키운다는 걸 깨달으며 차츰 어른이 되어 갔다. 외로움은 생각만큼 치열하지 않다. 또한 홀로 있음에 괴로워하고 외로워하는 시간은 결코 헛되지 않다. 괴로움이 쌓이고 외로움이 바닥까지 닿으면 묘하게도 에너지가 샘솟는다. 그건 외로움의 바닥에서도 살아갈 힘이 준다. 그래서 외로움은 생각보다 견딜 만 하다.


5. 





사람들이 보낸 상담으로 이루워진 책.

상담을 소개하고, 거기에 대한 답을 해주는데

보면 결국 답은 질문에 있는 경우가 많았다.


살아가는데 있어서 사람들의 고민이 비슷비슷 하다는 것.

그래서 인지 고민에 관심이 가지 않으면 읽기 힘든 점도 있었다.


서른살을 타겟으로 쓰여진 책 같은데, 

사실 서른살이 아니더라도 공감가는 부분이라던지, 이해 할 수 있는 부분이 많았다.


결론은 

남의 의식 생각하지말고

나에 대해서 행복에 대해서 깊이 생각하고, 나를 위할 줄 알아야 한다는 것. 


'기록 > ' 카테고리의 다른 글

스크럼과 XP  (3) 2013.03.11
뜨거운 침묵  (0) 2013.02.25
늦지 않았어 지금 시작해  (0) 2012.05.16
런던에 미치다  (0) 2012.02.13
미노의 별 볼일 있는 유럽 숙소 여행  (0) 2012.02.06

활성화된 화면 캡쳐 ScreenCapture


HBITMAP ScreenCapture(HWND hWnd)

{


HDC hScrDC, hMemDC;

HBITMAP hBitmap;

RECT rt;


GetWindowRect(GetForegroundWindow(), &rt);

// GetWindowRect(GetActiveWindow(), &rt);


rt.left = max(0, rt.left);

rt.right = min(rt.right, GetSystemMetrics(SM_CXSCREEN));

rt.top = max(0, rt.top);

rt.bottom = min(rt.bottom, GetSystemMetrics(SM_CYSCREEN));


hScrDC=CreateDC("DISPLAY",NULL,NULL,NULL);


hMemDC = CreateCompatibleDC(hScrDC);


hBitmap = CreateCompatibleBitmap(hScrDC, rt.right-rt.left, rt.bottom-rt.top);


SelectObject(hMemDC, hBitmap);


BitBlt(hMemDC, 0, 0, rt.right-rt.left, rt.bottom-rt.top, hScrDC, rt.left, rt.top, SRCCOPY);


DeleteDC(hMemDC);

DeleteDC(hScrDC);

InvalidateRect(hWnd, NULL, TRUE);


return hBitmap;

}


==================================================================================================

위의 함수를 호출하여 사용한다

핫키를 등록하여 Ctrl + F4가 눌리면 화면 캡쳐!

WM_PAINT에서 캡쳐된 화면을 그려줌 

case WM_CREATE:

RegisterHotKey(hWnd, 0, MOD_CONTROL, VK_F4);

break;


case WM_HOTKEY:

hBit = ScreenCapture(hWnd); // CTRL +F4

return 0;


case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

if(hBit != NULL) 

{

hMemDC = CreateCompatibleDC(hdc);

SelectObject(hMemDC, hBit);

GetObject(hBit, sizeof(BITMAP), &bmp);

BitBlt(hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, hMemDC, 0, 0, SRCCOPY);

DeleteDC(hMemDC);

}

EndPaint(hWnd, &ps);


return 0;


====================================================================================


먹고 기도하고 사랑하라


먹고 기도하고 사랑하라 (2010)

Eat Pray Love 
6.4
감독
라이언 머피
출연
줄리아 로버츠, 하비에르 바르뎀, 리차드 젠킨스, 바이올라 데이비스, 빌리 크루덥
정보
드라마, 로맨스/멜로 | 미국 | 139 분 | 2010-09-30


책은 그렇게 좋다던데

영화는 모르겠다.

 

일단 영화를 보게 된건

아침에 출근 준비하면서 티비에서 잠깐 보고,

그 내용에 빠져가지고

다음날 퇴근해서 바로 보게 되었다.

 

그 내용은

리즈가 로마에 도착해서 혼자 나레이션으로 말한 내용인데

 

가난한 한 사람이

매일 로또에 당첨되게 해달라고 신께 기도했다

"제발 로또에 당첨되게 해주세요"

어느날 신이 그 가난한 사람에게 대답해준다

"오, 아들아 제발 로또를 사렴"

 

뭘 하지도 않고, 내가 원하는 것을 기도하는건 어리석은 것이라는 걸

알고 있었는데, 

저 장면을 보는 순간 띵! 머리속이 띵! 하고 울렸다.

제발 행동이 우선이 되어야 한다.

 

이혼한 이유도 공감이 되지 않고,

급격한 감정 변화로 리즈가 이해되지는 않았지만

그래도 뭔가

변화와 마음가짐에 대해서 새로 생각해본다.

 

 

 

 

 

 

 

'기록' 카테고리의 다른 글

d  (0) 2013.05.08
실버라이닝 플레이북  (0) 2013.04.23
4월 3째주  (0) 2012.04.23
화차  (0) 2012.03.10
범죄와의 전쟁  (0) 2012.03.10

Shellexecute()

1. 응용프로그램 실행

ShellExcute(NULL, "open", "c:\\test.txt", NULL, NULL, SW_SHWONORMAL);

2. 특정 프로그램으로 원하는 파일 열기

3. 인터넷 익스플로러 사용하기

ShellExcute(NULL, "open", "iexplore", "http://www.tistory.com", NULL, SW_SHWONORMAL);

4. 응용프로그램의 인쇄 기능 사용하기

ShellExcute(NULL, "print", "c:\\test.txt", NULL, NULL, SW_SHWONORMAL);

5. 탐색기 실행

ShellExcute(NULL, "open", "explorer","c:\\test", NULL, SW_SHOW);

'c/c++ > 레퍼런스' 카테고리의 다른 글

ITaskSettings interface  (0) 2014.03.04
ILogonTrigger interface  (0) 2014.03.03
PathFindSuffixArray 경로에 찾고자 하는 문자열 있는지 확인  (0) 2013.01.16