如题
解决方案 »
- 散分---你有多久没有使用过Delphi了。
- 谁来说说QQ2009、QQ2010如何实现自动登录?
- 我是一个delphi初学者~~~请教大家一个菜鸟问题~
- 关于clientdataset/setprovider问题
- 这段程序老有问题那位高人能告诉我是怎么回事?(100分)up有分
- 这个问题谁会?
- 如何确定一客户机是台式机还是终端机?
- 为什么我从dll中调出的模式窗体在任务栏上显示呢?
- python , hello world 不成功。 为什么???
- 三层结构访问数据库效率非常的问题
- 用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