keyboard vkcode 程序得到按鍵的 虛擬鍵碼,打印出來是數字,我要打印成對應的字符串怎么辦比如要打印出A 而不是 65VK_F1 這樣的 謝謝 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); } if (vKey >=96 && vKey<=105) // 小键盘0-9 if (bNumLock) fprintf(stream,"%c",vKey-96+48); if (vKey>=186 && vKey<=222) // 其他键 { switch (vKey) { case 186:if (!bShift) ch=';'; else ch=':';break; case 187:if (!bShift) ch='='; else ch='+';break; case 188:if (!bShift) ch=','; else ch='<' ;break; case 189:if (!bShift) ch='-'; else ch='_';break; case 190:if (!bShift) ch='.'; else ch=' >';break; case 191:if (!bShift) ch='/'; else ch='?';break; case 192:if (!bShift) ch='`'; else ch='~';break; case 219:if (!bShift) ch='['; else ch='{';break; case 220:if (!bShift) ch='\\'; else ch='|';break; case 221:if (!bShift) ch=']'; else ch='}';break; case 222:if (!bShift) ch='\''; else ch='\"';break; default:ch='n';break; } if (ch!='n') fprintf(stream,"%c",ch); } 只能这样吗??没有别的方法,那我不是要把所有msdn里面定义的都case 进去啊 以下来自《Programming Windows》的keyboard的KEYLOOK.C源码:/*------------------------------------------------------- KEYLOOK.C -- Displays Keyboard and Character Messages (c) Charles Petzold, 1996 -------------------------------------------------------*/#include <windows.h>#include <stdio.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;RECT rect ;int cxChar, cyChar ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "KeyLook" ; HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ; wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; 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 = NULL ; wndclass.lpszClassName = szAppName ; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; RegisterClassEx (&wndclass) ; hwnd = CreateWindow (szAppName, "Keyboard Message Looker", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; }void ShowKey (HWND hwnd, int iType, char *szMessage, WPARAM wParam, LPARAM lParam) { static char *szFormat[2] = { "%-14s %3d %c %6u %4d %3s %3s %4s %4s", "%-14s %3d %c %6u %4d %3s %3s %4s %4s" } ; char szBuffer[80] ; HDC hdc ; ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ; hdc = GetDC (hwnd) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; TextOut (hdc, cxChar, rect.bottom - cyChar, szBuffer, wsprintf (szBuffer, szFormat [iType], szMessage, wParam, (BYTE) (iType ? wParam : ' '), LOWORD (lParam), HIWORD (lParam) & 0xFF, (PSTR) (0x01000000 & lParam ? "Yes" : "No"), (PSTR) (0x20000000 & lParam ? "Yes" : "No"), (PSTR) (0x40000000 & lParam ? "Down" : "Up"), (PSTR) (0x80000000 & lParam ? "Up" : "Down"))) ; ReleaseDC (hwnd, hdc) ; ValidateRect (hwnd, NULL) ; }LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static char szTop[] = "Message Key Char Repeat Scan Ext ALT Prev Tran"; static char szUnd[] = "_______ ___ ____ ______ ____ ___ ___ ____ ____"; HDC hdc ; PAINTSTRUCT ps ; TEXTMETRIC tm ; switch (iMsg) { case WM_CREATE : hdc = GetDC (hwnd) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; GetTextMetrics (hdc, &tm) ; cxChar = tm.tmAveCharWidth ; cyChar = tm.tmHeight ; ReleaseDC (hwnd, hdc) ; rect.top = 3 * cyChar / 2 ; return 0 ; case WM_SIZE : rect.right = LOWORD (lParam) ; rect.bottom = HIWORD (lParam) ; UpdateWindow (hwnd) ; return 0 ; case WM_PAINT : InvalidateRect (hwnd, NULL, TRUE) ; hdc = BeginPaint (hwnd, &ps) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; SetBkMode (hdc, TRANSPARENT) ; TextOut (hdc, cxChar, cyChar / 2, szTop, (sizeof szTop) - 1) ; TextOut (hdc, cxChar, cyChar / 2, szUnd, (sizeof szUnd) - 1) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_KEYDOWN : ShowKey (hwnd, 0, "WM_KEYDOWN", wParam, lParam) ; return 0 ; case WM_KEYUP : ShowKey (hwnd, 0, "WM_KEYUP", wParam, lParam) ; return 0 ; case WM_CHAR : ShowKey (hwnd, 1, "WM_CHAR", wParam, lParam) ; return 0 ; case WM_DEADCHAR : ShowKey (hwnd, 1, "WM_DEADCHAR", wParam, lParam) ; return 0 ; case WM_SYSKEYDOWN : ShowKey (hwnd, 0, "WM_SYSKEYDOWN", wParam, lParam) ; break ; // ie, call DefWindowProc case WM_SYSKEYUP : ShowKey (hwnd, 0, "WM_SYSKEYUP", wParam, lParam) ; break ; // ie, call DefWindowProc case WM_SYSCHAR : ShowKey (hwnd, 1, "WM_SYSCHAR", wParam, lParam) ; break ; // ie, call DefWindowProc case WM_SYSDEADCHAR : ShowKey (hwnd, 1, "WM_SYSDEADCHAR", wParam, lParam) ; break ; // ie, call DefWindowProc case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; } 创建 ATL 工程的时候,多了一个 同名字但是带有PS后缀的工程,那是干什么用的? 求:谁有多个图像同时显示的例子了 模板类该怎么写?看书觉得懂了,写起来没底。。 VC调用VB编写的Dll中的函数遇到的问题, 请高手帮忙, EXCEL的API,用完后怎么把进程关掉?? 如何建立控件对象和数组的关联 udp通信中如何使用无地址参数的send #看守看看为什么写不成地址 关于.ppt文件的问题 相信这个问题对大家都不难,来者有分,永不落空,呵呵 如何强制关闭360,瑞星等杀软? 为什么在vista下点击我程序的listctrl的项目会发出声间,叮叮声?
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);
}
if (vKey >=96 && vKey<=105) // 小键盘0-9
if (bNumLock) fprintf(stream,"%c",vKey-96+48);
if (vKey>=186 && vKey<=222) // 其他键
{
switch (vKey)
{
case 186:if (!bShift) ch=';'; else ch=':';break;
case 187:if (!bShift) ch='='; else ch='+';break;
case 188:if (!bShift) ch=','; else ch='<' ;break;
case 189:if (!bShift) ch='-'; else ch='_';break;
case 190:if (!bShift) ch='.'; else ch=' >';break;
case 191:if (!bShift) ch='/'; else ch='?';break;
case 192:if (!bShift) ch='`'; else ch='~';break;
case 219:if (!bShift) ch='['; else ch='{';break;
case 220:if (!bShift) ch='\\'; else ch='|';break;
case 221:if (!bShift) ch=']'; else ch='}';break;
case 222:if (!bShift) ch='\''; else ch='\"';break;
default:ch='n';break;
}
if (ch!='n') fprintf(stream,"%c",ch);
}
只能这样吗??没有别的方法,那我不是要把所有msdn里面定义的都case 进去啊
KEYLOOK.C -- Displays Keyboard and Character Messages
(c) Charles Petzold, 1996
-------------------------------------------------------*/#include <windows.h>
#include <stdio.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;RECT rect ;
int cxChar, cyChar ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "KeyLook" ;
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass ; wndclass.cbSize = sizeof (wndclass) ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
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 = NULL ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; RegisterClassEx (&wndclass) ; hwnd = CreateWindow (szAppName, "Keyboard Message Looker",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}void ShowKey (HWND hwnd, int iType, char *szMessage,
WPARAM wParam, LPARAM lParam)
{
static char *szFormat[2] = { "%-14s %3d %c %6u %4d %3s %3s %4s %4s",
"%-14s %3d %c %6u %4d %3s %3s %4s %4s" } ;
char szBuffer[80] ;
HDC hdc ; ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ;
hdc = GetDC (hwnd) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; TextOut (hdc, cxChar, rect.bottom - cyChar, szBuffer,
wsprintf (szBuffer, szFormat [iType],
szMessage, wParam,
(BYTE) (iType ? wParam : ' '),
LOWORD (lParam),
HIWORD (lParam) & 0xFF,
(PSTR) (0x01000000 & lParam ? "Yes" : "No"),
(PSTR) (0x20000000 & lParam ? "Yes" : "No"),
(PSTR) (0x40000000 & lParam ? "Down" : "Up"),
(PSTR) (0x80000000 & lParam ? "Up" : "Down"))) ; ReleaseDC (hwnd, hdc) ;
ValidateRect (hwnd, NULL) ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static char szTop[] =
"Message Key Char Repeat Scan Ext ALT Prev Tran";
static char szUnd[] =
"_______ ___ ____ ______ ____ ___ ___ ____ ____";
HDC hdc ;
PAINTSTRUCT ps ;
TEXTMETRIC tm ; switch (iMsg)
{
case WM_CREATE :
hdc = GetDC (hwnd) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight ; ReleaseDC (hwnd, hdc) ; rect.top = 3 * cyChar / 2 ;
return 0 ; case WM_SIZE :
rect.right = LOWORD (lParam) ;
rect.bottom = HIWORD (lParam) ;
UpdateWindow (hwnd) ;
return 0 ; case WM_PAINT :
InvalidateRect (hwnd, NULL, TRUE) ;
hdc = BeginPaint (hwnd, &ps) ; SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ; SetBkMode (hdc, TRANSPARENT) ;
TextOut (hdc, cxChar, cyChar / 2, szTop, (sizeof szTop) - 1) ;
TextOut (hdc, cxChar, cyChar / 2, szUnd, (sizeof szUnd) - 1) ;
EndPaint (hwnd, &ps) ;
return 0 ; case WM_KEYDOWN :
ShowKey (hwnd, 0, "WM_KEYDOWN", wParam, lParam) ;
return 0 ; case WM_KEYUP :
ShowKey (hwnd, 0, "WM_KEYUP", wParam, lParam) ;
return 0 ; case WM_CHAR :
ShowKey (hwnd, 1, "WM_CHAR", wParam, lParam) ;
return 0 ; case WM_DEADCHAR :
ShowKey (hwnd, 1, "WM_DEADCHAR", wParam, lParam) ;
return 0 ; case WM_SYSKEYDOWN :
ShowKey (hwnd, 0, "WM_SYSKEYDOWN", wParam, lParam) ;
break ; // ie, call DefWindowProc case WM_SYSKEYUP :
ShowKey (hwnd, 0, "WM_SYSKEYUP", wParam, lParam) ;
break ; // ie, call DefWindowProc case WM_SYSCHAR :
ShowKey (hwnd, 1, "WM_SYSCHAR", wParam, lParam) ;
break ; // ie, call DefWindowProc case WM_SYSDEADCHAR :
ShowKey (hwnd, 1, "WM_SYSDEADCHAR", wParam, lParam) ;
break ; // ie, call DefWindowProc case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}