SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
CHAP. 7
윈도우 핸들
1
2
메모장에 문자열 출력
마우스 왼쪽 버튼 눌림에 대해
나와 상관없는 메모장 윈도우에 문자열 출력
case WM_LBUTTONDOWN:
HWND hNote;
hNote = ;
HDC hdc;
hdc = GetDC(hNote);
TextOut(hdc, 0, 0, "Hello", 5);
ReleaseDC(hNote, hdc);
break;
여기에 메모장의 윈도우
핸들을 넣어주면 돼
메모장 윈도우 핸들만 알면 가능할 것 같기도 하다 신기해
운영체제는 모든 것을 알고 있다. 윈도우 핸들 쯤이야
3
1. Spy++ 이용
Visual Studio 2010의 경우, [도구]-[Spy++] 메뉴 클릭
4
[Search]-[Find] 메뉴 클릭
이 아이콘을 원하는 윈도우로 드래그
해당 윈도우의 테두리가 두껍게 표시됨
이와 동시에 윈도우 핸들, 윈도우 타이틀, 윈도우 클래스 이름이 출력됨
5
프레임 윈도우
클라이언트 윈도우
아이콘을 메모장 윈도우로 가져갔을 때
윈도우 핸들: 005409FA
윈도우 타이틀: “제목없음 – 메모장”
윈도우 클래스: Notepad
6
case WM_LBUTTONDOWN:
HWND hNote;
hNote = (HWND)0x005409FA;
HDC hdc;
hdc = GetDC(hNote);
TextOut(hdc, 0, 0, "Hello", 5);
ReleaseDC(hNote, hdc);
break;
16진수 이므로 숫자 앞에 0x를 붙임
윈도우 핸들의 데이터 타입에 맞게 HWND로 타입 캐스팅
프레임 윈도우 핸들을 얻었을 경우클라이언트 윈도우 핸들을 얻었을 경우
7
HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName)
검색할 윈도우 클래스 이름
모르면 NULL
윈도우 핸들 획득
2. FindWindow 함수 이용
검색할 윈도우 타이틀 이름
윈도우를 검색하면 윈도우 핸들을, 실패하면 NULL 반환
8
case WM_LBUTTONDOWN:
HWND hNote;
hNote = FindWindow(NULL, "제목없음 – 메모장 ");
HDC hdc;
hdc = GetDC(hNote);
TextOut(hdc, 0, 0, "Hello", 5);
ReleaseDC(hNote, hdc);
break;
윈도우 클래스 이름을 모르면 NULL로 설정
윈도우 핸들을 알면
다른 프로그램의 윈도우도 제어 가능
윈도우 핸들이 관건이구나

Mais conteúdo relacionado

Mais procurados

12 컨트롤에서의 메세지 처리
12 컨트롤에서의 메세지 처리12 컨트롤에서의 메세지 처리
12 컨트롤에서의 메세지 처리jaypi Ko
 
03 첫번째프로그램
03 첫번째프로그램03 첫번째프로그램
03 첫번째프로그램jaypi Ko
 
NodeJS - Server Side JS
NodeJS - Server Side JS NodeJS - Server Side JS
NodeJS - Server Side JS Ganesh Kondal
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.jsDinesh U
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menusLilia Sfaxi
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRSLilia Sfaxi
 
Le langage plsql
Le langage plsqlLe langage plsql
Le langage plsqlkati_f87
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux javaInes Ouaz
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web servicesLilia Sfaxi
 
동기화 시대를 뛰어넘는 비동기 프로그래밍
동기화 시대를 뛰어넘는 비동기 프로그래밍동기화 시대를 뛰어넘는 비동기 프로그래밍
동기화 시대를 뛰어넘는 비동기 프로그래밍명신 김
 
Getting hooked on performance and clean code
Getting hooked on performance and clean codeGetting hooked on performance and clean code
Getting hooked on performance and clean codeSeven Peaks Speaks
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Heithem Abbes
 
Intro to Node.js (v1)
Intro to Node.js (v1)Intro to Node.js (v1)
Intro to Node.js (v1)Chris Cowan
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpelLilia Sfaxi
 

Mais procurados (20)

12 컨트롤에서의 메세지 처리
12 컨트롤에서의 메세지 처리12 컨트롤에서의 메세지 처리
12 컨트롤에서의 메세지 처리
 
03 첫번째프로그램
03 첫번째프로그램03 첫번째프로그램
03 첫번째프로그램
 
NodeJS - Server Side JS
NodeJS - Server Side JS NodeJS - Server Side JS
NodeJS - Server Side JS
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Node js introduction
Node js introductionNode js introduction
Node js introduction
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Nuxt.js - Introduction
Nuxt.js - IntroductionNuxt.js - Introduction
Nuxt.js - Introduction
 
Le langage plsql
Le langage plsqlLe langage plsql
Le langage plsql
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 
동기화 시대를 뛰어넘는 비동기 프로그래밍
동기화 시대를 뛰어넘는 비동기 프로그래밍동기화 시대를 뛰어넘는 비동기 프로그래밍
동기화 시대를 뛰어넘는 비동기 프로그래밍
 
Getting hooked on performance and clean code
Getting hooked on performance and clean codeGetting hooked on performance and clean code
Getting hooked on performance and clean code
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)
 
Intro to Node.js (v1)
Intro to Node.js (v1)Intro to Node.js (v1)
Intro to Node.js (v1)
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpel
 
123DEXCS2022.pdf
123DEXCS2022.pdf123DEXCS2022.pdf
123DEXCS2022.pdf
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 

Mais de jaypi Ko

CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic ModelCVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Modeljaypi Ko
 
개념 이해가 쉬운 Variational Autoencoder (VAE)
개념 이해가 쉬운 Variational Autoencoder (VAE)개념 이해가 쉬운 Variational Autoencoder (VAE)
개념 이해가 쉬운 Variational Autoencoder (VAE)jaypi Ko
 
[신경망기초]오류역전파알고리즘구현
[신경망기초]오류역전파알고리즘구현[신경망기초]오류역전파알고리즘구현
[신경망기초]오류역전파알고리즘구현jaypi Ko
 
파이썬설치
파이썬설치파이썬설치
파이썬설치jaypi Ko
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것jaypi Ko
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기jaypi Ko
 
C언어 연산자에 대해 간과한 것
C언어 연산자에 대해 간과한 것C언어 연산자에 대해 간과한 것
C언어 연산자에 대해 간과한 것jaypi Ko
 
[확률통계]04모수추정
[확률통계]04모수추정[확률통계]04모수추정
[확률통계]04모수추정jaypi Ko
 
MFC 프로젝트 시작하기
MFC 프로젝트 시작하기MFC 프로젝트 시작하기
MFC 프로젝트 시작하기jaypi Ko
 
01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기jaypi Ko
 
[신경망기초] 신경망학습
[신경망기초] 신경망학습[신경망기초] 신경망학습
[신경망기초] 신경망학습jaypi Ko
 
[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망jaypi Ko
 
[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현jaypi Ko
 
com architecture
com architecturecom architecture
com architecturejaypi Ko
 
[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석jaypi Ko
 
[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요jaypi Ko
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석jaypi Ko
 
[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘jaypi Ko
 
[신경망기초] 멀티레이어퍼셉트론
[신경망기초] 멀티레이어퍼셉트론[신경망기초] 멀티레이어퍼셉트론
[신경망기초] 멀티레이어퍼셉트론jaypi Ko
 

Mais de jaypi Ko (20)

CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic ModelCVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
CVPR 2022 Tutorial에 대한 쉽고 상세한 Diffusion Probabilistic Model
 
개념 이해가 쉬운 Variational Autoencoder (VAE)
개념 이해가 쉬운 Variational Autoencoder (VAE)개념 이해가 쉬운 Variational Autoencoder (VAE)
개념 이해가 쉬운 Variational Autoencoder (VAE)
 
[신경망기초]오류역전파알고리즘구현
[신경망기초]오류역전파알고리즘구현[신경망기초]오류역전파알고리즘구현
[신경망기초]오류역전파알고리즘구현
 
파이썬설치
파이썬설치파이썬설치
파이썬설치
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
C언어 연산자에 대해 간과한 것
C언어 연산자에 대해 간과한 것C언어 연산자에 대해 간과한 것
C언어 연산자에 대해 간과한 것
 
[확률통계]04모수추정
[확률통계]04모수추정[확률통계]04모수추정
[확률통계]04모수추정
 
MFC 프로젝트 시작하기
MFC 프로젝트 시작하기MFC 프로젝트 시작하기
MFC 프로젝트 시작하기
 
01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기
 
[신경망기초] 신경망학습
[신경망기초] 신경망학습[신경망기초] 신경망학습
[신경망기초] 신경망학습
 
[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망[신경망기초] 합성곱신경망
[신경망기초] 합성곱신경망
 
[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현[신경망기초] 퍼셉트론구현
[신경망기초] 퍼셉트론구현
 
interface
interfaceinterface
interface
 
com architecture
com architecturecom architecture
com architecture
 
[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석[신경망기초] 소프트맥스회귀분석
[신경망기초] 소프트맥스회귀분석
 
[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요[신경망기초] 심층신경망개요
[신경망기초] 심층신경망개요
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘[신경망기초] 오류역전파알고리즘
[신경망기초] 오류역전파알고리즘
 
[신경망기초] 멀티레이어퍼셉트론
[신경망기초] 멀티레이어퍼셉트론[신경망기초] 멀티레이어퍼셉트론
[신경망기초] 멀티레이어퍼셉트론
 

07 윈도우 핸들

  • 2. 2 메모장에 문자열 출력 마우스 왼쪽 버튼 눌림에 대해 나와 상관없는 메모장 윈도우에 문자열 출력 case WM_LBUTTONDOWN: HWND hNote; hNote = ; HDC hdc; hdc = GetDC(hNote); TextOut(hdc, 0, 0, "Hello", 5); ReleaseDC(hNote, hdc); break; 여기에 메모장의 윈도우 핸들을 넣어주면 돼 메모장 윈도우 핸들만 알면 가능할 것 같기도 하다 신기해 운영체제는 모든 것을 알고 있다. 윈도우 핸들 쯤이야
  • 3. 3 1. Spy++ 이용 Visual Studio 2010의 경우, [도구]-[Spy++] 메뉴 클릭
  • 4. 4 [Search]-[Find] 메뉴 클릭 이 아이콘을 원하는 윈도우로 드래그 해당 윈도우의 테두리가 두껍게 표시됨 이와 동시에 윈도우 핸들, 윈도우 타이틀, 윈도우 클래스 이름이 출력됨
  • 5. 5 프레임 윈도우 클라이언트 윈도우 아이콘을 메모장 윈도우로 가져갔을 때 윈도우 핸들: 005409FA 윈도우 타이틀: “제목없음 – 메모장” 윈도우 클래스: Notepad
  • 6. 6 case WM_LBUTTONDOWN: HWND hNote; hNote = (HWND)0x005409FA; HDC hdc; hdc = GetDC(hNote); TextOut(hdc, 0, 0, "Hello", 5); ReleaseDC(hNote, hdc); break; 16진수 이므로 숫자 앞에 0x를 붙임 윈도우 핸들의 데이터 타입에 맞게 HWND로 타입 캐스팅 프레임 윈도우 핸들을 얻었을 경우클라이언트 윈도우 핸들을 얻었을 경우
  • 7. 7 HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName) 검색할 윈도우 클래스 이름 모르면 NULL 윈도우 핸들 획득 2. FindWindow 함수 이용 검색할 윈도우 타이틀 이름 윈도우를 검색하면 윈도우 핸들을, 실패하면 NULL 반환
  • 8. 8 case WM_LBUTTONDOWN: HWND hNote; hNote = FindWindow(NULL, "제목없음 – 메모장 "); HDC hdc; hdc = GetDC(hNote); TextOut(hdc, 0, 0, "Hello", 5); ReleaseDC(hNote, hdc); break; 윈도우 클래스 이름을 모르면 NULL로 설정 윈도우 핸들을 알면 다른 프로그램의 윈도우도 제어 가능 윈도우 핸들이 관건이구나