闲着没事干就做了这么个东西.
第一次在C#里用了这么多跨进程的窗体操作.
还是学到不少东西.
らぶデス3的手动去码流程如下:
先去网上找到ODFConvertor.
然后进入游戏目录的ODF下,将所有的*_base_HI.odf找出来,
用ODFConvertor打开它,将*_moz的勾选去掉后再导出得到一
个!*_base_HI.odf然后用这个新文件替换掉旧文件即可.
ODFConvertor有个地方很讨厌:他只能用文件拖拽的方式打开odf
文件.于是我事先设想的模拟几个按钮单击就搞定的方法是没戏了.
于是我开始去MSDN啃那提到就让我头痛的OLE...结果看了一晚没啥结果.
到处都找不到得到对方窗体的IDropTarget的方法.倒是在Shell编程的资料
里查到一条WM_DROPFILES的消息...可是看到那个HDROP是个形似句柄
的东东,马上就放弃去睡觉了.
第二天上网问了下清洁工...结果他帮我在csdn google出了一篇用WM_DROPFILES
模拟文件拖拽的文章(囧...为啥我google半天没找到?)原来那个所谓的HDROP其实
就是指向一个DROPFILES结构的指针...囧.要是早知道就好了.
接下来就是选语言了.csdn那篇文章是用c++写的.按说这种涉及大量api调用的东西
还是C++比较顺手,但是一想到C++那繁琐的UI编写我马上就放弃了.最后还是选择了
最常用的C#.
接下来就是考虑在C#中实现跨进程的操做了.
思路如下:
Shell文件的拖拽处理事实上是在窗体过程中处理了WM_DROPFILES消息.
接受到的参数HDROP是一个指向DROPFILES的指针.DROPFILES的C++声明如下:
我在C#里声明的时候把它改了一下:
这样我可以少声明一个不用的POINT结构,只要保证大小不变就好:)
然后就是这个指针的问题了.我自己的进程里分配的DROPFILES拿给目标进程是肯定没用的.
自然要涉及到跨进程的内存读/写;于是需要以下API: