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("没有找到窗口");
还有,哪个大神知道怎么通过句柄使某个第三方程序的文本框得到焦点么?
http://www.myexception.cn/c-sharp/70991.html
跨进程操作,得使用C/C++去实现才行。然后导出一个接口函数给C#即可。
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循环里面继续找就行了