qq_39948207
qq_39948207
2017-08-29 02:07
采纳率: 75%
浏览 3.3k

C# 怎么通过句柄知道某个按钮被单击或者某个窗口被打开?

const int BM_CLICK = 0xF5;//按钮事件
const int WM_SETTEXT = 0x0C; //向文本框发送信息事件
IntPtr ParenthWnd = new IntPtr(0);
IntPtr maindHwnd = FindWindow("WindowsForms10.Window.8.app.0.141b42a_r9_ad1", "窗口标题"); //获得登录界面框的句柄

if (maindHwnd != IntPtr.Zero)
{
//父窗口句柄:maindHwnd,子窗口句柄:IntPtr.Zero初始化为0的句柄,窗口类名:null,窗口(控件)标题:登录
IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null, "登录"); //通过按钮名获得按钮的句柄

if (childHwnd != IntPtr.Zero)

SendMessage(childHwnd, BM_CLICK, 0, 0); //发送点击登录按钮的消息

else
MessageBox.Show("没有找到子窗口");

        }
        else
            MessageBox.Show("没有找到窗口"); 

还有,哪个大神知道怎么通过句柄使某个第三方程序的文本框得到焦点么?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • zy841958835
    cloudyzhao 2017-08-29 02:42
    已采纳
    点赞 评论
  • lcmsx
    乱臣贼子 2017-08-29 10:04

    跨进程操作,得使用C/C++去实现才行。然后导出一个接口函数给C#即可。

    点赞 评论
  • qq_39948207
    qq_39948207 2017-08-31 03:22
                                    mwh1 = IntPtr.Zero;
                    while (mwh1 == IntPtr.Zero)
                    {
                        mwh1 = FindWindow("WindowsForms10.Window.8.app.0.141b42a_r9_ad1", "");
                    }
                    //添加一个0.2s的时间间隔,以便给窗口充足的打开着准备时间           
                    Thread.Sleep(200);
                    if (mwh1 != IntPtr.Zero)
                    {
                        childHwnd = FindWindowEx(mwh1, IntPtr.Zero, null, "是");   //通过按钮名获得按钮的句柄  
                        if (childHwnd != IntPtr.Zero)
                            SendMessage(childHwnd, BM_CLICK, 0, 0);
                    }
    

    大家好,我已经解决了这个问题,我可以 直接用while循环让程序一直找那个窗口,直到另一个程序的窗口打开被获取到就可以自动执行下面的代码了,并不需要去获取按钮的单击状态或者窗口 是否 打开的状态,我只要设置一个while循环让它找那个窗口找不到不罢休就行了,并不需要去去 获取 窗口是否打开的状态,因为他打开就执行,不打开就在while循环里面继续找就行了

    点赞 评论

相关推荐