none
怎么将两个程序的按钮合二为一 RRS feed

  • 问题

  • 现有两个不同的程序A和B,在打开A程序的时候(会出现一个窗口,里面有几个按钮),想把其中的某一个按钮a与B程序(打开后也会出现一个窗口,里面也有几个按钮)的某一个b按钮合并起来,也就是在点击a的时候就点击了b按钮。请问各位大神,我该怎么做?(本人是新手)
    2016年5月31日 13:54

答案

  •  你好,

    如果是同一跟窗体中的话可以在A按钮点击事件中直接调用B按钮点击事件,范例:

            private void ButtonA_Click(object sender, EventArgs e)
            {
                //do something
                ButtonB_Click(buttonB, new EventArgs();)
            }
    
            private void ButtonB_Click(object sender, EventArgs e)
            { }

    如果是不同的程序的话,调用win32 api模拟按钮点击吧,sendmessage。看你这个问题也问了两次了,提供点参考代码给你吧:

    //添加引用
    using System.Runtime.InteropServices;
    
            [DllImport("user32.dll")]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("User32.dll ")]
            public static extern IntPtr FindWindowEx(IntPtr parent, IntPtr childe, string strclass, string FrmText);
            [DllImport("User32.dll", EntryPoint = "SendMessage")]
            private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
    
    //下面这段放到方法中即可
                IntPtr hwnd = FindWindow(null, "程序B");//第一个参数类名,得而窗体名称,填一个即可,另一个可以为nll
                if (hwnd != IntPtr.Zero)//找到对应窗口句柄
                {
                    IntPtr button = FindWindowEx(hwnd, IntPtr.Zero, "Button", "按钮B");
                    if (button != IntPtr.Zero)//找到对应按钮句柄
                    {
                        SendMessage(button, WM_LBUTTONDOWN, IntPtr.Zero, null);//模拟按钮鼠标左键按下
                        SendMessage(button, WM_LBUTTONUP, IntPtr.Zero, null);//模拟按钮鼠标左键弹起
                    }
                }

    顺便一提,如果可以的话建议吧方法操作代码直接放置到a按钮中,这样最简单了,调用api还是比较繁琐的。

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.





    2016年6月1日 6:19
  • 看情况可能是在学破解,参考下code inject方面的内容

    http://www.codeproject.com/Tips/732044/Code-Injection


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年6月1日 8:48

全部回复

  • 你好 lkf康师傅:

    如果是通过修改两个程序的代码来实现,那么你可以为两程序添加通信代码,在其中一个按钮按下时,让关联的按钮手动触发。

    2016年6月1日 6:18
  •  你好,

    如果是同一跟窗体中的话可以在A按钮点击事件中直接调用B按钮点击事件,范例:

            private void ButtonA_Click(object sender, EventArgs e)
            {
                //do something
                ButtonB_Click(buttonB, new EventArgs();)
            }
    
            private void ButtonB_Click(object sender, EventArgs e)
            { }

    如果是不同的程序的话,调用win32 api模拟按钮点击吧,sendmessage。看你这个问题也问了两次了,提供点参考代码给你吧:

    //添加引用
    using System.Runtime.InteropServices;
    
            [DllImport("user32.dll")]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("User32.dll ")]
            public static extern IntPtr FindWindowEx(IntPtr parent, IntPtr childe, string strclass, string FrmText);
            [DllImport("User32.dll", EntryPoint = "SendMessage")]
            private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
    
    //下面这段放到方法中即可
                IntPtr hwnd = FindWindow(null, "程序B");//第一个参数类名,得而窗体名称,填一个即可,另一个可以为nll
                if (hwnd != IntPtr.Zero)//找到对应窗口句柄
                {
                    IntPtr button = FindWindowEx(hwnd, IntPtr.Zero, "Button", "按钮B");
                    if (button != IntPtr.Zero)//找到对应按钮句柄
                    {
                        SendMessage(button, WM_LBUTTONDOWN, IntPtr.Zero, null);//模拟按钮鼠标左键按下
                        SendMessage(button, WM_LBUTTONUP, IntPtr.Zero, null);//模拟按钮鼠标左键弹起
                    }
                }

    顺便一提,如果可以的话建议吧方法操作代码直接放置到a按钮中,这样最简单了,调用api还是比较繁琐的。

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.





    2016年6月1日 6:19
  • 看情况可能是在学破解,参考下code inject方面的内容

    http://www.codeproject.com/Tips/732044/Code-Injection


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年6月1日 8:48