2009년 11월 23일 월요일

윈도우 7 Open Command Here

윈도우 XP에서 매우 유용하게 썼던 파워토이의 Open Command Here 기능이

그냥 오른쪽 마우스 버튼을 눌렀을 때는 나타나지 않아서 없는 줄 알았는데

검색을 좀 해보니 윈도우 7은 그 기능을 아예 내장하고 있다는 것을 찾았습니다.

Shift + 오른쪽 마우스 버튼 : 여기서 명령 창 열기
Shift + Ctrl + 오른쪽 마우스 버튼 : 여기서 명령 창 열기 (관리자권한)

2009년 11월 17일 화요일

윈도우 7 스티커 메모 활용하기

윈도우 7에 기본 프로그램 중 하나인 스티커 메모는
포스트잇 처럼 바탕화면 여기저기에 붙여두고 쓸 수 있으며,
메모를 직접 지우기 전에는 컴퓨터를 리부팅해도 내용이 지워지지 않습니다.

예전에는 스티키 패드를 사용했는데 윈도우 7으로 오면서는 그럴 필요가 없어졌네요.


위 그림과 같은 단축키를 사용하여 메모를 좀 더 효과적으로 정리할 수 있습니다.

2009년 11월 10일 화요일

Microsoft Office Outlook을 시작할 수 없습니다. Outlook 창을 열 수 없습니다.

윈도우를 새로 깔고 이것저것 설치하다 잘못 설치한게 있어 삭제하다 보니

Microsoft Office Outlook을 시작할 수 없습니다. Outlook 창을 열 수 없습니다.

라는 메시지가 나오면서 아웃룩이 실행되지 않더군요.

별별 짓을 다 해봐도 안되다가 다음과 같이 해결했습니다.

outlook.exe /resetnavpane

아래 블로그에서 참고한 내용입니다.

윈도우 7에서 telnet 사용하기

윈도우 XP까지 cmd 창에서 기본으로 제공하던 telnet 명령어가
윈도우 7부터는 기본설치가 되어있지 않도록 바뀌었습니다.
윈도우 7에서도 텔넷을 cmd를 통해 사용하고 싶다면 다음과 같이 하면 됩니다.

제어판 > 프로그램 > Windows 기능 사용/사용안함

위의 메뉴를 선택하면 다음 그림과 같은 화면이 뜹니다.


빨간색으로 표시를 해둔 Telnet Client 를 선택하고 확인 버튼을 누르면
cmd 창에서 telnet 명령어를 사용할 수 있습니다.

2009년 11월 7일 토요일

Visual C++에서 Xbox360 컨트롤러 제어하기

Visual C++에서 Xbox360 컨트롤러를 제어하기 위해서는 DirectX SDK 가 필요합니다.

DirectX SDK는 아래 링크에서 다운받을 수 있습니다.


XBox 컨트롤러를 사용하기 위해서는 xinput.h 파일을 인클루드 하고, xinput.lib 라이브러리를 추가해줘야 합니다. Win32 DLL 을 만들기 위해서라면 windows.h 도 포함시켜야 합니다.

#include <xinput.h>
#pragma comment(lib, "xinput.lib")

그 이후 아래 코드와 같이 사용할 수 있습니다.
컨트롤러 제어를 해야 하니 아래 코드는 스레드로 만드는게 좋겠습니다.

XINPUT_STATE state;
ZeroMemory(&state, sizeof(XINPUT_STATE)); // 컨트롤러 상태 초기화
DWORD result = XInputGetState(0, &state); // 컨트롤러 상태 얻어오기

while (result == ERROR_SUCCESS) {
// 컨트롤러 제어 코드가 들어가야 함

Sleep(30); // CPU 점유을 100%를 방지하기 위해
result = XInputGetState(0, &state); // 다음 상태 얻어오기
}

컨트롤러 제어 코드는 버튼제어, 진동제어, 스틱제어, 트리거 제어로 아래와 같이 구현할 수 있습니다.

버튼제어는 다음과 같은 방식으로 해결할 수 있습니다.

if (state.Gamepad.wButtons & XINPUT_GAMEPAD_X) {
// X 버튼이 눌렸을때 할 일
}

xinput.h에 정의된 버튼의 상태를 나타내는 매크로는 다음과 같습니다.

#define XINPUT_GAMEPAD_DPAD_UP          0x0001
#define XINPUT_GAMEPAD_DPAD_DOWN        0x0002
#define XINPUT_GAMEPAD_DPAD_LEFT        0x0004
#define XINPUT_GAMEPAD_DPAD_RIGHT       0x0008
#define XINPUT_GAMEPAD_START            0x0010
#define XINPUT_GAMEPAD_BACK             0x0020
#define XINPUT_GAMEPAD_LEFT_THUMB       0x0040
#define XINPUT_GAMEPAD_RIGHT_THUMB      0x0080
#define XINPUT_GAMEPAD_LEFT_SHOULDER    0x0100
#define XINPUT_GAMEPAD_RIGHT_SHOULDER   0x0200
#define XINPUT_GAMEPAD_A                0x1000
#define XINPUT_GAMEPAD_B                0x2000
#define XINPUT_GAMEPAD_X                0x4000
#define XINPUT_GAMEPAD_Y                0x8000

진동은 다음 코드로 제어할 수 있습니다.

XINPUT_VIBRATION vibration;
ZeroMemory(&vibration, sizeof(XINPUT_VIBRATION));
vibration.wLeftMotorSpeed = 65535; // 0 ~ 65535 사이의 수
vibration.wRightMotorSpeed = 0; // 0 ~ 65535 사이의 수
XInputSetState(0, &vibration);

아날로그 스틱의 값은 다음변수에 저장되어 있습니다.

state.Gamepad.sThumbLX // 왼쪽 아날로그 스틱 X축
state.Gamepad.sThumbLY // 왼쪽 아날로그 스틱 Y축
state.Gamepad.sThumbRX // 오른쪽 아날로그 스틱 X축
state.Gamepad.sThumbRY // 오른쪽 아날로그 스틱 Y축

트리거에 해당하는 값은 다음 변수에 저장되어 있습니다.

state.Gamepad.bLeftTrigger // 왼쪽 트리거
state.Gamepad.bRightTrigger // 오른쪽 트리거

2009년 11월 2일 월요일

윈도우 7의 빠른 디스플레이 변경

대부분의 노트북은 Fn + 화면전환 키를 통해 프로젝터나 외부 모니터 출력을 쉽게 바꿀 수 있도록 지원하고 있습니다. 윈도우 7에서는 OS차원에서 이 기능을 지원하고 있네요.

단축키로 윈도우키 + P 를 누르면 다음과 같은 화면이 뜹니다.


프로젝터 뿐 아니라 듀얼모니터를 사용하고 있는 경우에도 해당이 됩니다.

각 기능은 그림 및 설명이 잘 되어있기 때문에 생략하도록 하겠습니다.

2009년 11월 1일 일요일

코드에서 라이브러리 추가하기

비주얼 스튜디오에서 라이브러리를 추가하려면 프로젝트 속성 창을 열어서
일일이 추가해주는 방법이 있지만, 다른 프로젝트에 같은 소스파일을 사용하려고 하면
또 라이브러리를 추가해줘야 하는 번거로움이 있습니다.
이런 경우 소스코드에 라이브러리를 추가해놓는다면 저런 번거로움은 사라지겠죠?

아래 코드를 이용하면 됩니다.

#pragma comment(lib, "라이브러리파일")



문자열 인코딩 변환

ATL의 문자열 인코딩 변환 매크로를 사용하면 문자열 인코딩을 쉽게 변환할 수 있습니다.

char* string = "hello world";
wchar_t* wstring = L"안녕하세요?";

USES_CONVERSION;
wchar_t* wstr = A2W ( string ); // 멀티바이트 -> 유니코드
char* str = W2A ( wstring ); // 유니코드 -> 멀티바이트

이 매크로를 사용하기 위해서는 관련 헤더파일이 인클루드 되어있어야 합니다.
ATL 프로젝트는 따로 할 필요는 없고
MFC 프로젝트나 Win32 프로젝트에서는 다음과 같이 헤더를 추가합니다.

MFC 프로젝트
#include <comdef.h>
#include <afxpriv.h>

Win32 프로젝트
#include <comdef.h>
#include <crtdbg.h>
#include <atlconv.h>

혹시 링크에러가 나는 경우에는 atls.lib 라이브러리를 추가해주면 됩니다.

Visual C++에서 시리얼 포트 연결하기

지금까지 시리얼 포트를 열때 다음과 같이 쓰고있었습니다.

[code cpp]HANDLE comm = CreateFile(
   "COM3",
   GENERIC_READ | GENERIC_WRITE,
   0,
   NULL,
   OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); [/code]

그런데 저렇게 하면 10번 이상의 포트는 열리지 않는 문제점이 있습니다.
이것때문에 오늘 또 한시간정도 삽질을 햇군요 -_-;;;

10번 이상의 포트를 열고 싶을 때는 다음과 같이 써줘야 합니다.

[code cpp]HANDLE comm = CreateFile(
   "\\\\.\\COM10",
   GENERIC_READ | GENERIC_WRITE,
   0,
   NULL,
   OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);[/code]
10번 이하의 포트도 이 방법으로 열 수 있으니 항상 이렇게 쓰는것이 좋겠습니다.

윈도우 7 XP Mode 설치하기

윈도우 7 프로페셔널 이상 버전에서 사용할 수 있는 XP Mode 는
윈도우 7 설치시 기본으로 설치되는 것이 아니라  
Windows XP Mode 와 Windows Virtual PC를 추가로 설치해야 사용할 수 있습니다.
아래 사이트에서 해당 소프트웨어를 다운받을 수 있습니다.


이 기능은 PC의 프로세서가 가상화 기술을 지원해야 사용할 수 있습니다.
내 컴퓨터가 PC가 가상화를 지원하는지 알아보려면 위의 링크에 2번 항목을 통해 다운받을 수 있는 도구를 통해 확인할 수 있습니다.

내 컴퓨터가 가상화를 지원한다면 3번 항목을 통해 사용하고 있는 윈도우 7 버전과 언어를 선택하면 해당 다운로드 링크가 나타납니다.

Windows XP Mode를 선택하여 WindowsXPMode_ko-kr.exe 파일을 다운받고,
Windows Virtual PC 를 선택하여 Windows6.1-KB958559-x64.msu 파일을 다운받습니다.
(윈도우 7 버전과 언어에 따라 파일 이름이 다를 수 있습니다.)

두 파일을 실행하여 설치를 끝내고나면
시작 > 모든 프로그램 > Windows Virtual PC > Windows XP Mode를 선택하면 XP Mode를 실행할 수 있습니다.