HCL*_*HCL 7 ms-word office-interop
我在这里问了一个关于如何通过自动化设置Word文档的文件名而不保存它的问题.感谢Remou,通过调用FileSummaryInfo-Dialog并设置Title-property,我收到了一个很好的方法.
但是现在我遇到的问题是客户端希望文档名称中包含特殊字符(点和下划线),而且它似乎是单词的一个错误(或一个特性),它会削减标题并且仅在字符之前占用字符.用于构建文件名的第一个特殊字符!我已经google了很多,但无法找到解决此问题的方法.这里也注意到了这个问题(参见下面的问题),但没有解决方案.
有没有其他解决方案设置文件名而不保存,或解决方法/错误修复上述奇怪的行为?
尝试easyhook,因为这些天除了我的手之外没有Windows机器.以下就是呼叫流程(就像我多年前所做的那样,通过Detours将软件的套接字绑定端口更改为不同的一个)
关于Hook CreateFileW:
easyhook的wiki中的示例正是我们想要的.
CreateFileHook = LocalHook.Create(
LocalHook.GetProcAddress("kernel32.dll", "CreateFileW"),
new DCreateFile(CreateFile_Hooked),
this);
Run Code Online (Sandbox Code Playgroud)
在CreateFile_Hooked您可以更改参数InFileName,然后调用真正的CreateFileW
static IntPtr CreateFile_Hooked(
String InFileName,
UInt32 InDesiredAccess,
UInt32 InShareMode,
IntPtr InSecurityAttributes,
UInt32 InCreationDisposition,
UInt32 InFlagsAndAttributes,
IntPtr InTemplateFile)
{
// FIGURE OUT THE FILE NAME THAT YOU WANT HERE
// IF the InFileName is not your Document name "My.doc", then call orignal CreateFile
// with all the parameter unchanged.
// call original API...
return CreateFile(
YOUR_CHANGED_FILE_NAME_HERE,
InDesiredAccess,
InShareMode,
InSecurityAttributes,
InCreationDisposition,
InFlagsAndAttributes,
InTemplateFile);
}
Run Code Online (Sandbox Code Playgroud)
呼叫流程:
将标题更改为"My_Document_2012_11_29"后,然后挂钩Word的CreateFileW进程.例如,当InFileName是"My.doc"时,您应该将其更改为"My_Document_2012_11_29".
因为这是在Word进程中完成的,所以Detoured函数不知道"My.doc"映射到"My_Document_2012_11_29".获取此映射信息的方法很多,一种是将此映射信息保存到应用程序中的已知文件,并在Detoured函数中读取该文件.
| 归档时间: |
|
| 查看次数: |
2319 次 |
| 最近记录: |