★★★★高手进来一起探讨,挑战VC++的程序★★★★
Form1为VC++所写的程序,其中有两个文本框.其中两个文本的句柄都为Edit,能否通过VB在后台中传输数据过去,使得文本框一为 "VB " ,文本框二为 "VC "?其中的有一个按扭,不知道是什么来的句柄跟窗体句柄一个样的,无法取出,更何谈发送指令?
各位能人,请发言!
[解决办法]
很简单,先用FindWindow获取QQ窗口句柄,再用用SendMessage给QQ窗口发消息
SendMessage(qqID_hWnd, WM_SETTEXT, 0, (LPARAM)qqid);
SendMessage(qqPass_hWnd, WM_SETTEXT, 0, (LPARAM)qqpass);
SendMessage(ButtonLogin, BM_CLICK, 0, 0);
[解决办法]
Option Explicit
Private Declare Function SendMessage Lib "user32.dll " Alias "SendMessageA " (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function GetDlgItem Lib "user32.dll " (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Const WM_SETTEXT As Long = &HC
Private Const BM_CLICK As Long = &HF5&
Public Function SendQQ(ByVal QQMainHwnd As Long, ByVal QQNum As String, ByVal QQPwd As String)
Dim hQQNum As Long, hQQPwd As Long, hQQLoginButton As Long
Dim lRet As Long
hQQNum = GetDlgItem(QQMainHwnd, 138) 'QQ号框的ID是8A
hQQPwd = GetDlgItem(QQMainHwnd, 0) 'QQ密码框ID是0????
hQQLoginButton = GetDlgItem(QQMainHwnd, 16032) 'QQ登录按钮ID为3EA0
If hQQNum <> 0 Then
lRet = SendMessage(hQQNum, WM_SETTEXT, ByVal 0, ByVal QQNum)
End If
If hQQPwd <> 0 Then
lRet = SendMessage(hQQPwd, WM_SETTEXT, ByVal 0, ByVal QQPwd)
End If
If hQQLoginButton <> 0 Then
lRet = SendMessage(hQQLoginButton, BM_CLICK, ByVal 0, ByVal 0)
End If
End Function
把这个放一模块里
然后作如下调用:
SendQQ [QQ主窗体句柄], [账号], [密码]
至于那几个QQ控件的ID,在不同的版本有可能不一样,你自己用SPY++确认一下.