C# 别人软件里边做好的文本框,我如何给他赋值并且提交,最好有源码可供参考,如有合适的,将高额追加分
有Winfrom做的最好,我的意思是,别人已经打包的程序,我安装后,然后我自己写一个程序,能够填写他软件里面text文本框且点击他软件的提交按钮提交。...
有Winfrom做的最好,我的意思是,别人已经打包的程序,我安装后,然后我自己写一个程序,能够填写他软件里面text文本框且点击他软件的提交按钮提交。
展开
3个回答
展开全部
可以用WINDOWS api函数实现。
下面的WINDIWS API引用部分的代码,放入 class 内部
[DllImport ( "user32.dll", EntryPoint = "FindWindow", SetLastError = true )]
private static extern IntPtr FindWindow( string lpClassName, string lpWindowName );//查找窗口句柄
[DllImport ( "user32.dll", EntryPoint = "FindWindowEx", SetLastError = true )]
private static extern IntPtr FindWindowEx( IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow );//查找窗口内控件句柄
[DllImport ( "user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto )]
private static extern int SendMessage( IntPtr hwnd, uint wMsg, int wParam, int lParam );//发送消息
[DllImport ( "user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true )]
private static extern void SetForegroundWindow( IntPtr hwnd );// 设置窗口为激活状态
哈哈,现在可以开工了。我就用QQ的自动登录为列子
下面是你winfrom窗口的按钮事件:
private void button1_Click( object sender, EventArgs e )
{
const uint WM_SETTEXT = 0x000C;//设置文本框内容的消息
const uint BM_CLICK = 0xF5; //鼠标点击的消息,对于各种消息的数值,你还是得去查查API手册
IntPtr hwndCalc = FindWindow ( null, "QQ2011" ); //查找QQ2011的窗口句柄
if ( hwndCalc != IntPtr.Zero )//找到啦
{
IntPtr hwndLogin= FindWindowEx ( hwndCalc, 0, null, "安全登录" ); //获取登陆按钮的句柄
IntPtr hwndQ = FindWindowEx ( hwndCalc, 0, “ComboBox”, "" ); //获取QQ号码输入框的控件句柄
IntPtr hwndP = FindWindowEx ( hwndCalc, 0,"Edit", “” ); //获取密码输入框的控件句柄 SetForegroundWindow ( hwndCalc ); //将QQ窗口设置为激活
System.Threading.Thread.Sleep ( 1000 ); //暂停1秒让你看到效果
SendMessage ( hwndQ, WM_SETTEXT, TextBox1.Text, 0 );//发送文本框1里面的内容(QQ号啦)
System.Threading.Thread.Sleep ( 1000 ); //暂停1秒让你看到效果
SendMessage( hwndP, WM_SETTEXT, TextBox2.Text, 0 );//发送文本框2里面的内容(QQpassword)
System.Threading.Thread.Sleep ( 1000); //暂停1秒让你看到效果
SendMessage ( hwndLogin, BM_CLICK, 0, 0 );//点击登录
}
else
{
MessageBox.Show ("没有启动 [QQ2011]");
}
}
纯手打,我这边没VS编译器,楼主只有自己测试咯。。不懂可以再问我QQ215811605
下面的WINDIWS API引用部分的代码,放入 class 内部
[DllImport ( "user32.dll", EntryPoint = "FindWindow", SetLastError = true )]
private static extern IntPtr FindWindow( string lpClassName, string lpWindowName );//查找窗口句柄
[DllImport ( "user32.dll", EntryPoint = "FindWindowEx", SetLastError = true )]
private static extern IntPtr FindWindowEx( IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow );//查找窗口内控件句柄
[DllImport ( "user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto )]
private static extern int SendMessage( IntPtr hwnd, uint wMsg, int wParam, int lParam );//发送消息
[DllImport ( "user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true )]
private static extern void SetForegroundWindow( IntPtr hwnd );// 设置窗口为激活状态
哈哈,现在可以开工了。我就用QQ的自动登录为列子
下面是你winfrom窗口的按钮事件:
private void button1_Click( object sender, EventArgs e )
{
const uint WM_SETTEXT = 0x000C;//设置文本框内容的消息
const uint BM_CLICK = 0xF5; //鼠标点击的消息,对于各种消息的数值,你还是得去查查API手册
IntPtr hwndCalc = FindWindow ( null, "QQ2011" ); //查找QQ2011的窗口句柄
if ( hwndCalc != IntPtr.Zero )//找到啦
{
IntPtr hwndLogin= FindWindowEx ( hwndCalc, 0, null, "安全登录" ); //获取登陆按钮的句柄
IntPtr hwndQ = FindWindowEx ( hwndCalc, 0, “ComboBox”, "" ); //获取QQ号码输入框的控件句柄
IntPtr hwndP = FindWindowEx ( hwndCalc, 0,"Edit", “” ); //获取密码输入框的控件句柄 SetForegroundWindow ( hwndCalc ); //将QQ窗口设置为激活
System.Threading.Thread.Sleep ( 1000 ); //暂停1秒让你看到效果
SendMessage ( hwndQ, WM_SETTEXT, TextBox1.Text, 0 );//发送文本框1里面的内容(QQ号啦)
System.Threading.Thread.Sleep ( 1000 ); //暂停1秒让你看到效果
SendMessage( hwndP, WM_SETTEXT, TextBox2.Text, 0 );//发送文本框2里面的内容(QQpassword)
System.Threading.Thread.Sleep ( 1000); //暂停1秒让你看到效果
SendMessage ( hwndLogin, BM_CLICK, 0, 0 );//点击登录
}
else
{
MessageBox.Show ("没有启动 [QQ2011]");
}
}
纯手打,我这边没VS编译器,楼主只有自己测试咯。。不懂可以再问我QQ215811605
展开全部
如果你安装完整的visual studio ,里面有个Visual Studio Tools里面有个spy++。 去网上看看这个spy++的用法。
通过spy++得到输入text内容所需要的命令,点击按钮所需要的命令。
通过API,枚举窗体,找到你需要的窗体。然后通过SendMessage或者PostMessage发送消息过去。就模拟操作了。 如果对方的程序是用spy++无法抓取控件的,那就只能使用模拟键盘的方式。
通过spy++得到输入text内容所需要的命令,点击按钮所需要的命令。
通过API,枚举窗体,找到你需要的窗体。然后通过SendMessage或者PostMessage发送消息过去。就模拟操作了。 如果对方的程序是用spy++无法抓取控件的,那就只能使用模拟键盘的方式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-12-13
展开全部
别人软件里边做好的文本框? 你是要修改原软件还是 另外写程序调用它原本的程序
前者直接改就行了 后者 要看他是否支持你改写
如果原软件都锁定了 那你没法修改的
代码要看原软件的加密程度和结构体系来决定代码怎么写 这不是买菜 没有固定的模式
前者直接改就行了 后者 要看他是否支持你改写
如果原软件都锁定了 那你没法修改的
代码要看原软件的加密程度和结构体系来决定代码怎么写 这不是买菜 没有固定的模式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询