如题
解决方案 »
- 程序内+延时的问题?
- 如何获取窗体中Button1按钮当前的onClick事件的名称
- 请大家帮帮忙,看看这些备份代码的问题…
- DdeClient 问题,为什么只有 DdeClientItem00 有值,其他没有呢? 我就是这样连的?
- 100分:vclskin 的 安装问题.
- Tchart中怎样显示很粗的虚线?在线等待!
- 帮我看看'Select * from mail Where Muser...错在哪啊?
- 如何把一个字节数组转换为流?
- 如何强制终止一个线程函数中为死循环且没有退出代码的线程,而不管线程是否活动?
- 如何把StringGrid里的某一格里的内容分成2行显示
- 用DELPHI的ADO+MYSQL做成的程序在用float(D,M)数据类型的问题??
- 请教问题,在中间层Provider的事件BeforeUpdateRecord中,如果仅用Applied=true是不能提交数据的
傻瓜的办法,先找到计算器的窗口,还找到该窗口的按钮的HWND,一一发送鼠标按下消息type
TBtnWnd = packed record
btn_1: HWND;
btn_plus: HWND;
btn_equ: HWND;
end;
PBtnWnd = ^TBtnWnd;procedure TForm1.Button1Click(Sender: TObject);
function enum(AWnd: HWND; AParam: LPARAM): BOOL; stdcall;
var
buf: array[0..63] of Char;
begin
if (GetClassName(AWnd, buf, 64)<>0)
and SameText(buf, 'Button') then
begin
if GetWindowText(AWnd, buf, 64)<>0 then
begin
if buf = '1' then
PBtnWnd(AParam)^.btn_1 := AWnd
else if buf = '+' then
PBtnWnd(AParam)^.btn_plus := AWnd
else if buf = '=' then
PBtnWnd(AParam)^.btn_equ := AWnd;
end;
end;
Result := True;
end;
var
w: HWND;
btn_wnd: TBtnWnd;
begin
w := FindWindow('SciCalc', '计算器');
if w<>0 then
begin
FillChar(btn_wnd, sizeof(btn_wnd), 0);
EnumChildWindows(w, @enum, Integer(@btn_wnd));
if (btn_wnd.btn_1<>0)
and(btn_wnd.btn_plus<>0)
and(btn_wnd.btn_equ<>0) then
begin
SendMessage(btn_wnd.btn_1, WM_LBUTTONDOWN, MK_LBUTTON, 0);
SendMessage(btn_wnd.btn_1, WM_LBUTTONUP, MK_LBUTTON, 0);
SendMessage(btn_wnd.btn_plus, WM_LBUTTONDOWN, MK_LBUTTON, 0);
SendMessage(btn_wnd.btn_plus, WM_LBUTTONUP, MK_LBUTTON, 0);
SendMessage(btn_wnd.btn_1, WM_LBUTTONDOWN, MK_LBUTTON, 0);
SendMessage(btn_wnd.btn_1, WM_LBUTTONUP, MK_LBUTTON, 0);
SendMessage(btn_wnd.btn_equ, WM_LBUTTONDOWN, MK_LBUTTON, 0);
SendMessage(btn_wnd.btn_equ, WM_LBUTTONUP, MK_LBUTTON, 0);
end;
end;
end;
运行后,计算器得出正确的值:2