怎样作一个鼠标行为记录&&播放程序

yokel 2003-02-27 05:16:30
窗体中有一个picture控件(已经载入图片),我希望能记录下鼠标在picture控件中的行为,若鼠标左键按下则用线描绘出轨迹,当结束记录时可以把鼠标行为记录(包括picture控件中原有图片和划线)保存成文件,以后可以播放观察过程.望各位给点思路.分不是问题
...全文
32 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yokel 2003-03-11
  • 打赏
  • 举报
回复
可能是ADSL的问题,服务器上可以,我的却死活不行,我试过了,可是实现鼠标运动坐标的记录&&播放,只是还未达到所问效果,不过我还是决定先给分了,谢谢各位的关注。
望各位把http://expert.csdn.net/Expert/topic/1516/1516126.xml?temp=.8451197革命到底,10000分相送,决无虚言
holydiablo 2003-03-11
  • 打赏
  • 举报
回复
又可以了
yokel 2003-03-11
  • 打赏
  • 举报
回复
已经下载,我先看看
yokel 2003-03-11
  • 打赏
  • 举报
回复
To wxy_xiaoyu:一会就看

To 头:我的Mail
yiqiangzhang@263.net
holydiablo 2003-03-11
  • 打赏
  • 举报
回复
会吗
那你给个MAIL,我给你发过去
Sean918 2003-03-11
  • 打赏
  • 举报
回复
请查找API函数: GetMouseMovePoints 相关资料!
yokel 2003-03-11
  • 打赏
  • 举报
回复
头儿,www.21code.com/202.99.11.123 无法访问呀
holydiablo 2003-03-11
  • 打赏
  • 举报
回复
给找了个例子
http://www.21code.com/codebase/?pos=down&id=1457
yokel 2003-03-11
  • 打赏
  • 举报
回复
不太满意
yokel 2003-02-28
  • 打赏
  • 举报
回复
Waiting......
zdleek 2003-02-28
  • 打赏
  • 举报
回复
据说全局hook不能用vb来做,下面的c++代码是引用某个网页的,我自己编译过了。编译之前你应该在vc里自己建立所需的资源(菜单、对话框和图标),如果你不懂vc那我就没办法了。

/************************************************************
函数声明如下:
HHOOK SetWindowsHookEx(
int idHook, // 钩子类型
HOOKPROC lpfn, // 钩子函数
HINSTANCE hMod, // 钩子函数所存在的模块句柄
DWORD dwThreadId // 指定线程id值
);
对各个参数的解释:
第一个参数:指定要安装的钩子的类型(将在后面详细应用中用到)
第二个参数:钩子函数指针。如果是和异地线程或者是所有存在的线程相关联(既是全局钩子),
那么这个函数必须是在动态链接库中(当然不绝对,日志钩子是全局钩子,但是它的实现可以不用在动态链接库中);
第三个参数:如果此模块为dll,则为0(NULL);
第四参数: 全局钩子为0,其他为线程id值;
首先给出一个很特殊的日志钩子实例,它是用来纪录和回放系统消息的,这时idhook=WH_JOURNALRECORD(纪录),
idhook=WH_JOURNALPLAYBACK(回放):
源代码如下:(vc and sdk)
//***********************************************************/
#include <windows.h>
#include "resource.h"

HHOOK ghook=0, ghook1=0;
int count=0, count1=0;
EVENTMSG eventmsg[60000];
bool ok;

HINSTANCE hInst=NULL;

LRESULT CALLBACK JournalRecordProc(int code, WPARAM wParam, LPARAM lParam );
LRESULT CALLBACK JournalPlaybackProc(int code, WPARAM wParam,LPARAM lParam );
LRESULT CALLBACK wndproc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hpreinst,LPSTR cmdline,int ncmdshow)
{
HWND hWnd;
ok=true;

MSG msg;
WNDCLASS wndclass;
char title[]="Hook Window for Test";
char classname[]="ZK-window";

hInst =hInstance; //save the handle of instance to global vaiable

wndclass.style=0;
wndclass.lpfnWndProc=wndproc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=HBRUSH(GetStockObject(WHITE_BRUSH));
wndclass.lpszMenuName=(LPCSTR)IDR_MENU_MAIN;
wndclass.lpszClassName=classname;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hWnd=CreateWindow(classname,
title,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,
0,
hInstance,
0);
ShowWindow(hWnd,ncmdshow);
UpdateWindow(hWnd);
while(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK wndproc(HWND hWnd,UINT message,WPARAM wparam,LPARAM lparam)
{
switch(message)
{

case WM_DESTROY:
PostQuitMessage(0);
break;

case WM_COMMAND:
switch(LOWORD(wparam))
{
case IDM_HELP:
ShellExecute(hWnd, NULL, "readme.txt", NULL, NULL, SW_SHOWNORMAL);
break;

case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUT, hWnd, (DLGPROC)About);
MessageBox(0,"感谢使用 , 多提意见","copy and modified by zdleek from csdn.net",0);
break;

case IDM_RECORD_HOOK:
ok=true;
count=0;
ghook=SetWindowsHookEx(WH_JOURNALRECORD,HOOKPROC(JournalRecordProc),hInst,0);
break;

case IDM_UNHOOK:
UnhookWindowsHookEx(ghook);
break;

case IDM_PLAYBACK_HOOK:
count1=0;
ghook1=SetWindowsHookEx(WH_JOURNALPLAYBACK,HOOKPROC(JournalPlaybackProc),hInst,0);
break;
case IDM_EXIT:
PostQuitMessage(0);
break;
}
break;
}

return DefWindowProc(hWnd,message,wparam,lparam);
}

//proc for JournalRecord-hook
LRESULT CALLBACK JournalRecordProc(
int code,
WPARAM wParam,
LPARAM lParam
)
{
if(code<0) return CallNextHookEx(ghook,code,wParam,lParam);
else if(code==HC_ACTION && count<=60000)
{
EVENTMSG *pevt=(EVENTMSG*)lParam;
eventmsg[count]=*pevt;
count=count+1;
}
return 0;

}

//proc for JournalPlayback-hook
LRESULT CALLBACK JournalPlaybackProc(int code,WPARAM wParam,LPARAM lParam )
{
if(code<0) return CallNextHookEx(ghook1,code,wParam,lParam );

else if(code==HC_GETNEXT )
{


if(count1==0)

{
EVENTMSG *pevt=(EVENTMSG*)lParam;
(*pevt)=eventmsg[count1];
count1=1;
return 50;
}
if(count1>=1 )


{


if(ok==false)
{ ok=true;
EVENTMSG *pevt=(EVENTMSG*)lParam;
(*pevt)=eventmsg[count1];
return 0; }

else if(ok==true )

{ count1++;
if(count1<=count)
{
if(count1==count) { UnhookWindowsHookEx(ghook1);}
ok=false;
return (eventmsg[count1].time-eventmsg[count1-1].time);

}

}
}

}

return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hItem;
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
//SetWindowText(hDlg,"Register OCX Now"); //Change the dialog windows caption

hItem=GetDlgItem(hDlg,IDOK); //get the Item(Button) handle
if (hItem != NULL)
{
/************************************
HPEN hpen, hpenOld;
HBRUSH hbrush, hbrushOld;
HDC hdc;

hdc = GetDC(hItem);
BeginPath(hdc);

// Create a green pen.
hpen = CreatePen(PS_SOLID, 2, RGB(100, 255, 50));
// Create a red brush.
hbrush = CreateSolidBrush(RGB(200, 80, 100));

// Select the new pen and brush, and then draw.
hpenOld = (HPEN)SelectObject(hdc, hpen);
hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
//*********************************************/

//change the OK-Button's caption
SetWindowText(hItem,"Clicked");

/*********************************************
EndPath(hdc);
// Do not forget to clean up.
SelectObject(hdc, hpenOld);
DeleteObject(hpen);
SelectObject(hdc, hbrushOld);
DeleteObject(hbrush);
//********************************************/
}
break;

case IDCANCEL:
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
break;

default:
return TRUE;
}
break;
}
return FALSE;
}
yokel 2003-02-27
  • 打赏
  • 举报
回复
全局HOOK?还得用dll!
高手出招呀!
nik_Amis 2003-02-27
  • 打赏
  • 举报
回复
@_@

holydiablo 2003-02-27
  • 打赏
  • 举报
回复
全局HOOK,实在是很烦人的事情

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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