注册 登录
编程论坛 汇编论坛

通过计算机的主窗口进行发送X,Y坐标消息。求人指点,包含源代码。谢谢

llxdgchk 发布于 2012-09-16 14:54, 633 次点击
有没有人帮忙啊。。打开计算器,先找到主窗口句柄,然后用sendmessage或者postmessage,向指定的按键去模拟键盘鼠标操作,不能用那些数字的句柄来操作.
只有本站会员才能查看附件,请 登录

只能通过计算机的主窗口进行发送X,Y坐标消息。不能向别的按钮发送消息
昨天就是PostMessage( hwnd, WM_LBUTTONDOWN, NULL, MAKELPARAM(151,113) )。位移了,也不见成功 .
我指定X,Y坐标的值,也不见它模拟成功 .
麻烦谁有时间写个计算机模拟按键的,用sendmessage或者postmessage,发送X,Y坐标,用汇编写代码出来,好吗?
下面是我的代码,能编译成功,但就是不能模拟点键。。

.386
.Model Flat, StdCall
Option Casemap :None

include    windows.inc
include    user32.inc
include    kernel32.inc
includelib    user32.lib
includelib    kernel32.lib
include        Shell32.inc   
includelib    Shell32.lib

.DATA?
szbuf        db    256    dup    (?)
hwin        dd    ?
szxy        dd    ?

.DATA
szcalc        db    'calc.exe',0
szCalculator    db    'Calculator',0
szSciCalc    db    'SciCalc',0
szx        db    '%08x',0
.CODE
START:
    invoke    GetModuleHandle,NULL
    invoke    ShellExecute,NULL,NULL,offset szcalc,NULL,NULL,SW_NORMAL
    ;上面打开计算器
    invoke    Sleep,500
    invoke    FindWindow,offset szSciCalc,offset szCalculator
    .if    eax
        mov    hwin,eax
    .endif
    ;--上面找到计算器的主窗口并激活
    invoke    SetActiveWindow,hwin
    mov    eax,158
    ;--先设置Y坐标的值为158,然后左移16位
    shl    eax,16
    mov    ebx,51
    ;--设置X坐标值为51
    or    eax,ebx
    ;--再把X,Y进行OR操作
    invoke    wsprintf,offset szbuf,offset szx,eax
    ;把最终值转换成16进制
    invoke    Sleep,1000
    invoke    PostMessage,hwin,WM_LBUTTONDOWN, NULL,offset szbuf
    invoke    PostMessage,hwin,WM_LBUTTONUP, NULL,offset szbuf
    ;--发送左键消息,在lparam中设置了刚转换的16进制值
    invoke    ExitProcess,NULL
END START
7 回复
#2
zklhp2012-09-16 15:00
模拟鼠标键盘用SendInput比较方便 自己发消息比较麻烦

http://msdn.
#3
llxdgchk2012-09-16 15:15
麻烦一点没关系,关键是我是直接学汇编,没有学过C和C++这些语言,我看不懂。。我只看得懂汇编,郁闷。。。版主能不能抽时间帮我看一下,哪里需要修改,才能模拟成功啊。。
只有本站会员才能查看附件,请 登录
#4
zklhp2012-09-16 15:22
以下是引用llxdgchk在2012-9-16 15:15:15的发言:

麻烦一点没关系,关键是我是直接学汇编,没有学过C和C++这些语言,我看不懂。。我只看得懂汇编,郁闷。。。版主能不能抽时间帮我看一下,哪里需要修改,才能模拟成功啊。。

我说麻烦 意思就是我懒得看。。 所以 我建议你用其他API实现
#5
水哥2012-09-17 13:43
用mouse_event这个API模拟操作
#6
zhu2240392012-09-22 01:12
主动放弃看了,返回看DOS调用 和 BIOS调用了   尼玛伤到了
#7
dxuser2012-10-02 21:01
long hp;
    RECT r1;
    POINT p;

    hp = dm.FindWindow(0,"宽带连接");
    ::GetWindowRect((HWND)hp,&r1);
    ::GetCursorPos(&p);
    ::SetCursorPos(43+r1.left,326+r1.top);
    Sleep(500);
    dm.LeftClick();

自动点宽带连接那个“连接”按扭的
/////////////////////////
那个dm.XXXXX你换下.....
#8
dxuser2012-10-02 21:06
用SPY++查点的坐标。。。。然后移动鼠标,点击。。。

看下郁金香的外挂教程吧
1