Я работаю над простой программой, которая отправляет WM_COPY в открытый файл .docx (текстовый документ). Я проверил свой код на других приложениях, и, кажется, все работает нормально. Но всякий раз, когда я пытаюсь использовать свой код в документе с открытым словом, он возвращает false в SendMessage(hwndChild, EM_SETSEL, 0, -1)
.
. Я пробовал пару вещей:
Использовать код вБлокнот (не richtext) и stickynotes (richttext), и он отлично работает с кодом ниже.
Удалите строку SendMessage(hwndChild, EM_SETSEL, 0, -1)
, а затем вручную выделите текст в текстовом документе и запустите программу,Он успешно копирует содержимое в буфер обмена с помощью WM_COPY.
Кто-нибудь знает, почему EM_SETSEL
не работает в текстовом документе?
int main() {
HWND app = FindWindowEx(0, 0, "OpusApp", 0);
EnumChildWindows(app, EnumChildProc, (LPARAM) NULL);
return 0;
}
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) {
uint8_t max_path_length = 255;
char *str = new char[max_path_length];
memset(str, 0, max_path_length);
GetClassName(hwndChild, str, max_path_length);
/// Execute when edit handle is obtained
if(strcmpi(str, "_WwG") == 0) {
if(SendMessage(hwndChild, EM_SETSEL, 0, -1)) {
SendMessage(hwndChild, WM_COPY, 0, 0);
} else {
MessageBox(0, "Can't select all!", "Report", MB_OK);
}
}
str = NULL;
delete [] str;
return TRUE;
}