C C++
[C++] Win32 API, 프로그램에서 선택된 글씨 가져오기
AYAYz
2020. 12. 27. 14:24
#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 위치의 문자열을 잘라오면 된다.
메모장의 글씨를 가져온다 !
근데 다른프로그램에서는 안된다.ㅎ