我正在研究一个简单的程序,该程序将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;
}
答案 0 :(得分:1)
EM_SETSEL
仅适用于Edit控件。我怀疑Word是否使用标准控件。