SendMessageA로 \r\n을 보내도 줄바꿈이 되지 않습니다
글쓴이: IBD@Google / 작성시간: 수, 2020/04/29 - 10:11오전
메모장의 edit 컨트롤을 찾아, 입력받은 대로 컨트롤의 내용을 변경하는 간단한 프로그램을 짜고 있습니다.
그런데 입력받은 string에 \r\n이 포함되어도 그대로 입력될 뿐 줄바꿈이 되질 않네요...
그냥 reinterpret_cast 전달값으로 "as\r\ndf"를 적으면 줄바꿈이 되는 걸로 봐선 변수 형 문제 같은데 아무리 찾아도 답이 안 보여서...
감사합니다.
#include <windows.h> #include <iostream> #include <cstdio> #include <string> #include <conio.h> using namespace std; int main() { HWND p_wnd=NULL,edit_wnd=NULL;char a[100000]; while (true){ p_wnd= ::FindWindowW(L"Notepad",NULL); if (p_wnd != NULL) break; } cout << "창을 찾았습니다! 핸들 번호 " << p_wnd << endl; edit_wnd = ::FindWindowExW(p_wnd,edit_wnd,L"edit",NULL); cout << "변경할 값을 입력하세요: ";cin >> a; SendMessageA(edit_wnd, WM_SETTEXT, 0 ,reinterpret_cast<LPARAM>(a)); cout << "변경 완료! 계속하려면 아무 키나 누르십시오 . . .";getch(); }
Forums:
설마 위와 같이 짜 놓고 표준 입력으로 \r\n을
설마 위와 같이 짜 놓고 표준 입력으로 \r\n을 그대로 입력한 건 아니겠죠?
문자열 상수(string literal) 안에 \r이나 \n 등을 입력했을 때, 그걸 0x0d, 0x0a에 대응되는 문자로 인식해 주는 건 C++ 컴파일러의 기능입니다.
표준 입력을 통해 문자열을 입력받을 땐 그런 편리한 서비스를 이용할 수 없습니다. 직접 변환해 줘야 됩니다.
앗 처음해보는거라...
그러면 \r\n이 입력되면 0x0d 0x0a로 변환해주면 되겠군요... 감사합니다
댓글 달기