我用SPY++看了鼠标左键按下拖动的过程,我想用程序自己模拟,但是我做了4天,没出来,我快崩溃了?

zhuwenzheng 2002-08-26 05:01:33
我单独的鼠标移动和按键已经好了,本来我以为只要双方组合就可以了,可是我到现在还没调试出来,头已经晕了,高人来指点一下,masterz等?
...全文
219 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidHowe 2002-08-28
  • 打赏
  • 举报
回复
不知道你到底想怎么样!
如果是想用鼠标来寻找窗口的话,我有个例程,如果想要的话,发邮件到vcplus2@sina.com
zhuwenzheng 2002-08-27
  • 打赏
  • 举报
回复
TO jishiping(JSP 季世平) :
你这样实现不了鼠标按键拖动的功能
2ndboy 2002-08-27
  • 打赏
  • 举报
回复
SetCapture()试试
jishiping 2002-08-27
  • 打赏
  • 举报
回复
其实上面的已经说了,用mouse_event来模拟鼠标的动作。下面给你一段
模拟的代码:
void ProcessMessages() //处理消息队列中的消息
{
MSG Msg;

while(PeekMessage(&Msg,NULL,0,0,
PM_REMOVE)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}

void SimulateMose(HWND hBtn) //模拟鼠标的一段代码
{
RECT Rect;
DWORD dwInfo;

dwInfo = GetMessageExtraInfo();
GetWindowRect(hBtn, &Rect);
SetCursorPos((Rect.left+Rect.right)/2, (Rect.top
+Rect.bottom)/2); //将鼠标移到Button的中间
//模拟在Button上按下鼠标
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, dwInfo);
ProcessMessages(); Sleep(200);
for(int n=0; n<100; n++) {
//模拟移动鼠标位置(向右移)
mouse_event(MOUSEEVENTF_MOVE, 2, 0, 0, dwInfo);
//每次移动时暂停一下,让用户看到移动的过程
ProcessMessages(); Sleep(20);
}
for(int n=0; n<100; n++) {
//模拟移动鼠标位置(向右移),移回原来的位置
mouse_event(MOUSEEVENTF_MOVE, -2, 0, 0, dwInfo);
//每次移动时暂停一下,让用户看到移动的过程
ProcessMessages(); Sleep(20);
}
//模拟在Button上松开鼠标,触发Button的Click事件
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, dwInfo);
}
srg777 2002-08-27
  • 打赏
  • 举报
回复
兄弟给分把!

我好久没回答问题了,手上的分也不多了!哈哈哈
xiachedan 2002-08-27
  • 打赏
  • 举报
回复
关注!!!
zhuwenzheng 2002-08-27
  • 打赏
  • 举报
回复
我要,zhuwz@vip.sina.com
comcom 2002-08-27
  • 打赏
  • 举报
回复
我这里有一个别人开发的源代码,谁要?
zhuwenzheng 2002-08-27
  • 打赏
  • 举报
回复
TO mengxihe(蒙溪河);
你能不能说明白点
mengxihe 2002-08-27
  • 打赏
  • 举报
回复
用SetCapture()就行了
zhuwenzheng 2002-08-27
  • 打赏
  • 举报
回复
to In355Hz(好象一条狗) :
我这样试过了,还是不可以
vfe 2002-08-27
  • 打赏
  • 举报
回复
void CHDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd* pWnd = ChildWindowFromPoint(point);
if (pWnd && pWnd->GetSafeHwnd() == m_stcMagnifyingGlass.GetSafeHwnd())
{
SetCapture();
SetCursor(m_hMagGlassCursor);
m_stcMagnifyingGlass.SetIcon(m_hMagGlassBlank);

m_bIsCapturing = TRUE;
}
CDialog::OnLButtonDown(nFlags, point);
}

void CHDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_bIsCapturing)
{
StopCapture();
}
CDialog::OnLButtonUp(nFlags, point);
}


void CHDlg::StopCapture()
{
if (m_bIsCapturing)
{
ReleaseCapture();
m_bIsCapturing = FALSE;
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
// m_stcMagnifyingGlass.SetIcon(m_hMagGlassIcon);
}
}

BOOL CHDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
BOOL bHandledMsg = FALSE;
switch (pMsg->message)
{
case WM_KEYDOWN:
{
switch (pMsg->wParam)
{
case VK_ESCAPE:
if (m_bIsCapturing)
{
StopCapture();
bHandledMsg = TRUE;
}
break;
default: break;
} // switch (pMsg->wParam)
}
break;
default: break;
} // switch (pMsg->message)
return CDialog::PreTranslateMessage(pMsg);
}
virtualfunction 2002-08-27
  • 打赏
  • 举报
回复
我不知道你究竟要做什么,但可以肯定,它涉及到进程间通讯。通过以上各位仁兄的介绍的简单方法,你是不可能打破进程间壁垒的!(因为每个进程都在自己独立的4G虚拟地址空间内运行!)如果你具备以下三方面知识,你可以做出一个Spy++那样的东西来,它们是:
1.创建动态连接库;
2.HOOK函数集的运用;(MSDN中有介绍)
3.内存映射文件。
你为HOOK函数创建的动态连接库代码可以注射到其它进程的虚拟地址空间内运行,这样你就可以拦截其进程的消息为你所用。有两个HOOK函数是专门拦截鼠标消息的。
In355Hz 2002-08-27
  • 打赏
  • 举报
回复
应该是可以的,这是我用SendInput做的实验,假设从ptA拖到PtB,不显示拖动过程,注意移动时dwFlags为MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE

INPUT input[4];
ZeroMemory(input, sizeof(INPUT[4]));

input[0].type = INPUT_MOUSE;
input[0].mi.dx = ptA.x;
input[0].mi.dy = ptA.y;
input[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input[1].type = INPUT_MOUSE;
input[1].mi.dx = ptA.x;
input[1].mi.dy = ptA.y;
input[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
input[2].type = INPUT_MOUSE;
input[2].mi.dx = ptB.x;
input[2].mi.dy = ptB.y;
input[2].mi.dwFlags =
MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE;
input[3].type = INPUT_MOUSE;
input[3].mi.dx = ptB.x;
input[3].mi.dy = ptB.y;
input[3].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP;

SendInput(4, input, sizeof(INPUT));
Sustain 2002-08-27
  • 打赏
  • 举报
回复
实际上你可以在DOS下先做作试验,然后再移植到Windows上来。
zzhcom 2002-08-27
  • 打赏
  • 举报
回复
在cjlib中CCJDockContext类好像有类似的代码,
你可以看看StartDragDockBar, TrackDockBar等方法
zhuwenzheng 2002-08-27
  • 打赏
  • 举报
回复
有没有人在啊,高手到哪里了,郁闷....
Tasehouny 2002-08-27
  • 打赏
  • 举报
回复
网上有一片关于USB鼠标的制作,你看看它的源代码,也许有用,在GOOGLE上搜一下,一定能搜到的!
zhuwenzheng 2002-08-27
  • 打赏
  • 举报
回复
就是鼠标先按键,然后移动,在键弹起前桌面有个方框,弹起后框消失
jishiping 2002-08-27
  • 打赏
  • 举报
回复
"鼠标按键拖动的功能" 是什么意思?
加载更多回复(23)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧