EM_SETSEL не работает в .docx (текстовый документ) - PullRequest
0 голосов
/ 17 октября 2019

Я работаю над простой программой, которая отправляет 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;
}

1 Ответ

1 голос
/ 17 октября 2019

EM_SETSEL работает только для элемента управления Edit. Я сомневаюсь, что Word использует стандартный контроль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...