通过一个窗口程序向另外一个窗口程序发送鼠标左键点击消息。
我做了两个窗口程序AAA,BBB:
AAA:一个dlg窗口,在窗口坐标(100,100)处放了一个button_aaa,同时在on_button_aaa响应函数里面有一个MessageBox("OK!!!");函数
BBB:也是一个dlg窗口,上面有两个button:button_bbb1,button_bbb2。在on_button_bbb1里面已实现如下功能
找到AAA窗口的句柄,将鼠标移动到AAA窗口坐标(100,100)处,点击鼠标,弹出对话框“OK!!!”。
现须要写一个button_bbb2的响应函数on_button_bbb2。用sendmessage实现鼠标点击AAA窗口坐标(100,100)的功能,点击完成后AAA窗口弹出“OK!!!”对话框。============================================================================
on_button_bbb1实现代码如下,已经测试通过,请务重复,请提供一下on_button_bbb2的代码,要求用sendmessage实现:
//另外我翻看了论坛上这一块的关于SendMessage的问题,也试了很多次,没有成功,请达人帮助。on_button_bbb1()
{
//g_DstWnd是AAA窗口的句柄
static BOOL flag=FALSE;
CRect crect;
::GetWindowRect(g_DstWnd,crect);
int w=crect.Width();
int h=crect.Height();
if (flag==FALSE)
{
::MoveWindow(g_DstWnd,0,0,w,h,TRUE);//为了保障测试把窗口移动到(0,0)
flag=TRUE;
}
RECT rc;
int x, y;
::GetWindowRect(g_DstWnd,&rc);
x = rc.left+100;
y = rc.top+100;
::SetCursorPos(x,y);
::mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
::mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
============================================================================
我写的on_button_bbb2(),无法实现点击功能(我怀疑,是不是直接点到窗体上去了,而不是点的button_aaa)
另外说明,不希望通过得到button_aaa的句柄去做鼠标点击:
on_button_bbb2()
{
::SetForegroundWindow(g_DstWnd);//激活 CRect crect;
::GetWindowRect(g_DstWnd,crect);
int w=crect.Width();
int h=crect.Height();
::MoveWindow(g_DstWnd,0,0,w,h,TRUE);//移动
Sleep(200);
::SendMessage(g_DstWnd,WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(100,100));
Sleep(200);
::SendMessage(g_DstWnd,WM_LBUTTONUP,MK_LBUTTON,MAKELONG(100,100));
}
我做了两个窗口程序AAA,BBB:
AAA:一个dlg窗口,在窗口坐标(100,100)处放了一个button_aaa,同时在on_button_aaa响应函数里面有一个MessageBox("OK!!!");函数
BBB:也是一个dlg窗口,上面有两个button:button_bbb1,button_bbb2。在on_button_bbb1里面已实现如下功能
找到AAA窗口的句柄,将鼠标移动到AAA窗口坐标(100,100)处,点击鼠标,弹出对话框“OK!!!”。
现须要写一个button_bbb2的响应函数on_button_bbb2。用sendmessage实现鼠标点击AAA窗口坐标(100,100)的功能,点击完成后AAA窗口弹出“OK!!!”对话框。============================================================================
on_button_bbb1实现代码如下,已经测试通过,请务重复,请提供一下on_button_bbb2的代码,要求用sendmessage实现:
//另外我翻看了论坛上这一块的关于SendMessage的问题,也试了很多次,没有成功,请达人帮助。on_button_bbb1()
{
//g_DstWnd是AAA窗口的句柄
static BOOL flag=FALSE;
CRect crect;
::GetWindowRect(g_DstWnd,crect);
int w=crect.Width();
int h=crect.Height();
if (flag==FALSE)
{
::MoveWindow(g_DstWnd,0,0,w,h,TRUE);//为了保障测试把窗口移动到(0,0)
flag=TRUE;
}
RECT rc;
int x, y;
::GetWindowRect(g_DstWnd,&rc);
x = rc.left+100;
y = rc.top+100;
::SetCursorPos(x,y);
::mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
::mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
============================================================================
我写的on_button_bbb2(),无法实现点击功能(我怀疑,是不是直接点到窗体上去了,而不是点的button_aaa)
另外说明,不希望通过得到button_aaa的句柄去做鼠标点击:
on_button_bbb2()
{
::SetForegroundWindow(g_DstWnd);//激活 CRect crect;
::GetWindowRect(g_DstWnd,crect);
int w=crect.Width();
int h=crect.Height();
::MoveWindow(g_DstWnd,0,0,w,h,TRUE);//移动
Sleep(200);
::SendMessage(g_DstWnd,WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(100,100));
Sleep(200);
::SendMessage(g_DstWnd,WM_LBUTTONUP,MK_LBUTTON,MAKELONG(100,100));
}
解决方案 »
- 开始进入VC++开发行列
- 基于对话框的串口通信---------售票投币通信
- 类似MessageBox界面的制作问题----请各位对界面有经验者帮忙解答下!~
- A进程CreateProcess了B进程,A怎么知道B已经退出了?
- 如何使用ProgressCtrl控件?(要详细点的)
- LIBID_Xxx是作什么用的?
- 哪个晓得用户输入数据之后得出一张二维表格让用户填,是怎么弄得
- 真的是很简单的问题!!
- 〉〉〉有人用过ListView_SetCheckState,为什么我用ListView_SetCheckState时vc编译会说“不可识别的标识符“????
- 如何找到这些ID号?
- EnumChildWindows
- 关于拨号连接的一个问题
我的邮件是[email protected]
如果把代码发给我也可以噢(非必选:)),十分感谢
谢谢噢
mouse_event,我已知道如何处理。
其实我想做的是,已知某窗口句柄,同时知道窗口上一个按钮的窗口坐标,我想在不移动鼠标的前提下去点这个按钮,必须用鼠标消息去点这个按钮噢!所以想到用sendmessage,但是一直弄出来。实现相同的功能还有其他方法么??
呵呵不过有点大才小用了不过sendmessage是可以的任意位置都可以只要能找到哪个按纽的句柄
你自己下载下来看,保证有效果
SendMessage(hWnd,WM_LBUTTONUP,0,MAKELPARAM(x,y));这个是向窗体某一个坐标发送点击消息
SendMessage(bWnd,WM_LBUTTONUP,0,MAKELPARAM(x,y));
BOOL EnumChildWindows(
HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);或
HWND FindWindowEx( HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);找到按钮句柄,然后给它发送BM_CLICK消息。
用sendmessage的问题是好像必须找到button_aaa的句柄才可以!
在sendmessage里面用窗口句柄是点不到button_aaa的,你可以试噢。我想做的是如同mouse_event一样,只须要指定窗口坐标就可以点到这个button_aaa,只不过把mouse_event换成sendmessage。
换句话说,我只知道按钮在窗口上的坐标,而无法取到按钮的句柄,在这种前提下要实现点击按钮。如果不用mouse_event,有没有其他的可以?
先判定对应的点有没有子窗口,如果有,就取得对应的子窗口句柄取实现点击事件。
good,very good。
等按试验成功给分啊。看其他人有没思路
对有的程序来说
不是没有受到消息 而是不处理消息
要先发一个MOUSEMOVE的消息才有用
那个梦幻西游就是这样例子如下
具体你自己在看看
LPARAM lparam = MAKELPARAM(this->m_xxxx,this->m_yyyy);::PostMessage(this->m_window->m_hWnd,WM_MOUSEMOVE,0,lparam);::PostMessage(this->m_window->m_hWnd,WM_LBUTTONDOWN,0,lparam);
very good!明天追分,结贴。