如题,我需要对打开的WORD通过程序填值,.net访问WORD的方法,我知道,可都是通过this.thisApplication = new Microsoft.Office.Interop.Word.ApplicationClass();的方法,创建对象后,再用OPEN方法打开一个已存在的WORD在后台进行操作,如果我想要在前端控制呢?比如,我有一个按钮,当点击后就能获取打开的WORD窗口的句柄,然后,再用WORD对象访问方法去填充值,可行吗?

解决方案 »

  1.   

    用api
    FindWindow找到Word窗口的句柄
    FindWindowEx找到Word输入窗口
    用SendInput或者SendMessage或者等给word输入窗口输入内容,或者是往那里复制内容
      

  2.   

    我已找到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"); 
                        }
                    }
      

  3.   

    现在我已可以得到MessageBox消息对话框,问题就是不能实现粘贴效果?我确认Win32API.SendMessage(thisproc.MainWindowHandle, 0x0302, IntPtr.Zero, "s"); 是正确的,因为我另写一个demo可看到效果:
            private void button1_Click(object sender, EventArgs e)
            {
                string s = "hello, floodzhu";
                SendMessage(this.textBox1.Handle, 0x0302, IntPtr.Zero, s);
            }
    我怀疑是因为发送的消息句柄对象不正确,不应该是主窗体的,应该是里面的文档吧?但我不知道如何取?
      

  4.   

    我已找到对应的句丙:
                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);