SendMessage to child windows (计算器试试)
SendMessage to child windows (Calculator try)
到目前为止我已经编写了我的代码...
[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 发送到计算器按钮..
我不明白,我如何选择 windows 和具有相同 class
的按钮
也许有人会很好,会向我解释如何做到这一点,也许会写一些简单的例子。
非常感谢,抱歉我的英语不好:/
如果有两个(或更多)windows具有相同的class名称和文本,最好使用EnumChildWindows API function. Since you are using C#, here是这个API函数的一个例子.
您可以列出所有 child windows 并随心所欲地使用它们。
到目前为止我已经编写了我的代码...
[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 发送到计算器按钮.. 我不明白,我如何选择 windows 和具有相同 class
的按钮也许有人会很好,会向我解释如何做到这一点,也许会写一些简单的例子。 非常感谢,抱歉我的英语不好:/
如果有两个(或更多)windows具有相同的class名称和文本,最好使用EnumChildWindows API function. Since you are using C#, here是这个API函数的一个例子.
您可以列出所有 child windows 并随心所欲地使用它们。