问题描述
制作一个简单的程序,窗体上一个CLICK按钮!点击按就触发事件!首先判断是否存在特定程序(该特定程序有一个密码文本框,一个“确定”和一个“取消”按钮),给密码框填入密码(获取密码框句柄,把密码传递给密码框),模拟点击“确定”按钮,实现自动登陆!现在把代码发给大家,大家帮我看一下,我的值为什么无法传递给密码框。声明部分:[DllImport("user32.dll")]publicstaticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);[DllImport("user32.dll")]publicstaticexternIntPtrFindWindowEx(IntPtrhwndParent,IntPtrhwndChildAfter,stringlpszClass,stringlpszWindow);[DllImport("user32.dll",CharSet=CharSet.Unicode)]publicstaticexternIntPtrPostMessage(IntPtrhwnd,intwMsg,IntPtrwParam,IntPtrlParam);[DllImport("User32.dll",CharSet=CharSet.Auto)]publicstaticexternboolSetWindowText(IntPtrhwnd,stringlpString);CLICK部分:privatevoidbutton1_Click(objectsender,EventArgse){IntPtrhwnd_win;IntPtrhwnd_button;IntPtrhwnd_password;hwnd_win=FindWindow(null,"输入口令");//窗口的名称,获取窗口句柄hwnd_button=FindWindowEx(hwnd_win,newIntPtr(0),null,"确定(&O)");//获取确定按钮的句柄hwnd_password=FindWindowEx(hwnd_win,newIntPtr(0),"IRIS.password",null);//获取密码框的句柄,通过SPY++获得"IRIS.password"类名SetWindowText(hwnd_password,"kjc0311");constintBM_CLICK=0x00F5;Messagemsg=Message.Create(hwnd_button,BM_CLICK,newIntPtr(0),newIntPtr(0));PostMessage(msg.HWnd,msg.Msg,msg.WParam,msg.LParam);}我知道应该出在SetWindowText(hwnd_password,"kjc0311");这句话上,请大家帮忙看看!
解决方案
解决方案二:
应该是安全问题。这样做对系统来说是不安全的,所以不会设置成功。但在同一个应用程序区域里是可以的。
解决方案三:
Tosetthetextofacontrolinanotherprocess,sendtheWM_SETTEXTmessagedirectlyinsteadofcallingSetWindowText.这是MSDN上的一句话,你可以试试,就是不用调用这个API,而是发一个WM_SETTEXT消息给指定的窗口。
解决方案四:
本人刚接触C#,请楼上详细说明一下可以吗?