代码之家  ›  专栏  ›  技术社区  ›  S Meaden

在C#中,是否可以访问并更改windows消息泵以响应WM#u GETOBJECT?

  •  0
  • S Meaden  · 技术社区  · 7 年前

    因此,有一种很好的技术可以从一台机器上获取COM指针交叉进程(同一台机器)Excel.exe会话,如果您知道它的Hwnd使用可访问性API。特定的Windows API函数是 AccessibleObjectFromWindow ;如果使用OBJID_NATIVEOM参数调用,则Excel.exe封送回指向Excel.窗口对象。很酷。

    The answer is yes, they respond to a certain message, WM_GETOBJECT, in their message pump code. 对于C++应用程序来说,这是可行的,但我对如何为C语言应用程序感到困惑。

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    
    
        [DllImport("oleacc.dll", SetLastError = true)]
        internal static extern int AccessibleObjectFromWindow(IntPtr hwnd, uint id, ref Guid iid,
                                                    [In, Out, MarshalAs(UnmanagedType.IUnknown)] ref object ppvObject);
    
        bool IXlMoniker.GetExcelByHwnd(int lhwndApp2, ref object appRetVal)
        {
            bool bRetVal = false;
    
            IntPtr lhwndApp = (IntPtr)lhwndApp2;
    
            IntPtr lHwndDesk = FindWindowEx(lhwndApp, IntPtr.Zero, "XLDESK", "");
            if (lHwndDesk != IntPtr.Zero)
            {
    
                IntPtr lHwndExcel7 = FindWindowEx(lHwndDesk, IntPtr.Zero, "EXCEL7", null);
                if (lHwndExcel7 != IntPtr.Zero)
                {
                    Guid IID_IDispatch = new Guid("{00020400-0000-0000-C000-000000000046}");
                    const uint OBJID_NATIVEOM = 0xFFFFFFF0;
                    object app = null;
                    if (AccessibleObjectFromWindow(lHwndExcel7, OBJID_NATIVEOM, ref IID_IDispatch, ref app) == 0)
                    {
                        dynamic appWindow = app;
                        appRetVal = appWindow.Application;
                        return true;
                    }
                }
            }
            return bRetVal;
        }
    

    这看起来很有希望 Return an IOleCommandTarget from processing WM_GETOBJECT in a NativeWindow

    0 回复  |  直到 7 年前
    推荐文章