Mam problem z blokowaniem klawisza windows. pq podpowiedział, żeby założyć hook na cały system. Rozwiązanie wydaje się logiczne. Żeby założyć hook na cały system trzeba bo umieścić w DLL. Procedura BlokujWin zakłada hook, OdblokujWin zdejmuje. Funkcja KeyboardProc ma za zadanie przjąć informacje wysyłane przez klawiaturę i wrazie naciśnięcia klawisza Windows (kod 91) nie przekazać dalej sygnału lub chociaż zmienić przesyłany klawisz. Procedury BlokujWin i OdblokujWin są wywoływane z innego pliku. Wszystko działa (można odczytać klawisze;sprawdzając czy zapisuje do pliku tekstowego) oprócz blokownia ;(
Moja prośba. Jeżeli ktoś wie gdzi tu jest błąd to niech pomoże.
var
hkprcSysMsg:TFNHookProc;
hinstDLL:HMODULE;
hhookSysMsg:HHOOK;
procedure BlokujWin;stdcall;
begin
hinstDLL:=0;
hkprcSysMsg:=nil;
hinstDLL:=LoadLibrary('test.dll');
if hinstDLL<>0 then begin
hkprcSysMsg:=GetProcAddress(hinstDLL,'KeyboardProc');
if Assigned(hkprcSysMsg) then
hhookSysMsg:=SetWindowsHookEx(WH_KEYBOARD,hkprcSysMsg,hinstDLL,0);
end;
end;
procedure OdblokujWin;stdcall;
begin
UnhookWindowsHookEx(hhookSysMsg);
if hinstDLL<>0 then FreeLibrary(hinstDLL);
hinstDLL:=0;
end;
function KeyboardProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
var
Plik:TextFile;
begin
AssignFile(Plik, 'c:\raport.txt');
Append(Plik);
if code<0 then begin
Result:=CallNextHookEx(hhookSysMsg,Code,wParam,lParam);
end else
if wparam=91{kod klawisza windows} then begin
Write(Plik, 'Windows ');
Result:=CallNextHookEx(hhookSysMsg,HC_ACTION,VK_Return,lParam); //gdzieś tu jest błąd
end else begin
Write(Plik, Chr(wparam));
Result:=CallNextHookEx(hhookSysMsg,Code,wParam,lParam);
end;
CloseFile(Plik);
end;
Exports
BlokujWin index 1 name 'BlokujWin',
OdblokujWin index 3 name 'OdblokujWin',
KeyboardProc index 2 name 'KeyboardProc';
begin
end.
Aaa biblioteka ma nazwę test.dll. Jak ktoś chce również plik wywołujący te procedury to mogę wszystko przesłać.
Za każdą wskazówkę z góry dziękuję.--Jest jeszcze jeden błąd ... :)