如题,我需要对打开的WORD通过程序填值,.net访问WORD的方法,我知道,可都是通过this.thisApplication = new Microsoft.Office.Interop.Word.ApplicationClass();的方法,创建对象后,再用OPEN方法打开一个已存在的WORD在后台进行操作,如果我想要在前端控制呢?比如,我有一个按钮,当点击后就能获取打开的WORD窗口的句柄,然后,再用WORD对象访问方法去填充值,可行吗?
调试欢乐多
FindWindow找到Word窗口的句柄
FindWindowEx找到Word输入窗口
用SendInput或者SendMessage或者等给word输入窗口输入内容,或者是往那里复制内容
foreach (Process thisproc in Process.GetProcessesByName("WINWORD")) //进程名字
{
if (thisproc.MainWindowHandle.ToInt32() == Win32API.GetForegroundWindow().ToInt32())
{
MessageBox.Show("您激活了word");
Win32API.SendMessage(thisproc.MainWindowHandle, 0x0302, IntPtr.Zero, "s");
}
}
private void button1_Click(object sender, EventArgs e)
{
string s = "hello, floodzhu";
SendMessage(this.textBox1.Handle, 0x0302, IntPtr.Zero, s);
}
我怀疑是因为发送的消息句柄对象不正确,不应该是主窗体的,应该是里面的文档吧?但我不知道如何取?
IntPtr ParentWnd = FindWindow(null, "Microsoft Excel - test.xlsx"); IntPtr ChildWnd = FindWindowEx(ParentWnd, IntPtr.Zero, "XLDESK", null); IntPtr ChildWnd1 = FindWindowEx(ChildWnd, IntPtr.Zero, "EXCEL7", null);
但是调用消息,发送方法不成功,没反映:
SendMessage(ChildWnd1 , 0x0302, IntPtr.Zero, s);