小弟想在winform程序上获取另一个程序的radiobutton 是否被选中 ,碰巧那个项目也是winform开发的 
于是 先找了如下API  
SendMessage ( Handle,BM_GETCheck, 0, 0) 发现对于别的程序都可以 唯独winform无效 
  于是又看了CheckRadioButton 和IsDlgButtonChecked 两个函数  也毫无斩获 
  后来网上查了查 发现与我有类似问题的人不少  于是乎又用了
[DllImport("oleacc.dll", PreserveSig = false)]
        [return: MarshalAs(UnmanagedType.Interface)]
        public static extern object AccessibleObjectFromWindow(IntPtr hwnd, uint dwId, ref Guid riid); 
这个函数  还是很难实现我的要求    希望各位做过的兄弟 给点帮助和建议  谢谢了~

解决方案 »

  1.   

    SendMessage无效?不会吧?当初我用SendMessage操作其它进程的ListView都没问题.
    你Handle传的什么?会不会是对方用的自绘的窗体而不是Windows标准控件(WinForm里
    的RadioButton应该没问题;但WPF是自绘的句柄都拿不到更别提发消息了.)?至于
    AccessibleObjectFromWindow...这个涉及COM.一般很难扯上Windows标准控件吧
      

  2.   

    通过API中FindWindow查询窗口句柄。 
    通过sendmessage发送信息给相关程序 
    AccessibleObjectFromWindow
      

  3.   

    句柄不会错的  就是那个RadioButton的句柄  别的程序都可以 唯独c#的不行啊
      

  4.   

    搞定了 一个参数的问题 AccessibleObjectFromWindow 第二个参数应该为-4 结贴