EM_SETSEL在.docx(Word文档)中不起作用

时间:2019-10-17 13:45:18

标签: c++ windows

我正在研究一个简单的程序,该程序将WM_COPY发送到打开的.docx文件(Word文档)。我在其他应用程序上测试了我的代码,看来一切正常。但是,每当我尝试在打开的word文档中使用代码时,它都会在SendMessage(hwndChild, EM_SETSEL, 0, -1)处返回false。

我尝试了几件事:

  • 在记事本(不是richtext)和粘滞便笺(richttext)上使用代码,它与下面的代码完美配合。

  • 删除SendMessage(hwndChild, EM_SETSEL, 0, -1)行,然后手动突出显示word文档中的文本并运行程序。它成功完成,并在WM_COPY的帮助下将内容复制到剪贴板。

有人知道为什么EM_SETSEL在Word文档中不起作用吗?


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 个答案:

答案 0 :(得分:1)

EM_SETSEL仅适用于Edit控件。我怀疑Word是否使用标准控件。