#include <windows.h>LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
if(lParam>>31 == 1)
{
switch(wParam)
{
case VK_ESCAPE:
return 1;
break;
}
}
}LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ;
MSG msg ;
WNDCLASS 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 ; if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, // window class name
TEXT ("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_CREATE:
SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, ::AfxGetApp()->m_nThreadID);
return 0 ; case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
今天CSDN不认回车,你自己整理一下吧;
{
if(lParam>>31 == 1)
{
switch(wParam)
{
case VK_ESCAPE:
return 1;
break;
}
}
}LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ;
MSG msg ;
WNDCLASS 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 ; if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, // window class name
TEXT ("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_CREATE:
SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, ::AfxGetApp()->m_nThreadID);
return 0 ; case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
今天CSDN不认回车,你自己整理一下吧;
\temp\test.cpp(57) : error C2065: 'AfxGetApp' : undeclared identifier
\temp\test.cpp(57) : error C2227: left of '->m_nThreadID' must point to class/struct/union
Error executing cl.exe.
然后我用afxwin.h替换掉windows.h,可以编译了,但运行出错!
{
if (code == HC_ACTION)
{
if (lParam>>31 == 1)
{
switch(wParam)
{
case VK_ESCAPE:
return 1;
break;
}
}
}
return CallNextHookEx ((HHOOK)g_hHoolOld, nCode, wParam, lParam);
}
在 WndProc 中替换WM_CREATE: 为
case WM_CREATE:
g_hHookOld = (HOOKPROC)SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, GetCurrentThreadID ());
return 0 ;
c:\temp\test.cpp(20) : error C2065: 'nCode' : undeclared identifier
c:\temp\test.cpp(71) : error C2065: 'GetCurrentThreadID' : undeclared identifier
Error executing cl.exe.temp.exe - 3 error(s), 0 warning(s)还是有问题~~~~~~~~~:(
c:\temp\test.cpp(20) : error C2065: 'nCode' : undeclared identifier
c:\temp\test.cpp(71) : error C2065: 'GetCurrentThreadID' : undeclared identifier
Error executing cl.exe.g_hHoolOld 改为 g_hHookOld
nCode 改为 code
GetCurrentThreadID 改为 GetCurrentThreadId肯定不会再有问题了,而却可以运行
行了。不过键盘输入被存到哪个变量里去了呢?
怎么取得键盘输入呢?比如把输入的字符显示到窗口上或存进一个文本文件。
行了。不过键盘输入被存到哪个变量里去了呢?
怎么取得键盘输入呢?比如把输入的字符显示到窗口上或存进一个文本文件。
UnhookWindowsHookEx (g_hHookOld);
g_hHookOld = NULL;
break;
我需要的是截取整个系统的键盘输入,并显示出来(在窗口或存入文本都可以),用SDK写的,分不是问题,另给100。
主要是想学习SDK+HOOK函数的用法。非常感谢。
2. 编写两个export 函数:InstallHook 和 UninstallHook
3. void _stdcall InstallHook ()
{
g_hHookOld = (HOOKPROC)SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInst, 0);
}
这里hInst是这个dll的hInstance.4. 创建一个Exe, 装入前面创建的dll.
5. 保持4中的EXE运行,就可以截获所有的键盘输入(我有空的话会写一个简单的例子,你感兴趣的话可以发给你)
、ALT+TAB和window快捷键?