none
如何根据句柄获得控件的字体信息 RRS feed

  • 问题

  • 在运行时能得到其他进程的控件的句柄信息,如何通过句柄信息获得该控件得字体(Font)信息呢?望指教!

    zhang
    2010年6月21日 9:59

全部回复

  • 根据SPY++中取得的类名(或标题名)及层次关系
    [DllImport("user32.dll", EntryPoint = "FindWindow")]
    private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll")]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

    private void button1_Click(object sender, EventArgs e)
    {
      IntPtr hWnd1 = FindWindow(null, "主窗口标题");  
      SetForegroundWindow(hWnd1);
      IntPtr hWnd2 = FindWindowEx(hWnd1, IntPtr.Zero, null, "控件文本");  
      IntPtr hWnd3 = FindWindowEx(hWnd1, IntPtr.Zero, "控件类名", null);  
      System.Text.StringBuilder str = new System.Text.StringBuilder(255); 
    SendMessage(hWnd2 , 0xD, str.Capacity, str); 
    MessageBox.Show(str.ToString());  
    }

    键盘人生。
    2010年6月21日 10:14
  • 这样得到的是控件的文字信息,并不能得到字体信息啊。


    zhang
    2010年6月22日 3:03
  • 得到句柄后,用 System.Windows.Forms.Control.FromHandle() 可以直接构造出 Control 实例,然后用 Font 属性访问试试看。
    Mark Zhou
    2010年6月22日 5:49
  • C# 不能跨进程这样访问吧。我试了,不行啊。
    zhang
    2010年6月22日 7:18
  • 尝试下引用IAccessiblity来获取 详细信息请参见MSDN
    2010年6月22日 7:48
  • 跨进程的话试试看 MSAA 或者 Coded UI。Coded UI 比较容易一些。
    Mark Zhou
    2010年6月22日 8:14
  • 不是很懂,望详解。


    zhang
    2010年6月22日 9:25