怎样用Spy++查看UC的“发送”按钮消息?BM_CLICK点不成功。

nonlyli 2005-08-28 04:07:36
想写个简单的UC自动发短信程序,用SPY++找到了窗体的“发送”按钮了,但用
SendMessage(hBtnSend,BM_CLICK,0,0)
不起作用,QQ之类的软件一试就准。

想用Spy++自己找消息的,不会找啊。只找到些LBUTTONDOWN(我也模拟过了,不起作用)。

弄了好几个小时了,请朋友帮忙!
...全文
291 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nonlyli 2005-09-04
  • 打赏
  • 举报
回复
你写的代码真酷啊。跟我的初级代码没法比。
你习惯用C的习惯么?连string也不用,酷!

一定要拉上你找你好好学学。

现在还纳闷呢,怎么BM_CLICK消息就不行,要用WM_LBUTTONDOWN呢?
QQ等软件BM_CLICK就很好用呢……
nonlyli 2005-09-04
  • 打赏
  • 举报
回复
好的,谢谢。今天才来看帖。
thanks a lot!
Larry1030 2005-08-29
  • 打赏
  • 举报
回复
消息是肯定能起作用的, 关键是确认得到了按钮的句柄, 上面的代码
这两句应该有帮助的 
TempHandle:=Windows.GetParent(eHandle);
HLoginButton:= Windows.GetNextWindow(TempHandle,GW_HWNDNEXT);
Larry1030 2005-08-28
  • 打赏
  • 举报
回复
哈哈 , 没问题的话 就jf拉
Larry1030 2005-08-28
  • 打赏
  • 举报
回复
真巧, 我以前写过一个类是的程序, 是自动登陆的uc的 看看

TUCLogin = class(TObject)
private
FTimer: TTimer;
FUserId: String;
FPassword: String;
FApplicationPath: String;
public
constructor Create(AUserName , APassword, APath: String);
destructor Destroy; override;
procedure UCLogin;
procedure FTimerTimer(Sender: TObject);
end;


Var
UCHandle, //UC主窗口句柄
HPasswordEdit, //UC密码框句柄
HNumberCombo, //UC用户名编辑框
HLoginButton, //登陆按钮句柄
HSubFormHandle: THandle; //特殊按钮句柄

FUCVersion: PChar; //UC版本

implementation


{-------------------------------------------------------------------------------
过程名: FindUCWindow
说明: 查找系统中UC窗口的句柄
作者: Larry
日期: 2005.03.26
参数: 无
返回值: THandle
-------------------------------------------------------------------------------}
function FindUCWindow: THandle;

function GetSubForm(hwnd: HWND; lParam: LPARAM):Boolean; stdcall;
var
cName: array[0..128] of Char;
wName: array[0..128] of Char;
begin
result := true;
GetClassName(hwnd, cName, 128);
if StrPas(cName) = 'TUCTabSheet' then
begin
GetWindowText(hwnd, wName, 128);
if StrPas(wName) = 'UC号码'then
begin
PInteger(lParam)^ := hwnd;
result := false;
end;
end;
end;

function EnumWindowsFunc(hwnd: HWND; lParam: LPARAM): boolean; stdcall;
var
CName: array[0..128] of Char;
begin
Result := true;
if hwnd = 0 then Exit;
Windows.GetClassName(hwnd, CName, 128);
If StrPas(CName) <> 'TLoginForm' Then Exit;
EnumChildWindows(hwnd, @GetSubForm, Integer(@HSubFormHandle));
if HSubFormHandle <> 0 then
begin
UCHandle:= HSubFormHandle;
Result := False;
end;
end;

begin
UCHandle:= 0;
EnumWindows(@EnumWindowsFunc, 0);
Result:= UCHandle;
end;

{-------------------------------------------------------------------------------
过程名: GetUCHandle
说明: 取得UC窗口的各个编辑框以及登陆按钮的句柄
作者: Larry
日期: 2005.03.26
参数: 无
返回值: 无
-------------------------------------------------------------------------------}
procedure GetWindowHandle;
Var
eHandle,TempHandle: THandle;
begin
eHandle:= FindUCWindow;
if eHandle<>0 then
begin
HPasswordEdit:=Windows.FindWindowEx(eHandle,0,'TUCFlatEdit',nil);
HNumberCombo:=Windows.FindWindowEx(eHandle,0,'TXPComboBox',nil);
TempHandle:=Windows.GetParent(eHandle);
HLoginButton:= Windows.GetNextWindow(TempHandle,GW_HWNDNEXT);
end;
end;

{ TUCLogin }

constructor TUCLogin.Create(AUserName , APassword, APath: String);
begin
FUserId := AUserName;
FPassword := APassword;
FApplicationPath := APath;
Winexec(PChar(APath), SW_SHOW);
FTimer:= TTimer.Create(nil);
FTimer.Interval := 1000;
FTimer.OnTimer := FTimerTimer;
FTimer.Enabled := false;
end;


destructor TUCLogin.Destroy;
begin
FTimer.Free;
inherited;
end;

{-------------------------------------------------------------------------------
过程名: TUCLogin.FTimerTimer
说明: 启动UC后,计时器开始检测UC窗口的存在,
检测到了,发送用户名密码到指定编辑框再模拟点击UC登陆按钮完成登陆
作者: Larry
日期: 2005.03.26
参数: Sender: TObject
返回值: 无
-------------------------------------------------------------------------------}
procedure TUCLogin.FTimerTimer(Sender: TObject);
var
i: integer;
begin
GetWindowHandle;
If (HNumberCombo=0) or (HPasswordEdit=0) or (HLoginButton=0) Then Exit;
SendMessage(HNumberCombo, WM_SETTEXT, 0, Integer(FUserId));

For I:= 1 To Length(FPassword) Do
begin
SendMessage(HPasswordEdit, WM_CHAR, Integer(FPassword[I]), 0);
end;
SendMessage(HLoginButton, WM_LBUTTONDOWN, 0, 0);
SendMessage(HLoginButton, WM_LBUTTONUP, 0, 0);

FTimer.Enabled := False;
Free;
end;

procedure TUCLogin.UCLogin;
begin
FTimer.Enabled := True;
end;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧