본문 바로가기

분류 전체보기

Windows NT 4.0 Device Driver Kit Windows NT 4.0용 장치 드라이버를 개발하는데 필요한 예제와 헤더 및 라이브러리들이 포함되어 있습니다. 압축을 풀고 ISO 파일을 마운트하여 사용하면 됩니다. 더보기
Windows NT 4.0 Software Development Kit Windows NT 4.0용 소프트웨어를 개발하는 예제가 들어있는 SDK입니다. 압축을 풀면 ISO 파일이 나오는데 이를 가상 CD에 마운트해서 사용하면 됩니다. Windows 9x에서 설치시 오류가 발생할 수 있습니다. 더보기
Windows DDK 문서 IMEIMES.DOC - 11. IME File Format and Data Structures (IME 파일 포맷 및 데이터 구조) #2 IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong IME 파일 포맷과 데이터 구조체 (Part 2) IMM 및 IME의 데이터 구조체 아래 구조체들은 IMM 및 IME와의 통신에 사용됩니다. IME는 이들 구조체에 직접 접근할 수 있지만 어플리케이션을 그럴 수 없습니다. INPUTCONTEXT INPUTCONTEXT 구조체는 입력 컨텍스트와 관련된 데이터를 보관하는 내부 데이터 구조체입니다. /* INPUTCONTEXT */ typedef struct tagINPUTCONTEXT { HWND hWnd; BOOL fOpen; POINT ptStatusWndPos; POINT ptSoftKbdPos; DWORD fdwConv.. 더보기
Windows DDK 문서 IMEIMES.DOC - 11. IME File Format and Data Structures (IME 파일 포맷 및 데이터 구조) #1 IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong IME 파일 포맷과 데이터 구조체 (Part 1) 아래는 IME가 사용하는 IME 파일 포맷과 데이터 구조체에 대해 설명합니다. IME 파일 포맷 IME는 아래 필드들을 리소스의 버전 정보에서 정확히 지정할 필요가 있습니다. 이는 고정된 파일 정보 부분과 가변 길이 정보 부분으로 구성되어 있습니다. 리소스의 버전 정보에 관한 상세한 내용은 Microsoft Platform SDK를 참조하십시오. 아래는 IME 파일이 포함해야 하는 상세 정보 설정입니다. dwFileOS &nsbp;dwFileOS는 버전 정보의 최상위 블록에 명시되어야 하며 Windows 95 및 Windo.. 더보기
Windows DDK 문서 IMEIMES.DOC - 10. Windows NT/Windows 2000 Issues(윈도우 NT/윈도우 2000 배포) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong Windows NT/Windows 2000 배포 아래는 주로 Windows NT/Windows 2000과 관련된 특별한 주제를 다룹니다. 그러나 몇 가지는 Windows 98에도 적용가능합니다. IME와 현지어 호환성 Windows 2000은 어떤 현지 언어 버전에서도 완전한 기능의 IME를 지원합니다. 즉 여러분이 개발한 IME는 어떤 언어로 된 Windows 2000에서도 설치되고 사용될 수 있습니다. IME 개발자는 이를 고려하고 각 환경에서 테스트해보아야 할 것입니다. 이 새로운 기능은 IME 개발자가 작성한 IME 도움말이 다양한 언어의 운영체제에서도 잘 보이도록.. 더보기
Windows DDK 문서 IMEIMES.DOC - 9. IME Help File(IME 도움말 파일) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong IME 도움말 파일 IME 도움말 파일은 Windows 98, Windows NT 및 Windows 2000에서 새로 추가된 기능입니다. 시스템 펜 아이콘을 마우스 오른쪽 버튼으로 클릭 시 나타나는 메뉴에는 2개의 항목이 있습니다. 하나는 IME 시스템 설정이며 포커스가 놓인 스레드와 연결된 IME의 설정을 변경합니다. 다른 하나는 온라인 도움말 파일이나 활성화되지는 않습니다. 그러므로 이 메뉴 항목은 항상 회색으로 표시됩니다. 이 항목의 용도는 해당 IME의 온라인 도움말을 표시하기 위한 것이었으나 시스템이 IME에게 IME 도움말 파일의 이름을 설정할 방법을 제공하지 .. 더보기
Windows DDK 문서 IMEIMES.DOC - 8. IME Menu Functions (IME 메뉴 함수) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong IME 메뉴 함수 이 함수 집합의 목적은 시스템 작업 표시줄에서 IME 관련 아이콘의 개수를 줄이기 위함입니다. 이는 Windows 98 및 2000의 새로운 기능입니다. 현재의 hKL이 IME일 때, Windows 시스템 프로그램은 작업표사줄에 2개의 아이콘을 추가합니다. 하나는 System ML 아이콘으로, 시스템 작업 표시줄에서 현재의 키보드 레이아웃을 지시하고, 다른 하나는 시스템 펜 아이콘으로 활성화된 윈도우의 IME 상태를 보여줍니다. 보통 IME는 작업표시줄에 추가적으로 아이콘을 더 만들기도 합니다. 이 아이콘을 클릭 시 나타날 컨텍스트 메뉴는 전적으로 IME.. 더보기
Windows DDK 문서 IMEIMES.DOC - 7. Reconversion(재변환) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong 리컨버전(Reconversion) 리컨버전은 Windows 98 및 Windows 2000을 위한 새로운 IME 기능입니다. 이는 이미 어플리케이션의 문서에 입력된 문자열을 재변환하는 능력을 지원합니다. 특히 어떤 문자열이든 IME는 해당 문자열을 인식할 수 있고 이 문자열에 대한 발음 또는 글쇠 정보로 역변환할 수 있고, 이 발음 또는 글쇠에 대응되는 다른 단어들에 대한 후보 목록을 보여줄 수 있습니다. 새롭고 진보된 지능형 IME는 완전한 문장에 대해서도 인식하고 해석할 수 있습니다. IME가 완전한 문장 또는 문장의 일부분 같이 문자열과 관련하여 더 나은 정보를 제공.. 더보기
Windows DDK 문서 IMEIMES.DOC - 5. ImeSetCompositionString 함수, 6. Soft Keyboard(소프트 키보드) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong ImeSetCompositionString 함수 ImeSetCompositionString 함수는 IME 조합 문자열(Composition String)을 다루는 데 어플리케이션이 사용하는 함수입니다. 서로 다른 플래그를 지정함으로써 어플리케이션은 조합 문자열, 속성, 절(clause) 등을 수정할 수 있습니다. 이 함수의 두 번째 매개변수인 dwIndex는 어떻게 조합 문자열이 IME에서 조정되어야 하는지를 지정합니다. 이 값은 SCS_SETSTR ,SCS_CHANGEATTR, SCS_CHANGECLAUSE, SCS_QUERYRECONVERTSTRING와 같은 값을 포함.. 더보기
Windows DDK 문서 IMEIMES.DOC - 4. Generating Messages(메시지 생성하기) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong 메시지 생성하기 IME는 IME 메시지를 생성해야 합니다. IME가 변환 과정을 시작할 때 IME는 WM_IME_STARTCOMPOSITION 메시지를 생성합니다. 만일 IME가 조합 문자열을 변경할 때는 WM_IME_COMPOSITION 메시지를 생성합니다. IME가 메시지를 생성하는 방법에는 두 가지가 있습니다. 하나는 ImeToAsciiEx가 제공하는 lpdwTransKey 버퍼를 사용하는 방법이 있고 다른 하나는 ImmGenerateMessage 함수를 호출하는 방법입니다. 메시지를 생성하기 위해 lpdwTransBuf를 사용하기 IME가 초기화하는 이벤트는 입력 .. 더보기
Windows DDK 문서 IMEIMES.DOC - 3. IME Input Context(IME 입력 컨텍스트) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong IME 입력 컨텍스트 각 윈도우는 IME 입력 컨텍스트와 연결되어 있습니다. IMM은 IME 상태, 데이터 등을 관리하고 IME 및 어플리케이션과 통신하기 위해 입력 컨텍스트를 사용합니다. 기본 입력 컨텍스트 기본적으로 시스템은 기본 입력 컨텍스트를 각 쓰레드마다 생성합니다. IME를 인식하지 않는 모든 창에 대한 쓰레드는 이 컨텍스트를 공유합니다. 어플리케이션이 생성한 입력 컨텍스트 어플리케이션 윈도우는 중간 조합 문자열(Intermediate Composition String)을 포함하여 IME의 모든 상태를 관리하기 위해 윈도우 핸들을 입력 컨텍스트에 연결할 수 있습.. 더보기
Windows DDK 문서 IMEIMES.DOC - 2. IME User Interface(IME 사용자 인터페이스) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong IME 사용자 인터페이스 IME 사용자 인터페이스는 IME 윈도우, UI 윈도우 및 UI 윈도우에 포함되는 구성요소로 이루어집니다. 특징 IME 클래스는 미리 정의된 전역 클래스로서 파생 가능합니다. IME 클래스의 일반적인 특징은 다른 공용 컨트롤과 같습니다. 윈도우 인스턴스는 CreateWindowEx로 생성 가능합니다. STATIC 컨트롤처럼 IME 클래스로 만들어진 윈도우도 사용자 입력 자체에는 반응하지 않지만 컨트롤이 받을 수 있는 다양한 메시지를 수신하여 IME 사용자 인터페이스가 반응할 수 있게 합니다. 어플리케이션은 이 IME 클래스를 이용해 직접 생성하거나.. 더보기
Windows DDK 문서 IMEIMES.DOC - 1. Overview (개요) IME 개발을 위한 Win32 다국어 IME 개요 버전 1.32 최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong 이 문서는 어떻게 Windows 95, Windows 98, Windows NT 및 2000을 위한 IME를 개발할 지에 대한 기초를 소개합니다. 또한 이 문서는 IME 개발을 위해 Win32 다국어 IME를 위해 쓰일 API 레퍼런스 내용을 보충합니다. Overview(개요) IME User Interface(IME 사용자 인터페이스) IME Input Context(IME 입력 컨텍스트) Generating Messages(메시지 발생) ImeSetCompositionString 함수 Soft Keyboard(소프트 키보드) Reconversion(재전환) IME Me.. 더보기
윈도우 프로그램에서 콘솔창 띄우기 AllocConsole: 콘솔창을 하나 엽니다. 프로세스당 1개의 콘솔창만 생성할 수 있습니다. AttachConsole: 지정된 프로세스 번호가 소유한 콘솔창에 연결하고 텍스트를 입출력합니다. FreeConsole: 이 프로세스가 갖는 콘솔창을 닫습니다. 사용예 /* 사용 예 */ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPreviousInstance, LPSTR lpCmdLine, int nCmdShow) { AllocConsole(); freopen("CONIN$", "r", stdin); freopen("CONOUT$", "w", stdout); freopen("CONOUT$", "w", stderr); printf("Hello, World!\.. 더보기
Fake IME 예제입니다. Windows DDK에 샘플로 들어있는 Microsoft IME 예제인 Fake IME입니다. 윈도우 운영체제와 문자 입력에 관한 값 및 상태를 교환하는 방법이 들어있고 IME 문서인 IMEIMES.DOC와 IMEIMES2.DOC 파일이 첨부되어있습니다. Windows NT 4.0 및 Windows 95 DDK 버전(Fake IME 예제는 없고 문서만 제공되었음): Windows 98 DDK 버전 Fake IME 예제(DDK 문서 IMEIMES.DOC, IMEIMES2.DOC 포함됨): Windows 2003 DDK 버전 Fake IME 예제(DDK 문서 미포함, 유니코드를 지원하는 바이너리 생성 가능): DDK 문서의 원본이 Microsoft Word 95로 작성되어 스마트폰이나 최신버전의 MS Wor.. 더보기
Microsoft Windows 98 Device Driver Kit(DDK) Windows 98 DDK (98DDK.EXE)입니다. Windows 장치 드라이버를 만들기 위한 DDK 문서가 포함되어 있습니다. 총 3개의 파일로 분할 압축되어 있으며 ALZ 포맷입니다. 압축 해제시 약 25.1MB의 설치 파일이 있습니다. 더보기
Radu Sîrbu(라두 스르부) - Doi Străini(도이 스뜨러이니, 두 명의 이방인) Radu Sîrbu(라두 스르부) - Doi Străini(도이 스뜨러이니, 두 명의 이방인) Strada-i pustie noaptea e târzie (스뜨라다이 뿌스띠에 노압떼아 에 뜨르지에) 텅 빈 거리에 늦은 밤이죠 Numai în geamul tău lumina arde (누마이 은 지아물 떠우 루미나 아르데) 그대의 창에서만 빛이 새어나오죠 Odată mă iubeai la nebunie (오다떠 머 이우베아이 라 네부니에) 그대에게 사랑에 빠진 이후 Iar astăzi eu aștept singur în noapte (이아르 아스떠지 에우 아슈텝뜨 싱구르 은 노압떼) 밤 거리에 혼자 그대를 기다리죠 Nu-ți cer săruturi, nici măcar iubire (누-찌 체르 서루뚜리 .. 더보기
소켓 통신 #2 - AF_INET 사용하기 (4) 소켓 통신 #2 - AF_INET 사용하기 (4) - by Tapito 이전 포스팅까지 해서 서버와 클라이언트간의 연결 작업은 모두 마쳤습니다. 이제 본격적으로 데이터를 교환해보겠습니다. 데이터의 교환은 전송을 담당하는 send와 수신을 담당하는 recv 함수로 수행됩니다. int send(SOCKET s, const char * buf, int len, int flags); int recv(SOCKET s, char * buf, int len, int flags); s: 데이터를 주고 받을 대상을 나타내는 소켓입니다. buf: 주고 받을 데이터가 기록되어있거나 기록될 버퍼입니다. len: 버퍼의 크기(바이트)입니다. flags: 송수신 관련 옵션입니다. 현재로서는 0으로 해도 무방합니다. 반환 값은 상.. 더보기
소켓 통신 #2 - AF_INET 사용하기 (3) 소켓 통신 #2 - AF_INET 사용하기 (3) - by Tapito 소켓을 사용하기 위해 서버와 클라이언트 모두 각 단계별로 실행할 함수에 대해 알아보았습니다. 이를 종합하여 완성된 소스는 다음과 같습니다. Linux/Unix 에서는 잘 작동 될 것이라 생각되지만, Windows 사용자는 잘 작동이 안될 수 있습니다. WinSock이라는 약간 다른 함수를 사용하기 때문입니다. /* server.c */ int main(int argc, char * argv[]) { /* 자기 자신의 포트와 IP 주소 */ struct sockaddr_in sockaddrServer; /* sockaddrServer 구조체 인스턴스의 크기 */ int sockaddrServerLength = sizeof(sockadd.. 더보기
소켓 통신 #2 - AF_INET 사용하기 (2) 소켓 통신 #2 - AF_INET 사용하기 (2) - by Tapito 이번에는 서버가 되어 접속 요청을 받아들여보겠습니다. 클라이언트에서는 접속 대상의 sockaddr_in 구조체 세팅 - socket() 함수 - connect() 함수의 3단계로 접속이 진행된 반면, 서버는 자신의 sockaddr_in 구조체 세팅 - socket() 함수 - bind() 함수 - listen() 함수 - accept() 함수의 5단계로 접속이 진행됩니다. 1단계. sockaddr_in 구조체 설정하기 sockaddr_in 구조체 설정은 클라이언트와 크게 다르지 않습니다. 다만 자신의 IP 주소를 명시하지 않는다는 차이가 있습니다. /* 사용 예 */ struct sockaddr_in sockaddr_internet;.. 더보기
소켓 통신 #2 - AF_INET 사용하기 (1) 소켓 통신 #2 - AF_INET 사용하기 (1) - by Tapito sockaddr_in 구조체를 사용해 인터넷망에 연결해보겠습니다. 여기에서는 편의상 localhost(127.0.0.1):1435번 포트에 접속해 패킷을 교환합니다. 1단계. sockaddr_in 구조체 설정하기 접속할 네트워크, 접속 대상과 포트 번호를 설정합니다. /* sock_ex01.c */ struct sockaddr_in sockaddr_internet; /* 주소 체계로서 IPv4를 사용하는 인터넷망에 접속 */ sockaddr_internet.sin_family = AF_INET; /* 접속할 대상은 127.0.0.1 */ serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1"); /.. 더보기
소켓 통신 #1 - 소켓 통신에 쓰이는 구조체 소켓 통신 #1 - 소켓 통신에 쓰이는 구조체 - by tapito sockaddr 구조체 소켓을 통해 여러 형태의 네트워크를 거의 비슷한 방식으로 데이터를 교환할 수 있습니다. sockaddr는 일종의 추상 클래스처럼 소켓으로 통신하기 위한 여러 네트워크의 상위 구조체입니다. sockaddr 아래 인터넷망을 사용해 통신하는 구조체인 sockaddr_in과 유닉스 운영체에서 프로세스간 통신을 위해 사용되는 sockaddr_un의 구조체가 선언되어 있습니다. /* sockaddr 구조체 */ struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; sa_family: 소켓이 사용되는 네트워크의 종류입니다. 다음 값 중 하나가 올 수 있습니다. AF_IN.. 더보기
Hell, World! 버전 1.0 자바 소켓을 이용한 간단한 채팅 프로그램 Hell, World 1.0입니다. 사용 방법은 다음과 같습니다.아래 파일을 다운로드받아 압축을 풉니다. hellworld.jar, hellworld.bar, hellworld의 3가지 파일이 있습니다.윈도우 사용자라면 hellworld.bat를 더블클릭하면 되고 리눅스 사용자라면 터미널에서 $ ./hellworld을 입력하면 됩니다. 그러면 아래와 같은 화면이 나타날 것입니다.메시지화면: 메시지가 출력되는 채팅의 주 화면입니다. 메시지 앞에는 4가지 중 하나의 표시가 올 수 있습니다.>> : 상대방으로부터 나에게 수신한 메시지입니다. ># : 프로그램이 나에게 알려주는 메시지입니다. 더보기
Java AWT로 메뉴 넣기 창을 띄웠으니 메뉴도 넣어보겠습니다. Frame을 상속한 클래스에 MenuBar를 멤버변수로 선언합니다. -- FormMain.java -- /* FormMain.java */ public class FormMain extends Frame { public static final long serialVersionUID = 0x9382942838495039L; /* 멤버로 MenuBar 선언 */ private MenuBar menuBar; public FormMain() { super(); this.setSize(800, 600); this.setVisible(true); this.addWindowListener(new FormMainWindowAdapter()); /* MenuBar 인스턴스 생성하고 .. 더보기
Java AWT로 창 닫기 구현하기 창 닫기를 포함하여 창에 입력되는 모든 동작은 이벤트 처리기를 통해 처리됩니다. 이벤트 처리기는 별도의 클래스에 따로 선언이 되어 Frame.addWindowListener 메서드로 이 창에서 사용할 이벤트처리기를 지정합니다. /* FormMain.java */ package com.tapito.ui; import java.awt.*; public class FormMain extends Frame { public static final long serialVersionUID = 0x9382942838495039L; public FormMain() { super(); this.setSize(800, 600); this.setVisible(true); this.addWindowListener(new For.. 더보기
Java AWT로 빈 프레임 띄우기 자바의 AWT로 띄울 프레임의 이름을 FormMain이라 하면, FormMain.java의 내용은 아래와 같습니다. /* FormMain.java */ /* 패키지명 지정 */ package com.tapito.ui; /* AWT 관련 클래스 사용 */ import java.awt.*; /* java.awt.Frame을 상속하여 FormMain 클래스 선언 */ public class FormMain extends Frame { /* 이 프레임의 고유 식별 번호를 지정합니다. 8바이트 정수로 임의의 값을 지정하면 됩니다. 없어도 무방하지만 컴파일 시 경고가 뜹니다. */ public static final long serialVersionUID = 0x9382942838495039L; public For.. 더보기
자바로 소켓 사용하는 예 서버측 소스 /* Server.java */ /* Socket 클래스를 사용하기 위한 패키지 import */ import java.net.*; /* 데이터의 입출력 관련 클래스를 사용하기 위한 패키지 import */ import java.io.*; public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; // 서버용 대기 소켓 Socket socket = null; // 데이터 교환 소켓 DataInputStream dataInputStream = null; // 클라이언트로부터 데이터를 받기 위한 스트림 DataOutputStream dataOutpu.. 더보기
Visual C++로 MSXML 사용하기 #7 이전 포스팅에서 저장한 test.xml을 불러오는 기능은 XMLDOMDocument의 load 메서드입니다. _variant_t variant = TEXT("test.xml"); xmlDocument->load(variant); test.xml을 불러와 콘솔에 출력해보겠습니다. /* ex12.cpp */ #include #include #include #import int main(int argc, char * argv[]) { ::setlocale(LC_ALL, ""); if (SUCCEEDED(::CoInitialize(NULL))) { { _bstr_t bstr1, bstr2; _variant_t variant; IXMLDOMDocumentPtr xmlDocument; IXMLDOMProcessin.. 더보기
Visual C++로 MSXML 사용하기 #6 루트 엘리먼트, 자식 엘리먼트, 어트리뷰트, 텍스트 등 XML을 구성하는 기본적인 노드들을 VARIANT와 BSTR을 사용해 삽입해 보았습니다. 만든 XML 파일을 파일에 저장하는 방법은 XMLDOMDocument 클래스에 있는 save 메서드를 사용하면 됩니다. save 메서드는 매개변수로 VARIANT 형 구조체를 받습니다. _bstr_t path = TEXT("test.xml"); _variant_t variant = path; xmlDocument->save(variant); 이렇게 하면 프로그램이 실행되고 있는 위치에 test.xml을 생성하고 현재까지의 내용을 이 파일에 저장시킵니다. 제시된 XML대로 노드를 구성하고 파일로 저장해보겠습니다. Hello, World! 이를 코드로 작성하면 /*.. 더보기
호출 규약(calling convention) 정리 함수의 호출규약은 함수 호출 시 전달된 매개변수를 함수가 종료될 때 정리하는 방법으로서 cdecl, stdcall, fastcall, thiscall의 4가지가 존재합니다. 이 중 thiscall은 C++언어의 멤버함수에서 쓰이고 나머지는 C언어에서 사용됩니다. cdecl 호출 규약 먼저 cdecl은 C 함수 라이브러리에서 표준으로 쓰이는 호출규약으로 스택으로 전달한 매개변수를 함수를 호출한 위치에서 정리하는 방식입니다. 예를 들어 아래와 같은 C함수가 있습니다. int __cdecl _fn_cdecl(int a, int b) { return a+b; } 이를 어셈블리어로 다시 작성해봅니다. 시스템 기본 정수는 4바이트로 가정합니다. _fn_cdecl: sub esp, 4 ; 함수 종료 후 돌아갈 위치가.. 더보기