美文网首页
控制计算器输入数字

控制计算器输入数字

作者: 价值投机168 | 来源:发表于2021-02-24 18:04 被阅读0次
class Program
{
    [DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]
    extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    [DllImport("User32.dll", EntryPoint = "SendMessage")]
    private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

    [STAThread]
    static void Main(string[] args)
    {
        if (FindMainWindowHandle("计算器", 100, 1) == IntPtr.Zero)
        {
            string path = "C:\\WINDOWS\\system32\\calc.exe";
            Process p = Process.Start(path);
            if (p == null)
                Console.WriteLine("Warning:process may already exist");
        }

        IntPtr mainWindows = FindMainWindowHandle("计算器", 100, 25);

        int BN_CLICKED = 245;
        IntPtr hwndFrame = FindWindowEx(mainWindows, IntPtr.Zero, "CalcFrame", null);
        IntPtr hwndDialog = FindWindowEx(hwndFrame, IntPtr.Zero, "#32770", null);
        IntPtr hwndDialog2 = FindWindowEx(hwndFrame, (IntPtr)hwndDialog, "#32770", null);


        IntPtr hwndThree = FindWindowEx(hwndDialog2, IntPtr.Zero, "Button", "3");
        hwndThree = (IntPtr)0x002C0608;//这个是使用spy++自己找的句柄,运行的时候自己改
        SendMessage(hwndThree, BN_CLICKED, IntPtr.Zero, "");//点击按钮成功
    }

    //通过索引查找相应控件句柄
    static IntPtr FindWindowByIndex(IntPtr hwndParent, int index)
    {
        if (index == 0)
        {
            return hwndParent;
        }
        else
        {
            int ct = 0;
            IntPtr result = IntPtr.Zero;
            do
            {
                result = FindWindowEx(hwndParent, result, null, null);
                if (result != IntPtr.Zero)
                {
                    ++ct;
                }
            } while (ct < index && result != IntPtr.Zero);
            return result;
        }
    }

    //获得待测程序主窗体句柄
    private static IntPtr FindMainWindowHandle(string caption, int delay, int maxTries)
    {
        IntPtr mwh = IntPtr.Zero;
        bool formFound = false;
        int attempts = 0;
        while (!formFound && attempts < maxTries)
        {
            if (mwh == IntPtr.Zero)
            {
                Thread.Sleep(delay);
                ++attempts;
                mwh = FindWindow(null, caption);
            }
            else
            {
                formFound = true;
            }
        }

        if (mwh == IntPtr.Zero)
            return IntPtr.Zero;
        else
            return mwh;
    }
}

相关文章

网友评论

      本文标题:控制计算器输入数字

      本文链接:https://www.haomeiwen.com/subject/mrosfltx.html