2011-07-30 3 views
0

Я пытаюсь сделать программу-манипулятор Global Keyboard на Visual C++, которая пишет нажатия клавиш в файле «log.txt». Я новичок в программировании Windows, и я прошел через библиотеку msdn, чтобы получить понимание крючков .... Я думаю, что я понял концепцию теоретически, но когда я реализую код, он не работает. Компилятор не обнаруживает ошибок как в файле DLL, так и в EXE-файле .... Кроме того, файл «Log.txt» никогда не будет создан ... Вот код файлыГлобальная клавиатура Крюк не работает

Первого Dll файл:

#include<windows.h> 
    #include<stdio.h> 

HHOOK g_hhk; 

__declspec(dllexport) LRESULT CALLBACK KeyProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
     if(nCode>=0) 
     { 
      char ch; 
     FILE *fp; 
     fp=fopen("log.txt","a"); 
     if((wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f) &&(wParam<=0x100)) 
     { 
     if(wParam==VK_RETURN) 
     ch='\n'; 
     fwrite(&ch,1,1,fp); 
    } 
    else 
    { 
     BYTE ks[256]; 
     GetKeyboardState(ks); 

     WORD w; 

     UINT scan; 

     scan=0; 

     ToAscii(wParam,scan,ks,&w,0); 

     ch =char(w); 

     fwrite(&ch,1,1,fp); // copy character to log file 
    } 
    fclose(fp); 
    } 
     return CallNextHookEx(g_hhk, nCode, wParam, lParam); 
     } 

Now the EXE file: 

    #include<windows.h> 

HOOKPROC hkprckb; 
static HINSTANCE hinstDLL; 
static HHOOK hhookkb; 

int WINAPI WinMain(HINSTANCE hInstance1,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) 
{ 
    hinstDLL=LoadLibrary(TEXT("C:\\Documents and Settings\\Attar Singh\\My Documents\\Visual Studio 2008\\Projects\\key\\Debug\\key.dll")); 
    hkprckb=(HOOKPROC)GetProcAddress(hinstDLL,"KeyProc"); 
    hhookkb=SetWindowsHookEx( 
        WH_KEYBOARD_LL, 
        hkprckb, 
        hinstDLL, 
        0); 


    MessageBox(NULL,NULL,NULL,MB_OK); 
    return 1; 
} 

Эта программа дает мне п ghtmares ... Любой вид помощи будет весьма признателен ... Спасибо заранее ...

+0

Этот вопрос может быть полезным для Вас: http://stackoverflow.com/questions/454477/global-hook-setwindowshookex/454503 # 454503 – Ferruccio

ответ

1

WPARAM должен иметь одно из следующих значений: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN или WM_SYSKEYUP.

Чтобы получить виртуальный код клавиши нажатой клавиши вы должны использовать: ((KBDLLHOOKSTRUCT*)lParam)->vkCode

Смежные вопросы