SendMessage到子窗口(计算器试试)

时间:2015-03-06 18:17:27

标签: windows winapi

到目前为止,我已经编写了我的代码......

[DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr IParam);
    private const int BM_CLICK = 0x00F5;

...

IntPtr win = FindWindow("CalcFrame", "Calculator");
        if (!win.Equals(IntPtr.Zero))
        {
            IntPtr win2 = FindWindowEx(win, IntPtr.Zero, "CalcFrame", null);
            if (!win2.Equals(IntPtr.Zero))
            {
                MessageBox.Show("ok");
            }
        }

我的问题是,如何将BM_CLICK发送到计算器按钮.. 我不明白,我怎么能选择同一类的窗口和按钮

enter image description here

也许有人会这么好,并会解释我如何做到这一点,也许会写一些简单的例子。 非常感谢,抱歉我的英文不好:/

1 个答案:

答案 0 :(得分:0)

如果有两个(或更多)窗口具有相同的类名和文本,则最好使用EnumChildWindows API函数。由于您使用的是C#,因此here是此API函数的示例。

您可以列出所有子窗口并随意执行任何操作。