| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2672 人关注过本帖
标题:想坐标移位点击计算器内的数字随便一个都好,为什么计算器一点反应都没有, ...
只看楼主 加入收藏
caicaicai0
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-6-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
想坐标移位点击计算器内的数字随便一个都好,为什么计算器一点反应都没有,有大佬知道不?
#include<stdlib.h>
#include<windows.h>
#include<stdio.h>
int main(int argc, char* argv[])
{
HWND hwnd= FindWindow(NULL, "计算器");
WPARAM wParam = MK_LBUTTON;
LPARAM lParam = MAKELONG(150, 150);
SendMessage(hwnd, WM_LBUTTONDOWN, wParam, lParam);
Sleep(500);
SendMessage(hwnd, WM_LBUTTONUP, wParam, lParam);
return 0;
}
搜索更多相关主题的帖子: 坐标 include 计算器 数字 HWND 
2020-06-03 12:15
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:20 
窗口句柄有无选对,最好拦截相关消息看看手动和自动点击是否一样
看了一下Win10算计器的窗口结构:
图片附件: 游客没有浏览图片的权限,请 登录注册
2020-06-03 18:38
caicaicai0
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-6-3
收藏
得分:0 
回复 2楼 吹水佬
我系统Win7,电脑上只有一个系统自带的计算器
2020-06-03 19:25
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用caicaicai0在2020-6-3 19:25:04的发言:

我系统Win7,电脑上只有一个系统自带的计算器

如果计算器不只一个窗口对象,就好象Win10的计算器就有4个窗口对象,鼠标点击消息的处理就有点复杂。
有子窗口的都试试看
2020-06-03 21:08
caicaicai0
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-6-3
收藏
得分:0 
回复 4楼 吹水佬
只有一个计算器窗口,而且我电脑只有一个计算器软件,我用FindWindowEx查找子类名CalcFrame也不管用,不知道怎么回事
2020-06-03 22:26
caicaicai0
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-6-3
收藏
得分:0 
回复 5楼 caicaicai0
能查得到句柄就是不能模拟点击
2020-06-03 22:31
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:0 
回复 6楼 caicaicai0
消息能正常发到窗口,也不一定能模拟手动点击效果,这要看消息触发事件过程是怎样处理。
用mouse_event()或SendInput()模拟手动就可以
2020-06-03 22:47
caicaicai0
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-6-3
收藏
得分:0 
回复 7楼 吹水佬
hmouse_event()或SendInput()好像不能加入hwnd句柄
2020-06-04 09:06
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用caicaicai0在2020-6-4 09:06:19的发言:

hmouse_event()或SendInput()好像不能加入hwnd句柄

hmouse_event()或SendInput()是针对整个屏幕的。
试了一下XP的计算器,消息发到主窗口对象不行,要发到按钮对象才可以。
XP计算器的窗口对象结构:
图片附件: 游客没有浏览图片的权限,请 登录注册

如:要点击按钮7,句柄是132662
代码:
    HWND hWnd = (HWND)132662;
    SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(2,2));
    SendMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(2,2));
2020-06-04 09:28
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:0 
回复 8楼 caicaicai0
SendInput()的示例:

#include<windows.h>
#include<stdio.h>

void MouseClick(HWND hWnd, int xPos, int yPos)
{
    SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0,(SWP_NOMOVE|SWP_NOSIZE));
    RECT rect;
    GetWindowRect(hWnd, &rect);
    INPUT input;
    input.type = INPUT_MOUSE;
    input.mi.dx = 0xFFFF/(GetSystemMetrics(SM_CXSCREEN)-1) * (rect.left+xPos);
    input.mi.dy = 0xFFFF/(GetSystemMetrics(SM_CYSCREEN)-1) * (rect.top+yPos);
    // 先看看确定鼠标移动位置
    //input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
    input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
    SendInput(1, &input, sizeof(INPUT));
    SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0,(SWP_NOMOVE|SWP_NOSIZE));
}

int main(int argc, char* argv[])
{
    HWND hWnd = FindWindow(NULL, "计算器");
    if (hWnd == NULL)
        return 0;
    int X = 220;    // 相对窗口区域
    int Y = 380;
    MouseClick(hWnd, X, Y);
    return 0;
}
2020-06-04 09:48
快速回复:想坐标移位点击计算器内的数字随便一个都好,为什么计算器一点反应都没 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021505 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved