본문 바로가기
C C++

[C++] Win32 API, 프로그램에서 선택된 글씨 가져오기

by AYAYz 2020. 12. 27.
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    int len;

    while (1) {
        
        HWND hWnd = GetForegroundWindow();
        DWORD fromId = GetCurrentThreadId();
        DWORD pid = GetWindowThreadProcessId(hWnd, NULL);
        AttachThreadInput(fromId, pid, TRUE);
        HWND focus = GetFocus();  

        DWORD hi;
        DWORD a;
        SendMessage(focus, EM_GETSEL, (WPARAM) &hi, (LPARAM) &a);

        len = SendMessage(focus, WM_GETTEXTLENGTH, 0, 0);
        
        int maxLen = 100;
        char temp[256];
        SendMessage(focus, WM_GETTEXT, maxLen, (LPARAM)temp);
        
        cout << hi << " " <<  a << endl;
        for (int i = hi; i < a*2; i+=2) {
            cout << temp[i];
        }

        cout << " " << endl;
        cout << " " << endl;
    }

    
        

    return 0;
}

Focus API를 사용하기 위해 그 창의 hWnd를 구하고 GetCurrentThreadId()와 GetWindowThreadProcessId()를 사용하여  뭔지모를 id를 구한뒤 구한 id를 가지고 AttachThreadInput를 통해 Focus API를 사용할 수 있게한다

sendMessage는 "이거 줘"라고 하는 거다.

프로그램의 전체적인 방식은 Focus hWnd를 가지고 블록된 글씨 위치를 가져오는 WM_GETTEXTLENGTH와 모든 글씨를 가져오는 WM_GETTEXT를 각각 구한다음 WM_GETTEXT으로 구한 모든 글씨에서 WM_GETTEXTLENGTH 위치의 문자열을 잘라오면 된다.

메모장의 글씨를 가져온다 !

 

근데 다른프로그램에서는 안된다.ㅎ

댓글