谁帮我写个小程序 就是键盘按V他就自动按Z
2个回答
展开全部
这个很简单,vc用键盘hook,要在所有程序通用就用全局钩子写个dll就可以了。。在hook的回调函数里拦截键盘的V按键,然后用KeyEvent函数产生一个Z按键消息就可以。
以前随便写的一部分,参考下,当然功能部分没帮你改,按照我的思路改就可以了
这个是一个将用户按下的任何一个键记录在一个文本文件里
//写dll文件:
#include "stdafx.h"
#include "keyhook.h"
#pragma data_seg("SharedVar")
//DLL输出的全局变量
extern "C" __declspec(dllexport) HHOOK ShellHook=NULL;
extern "C" __declspec(dllexport) HHOOK hHook=NULL;
extern "C" __declspec(dllexport) HHOOK debugHook=NULL;
#pragma data_seg()
// DLL 自用的全局变量
int sign;
bool start=1;
bool start1=1;
bool start2=1;
CFile file;
CString strFullName;
//DLL输出的勾子函数
extern "C" __declspec(dllexport)
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
/* unsigned char buffer;
if(start)
{
strFullName = AfxGetApp()->m_pszHelpFilePath;
int count=strFullName.GetLength()-strFullName.ReverseFind('\\');
strFullName=strFullName.Left(count);
strFullName+="keyfile.txt";
file.Open(strFullName,CFile::modeReadWrite|CFile::modeCreate);
//file.Close();
start=0;
}
if(lParam&0x80000000) //按一个键会产生两个事件:WM_KEYDOWN和WM_KEYUP,所以去掉一个
{//如果某键按下
buffer=MapVirtualKey(wParam,2);
//a=char(wParam);
file.SeekToEnd();
file.Write(&buffer,sizeof(buffer));
file.Write(" ",1);
sign++;
if(sign>=20)
{
sign=0;
file.Write("\r\n",2);
}
}
file.Close();
file.Open(strFullName,CFile::modeReadWrite);
*/
return CallNextHookEx(NULL, code, wParam,lParam);
}
以前随便写的一部分,参考下,当然功能部分没帮你改,按照我的思路改就可以了
这个是一个将用户按下的任何一个键记录在一个文本文件里
//写dll文件:
#include "stdafx.h"
#include "keyhook.h"
#pragma data_seg("SharedVar")
//DLL输出的全局变量
extern "C" __declspec(dllexport) HHOOK ShellHook=NULL;
extern "C" __declspec(dllexport) HHOOK hHook=NULL;
extern "C" __declspec(dllexport) HHOOK debugHook=NULL;
#pragma data_seg()
// DLL 自用的全局变量
int sign;
bool start=1;
bool start1=1;
bool start2=1;
CFile file;
CString strFullName;
//DLL输出的勾子函数
extern "C" __declspec(dllexport)
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
/* unsigned char buffer;
if(start)
{
strFullName = AfxGetApp()->m_pszHelpFilePath;
int count=strFullName.GetLength()-strFullName.ReverseFind('\\');
strFullName=strFullName.Left(count);
strFullName+="keyfile.txt";
file.Open(strFullName,CFile::modeReadWrite|CFile::modeCreate);
//file.Close();
start=0;
}
if(lParam&0x80000000) //按一个键会产生两个事件:WM_KEYDOWN和WM_KEYUP,所以去掉一个
{//如果某键按下
buffer=MapVirtualKey(wParam,2);
//a=char(wParam);
file.SeekToEnd();
file.Write(&buffer,sizeof(buffer));
file.Write(" ",1);
sign++;
if(sign>=20)
{
sign=0;
file.Write("\r\n",2);
}
}
file.Close();
file.Open(strFullName,CFile::modeReadWrite);
*/
return CallNextHookEx(NULL, code, wParam,lParam);
}
2012-01-21
展开全部
ewxn
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询