![]() |
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
Ne passiert nix, also wird immer nur das eingegeben, was ich auch tippe...
|
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
mir fehlt auch irgendwie nen "installhook" :D
|
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
Kann ich das so machen mit dem install hook, oder muss das in die getmessage procedure??
Delphi-Quellcode:
procedure TF_Netz_Server.B_ListenClick(Sender: TObject);
begin If B_Listen.Caption = 'Listen' Then begin ServerSocket.Port := SpE_Port.Value; ServerSocket.Open; Connections := 0; Timer.Enabled := True; B_Listen.Caption := 'Schließen'; SpE_Port.Enabled := False; @InstallHook := GetProcAddress(lib, 'InstallHook'); end Else begin ServerSocket.Close; B_Listen.Caption := 'Listen'; Timer.Enabled := False; LB_Clients.Clear; LB_Clients.Items.Add('Clients'); SpE_Port.Enabled := True; @UninstallHook := GetProcAddress(lib, 'UninstallHook') end; end; |
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
klar kannst das so machen... aaaaber:
Zitat:
|
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
Hmmm, da haste recht, hatte das oben irgendwie falsch verstanden was du meintest.
Das Problem ist nur, wenn ich InstallHook( self.handle ); da hin mache, kommt immer die Fehlermeldung(hatte ich oben schonmal gepostet): Zitat:
|
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
Zitat:
Dann merkst Du wenigstens gleich schon beim Start, wenn er die DLL nicht findet / die Funktion nicht laden kann. |
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
hmm wenn ich das oben einbinde kommt immer das:
Zitat:
Zu dem Sendmessage hab ich auch ne frage: und zwar habe ich
Delphi-Quellcode:
genommen, ich hab das aber auch so gefunden:
sendmessage(HookHandle, WM_KeyLogMessage, wParam, lParam);
Delphi-Quellcode:
jetzt würde ich gerne mal wissen was denn genau der unterschied ist zwischen HookHandle und HWND_BROADCAST.
sendmessage(HWND_BROADCAST, WM_KeyLogMessage, wParam, lParam);
Wenn ich das richtig verstanden habe, wird mit HWND_BROADCAST die message an alle top-level-fenster gesendet. Was aber macht/bewirkt HookHandle?? |
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
hmmm hast du deine hoook.dll mal kompiliert? weil sonst kann der die dll auch nicht finden...
[Error] U_Netz_Server.pas(72): Field definition not allowed after methods or properties ->> mach die definition mal dahin wo du auch dein TINstallHook etc hinsteckst... HookHandle ist glaube ich das handle von der hauptform... HWND_Broadcast schickt an alle fenster die meldung... |
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
also habs sie kompiliert, das funktioniert auch.
wenn ich jetzt aus den Button Listen klicke kommt diese information: Zitat:
Projekt:
Delphi-Quellcode:
so und jetzt die dll:
unit U_Netz_Server;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ScktComp, ExtCtrls, U_ASCII, Menus, Buttons, Winsock; const WM_KeyLogMessage = WM_USER + 23; type TF_Netz_Server = class(TForm) ServerSocket: TServerSocket; SpE_Port: TSpinEdit; L_Port: TLabel; M_History: TMemo; E_Senden: TEdit; B_Senden: TButton; LB_Clients: TListBox; Timer: TTimer; B_Listen: TButton; RB_Key: TRadioButton; RB_Direkt: TRadioButton; RB_Kombi: TRadioButton; RB_Nichts: TRadioButton; Pop_ASCII: TPopupMenu; PopItem_ASCII: TMenuItem; BitB_Win_E: TBitBtn; B_Doppelpunkt: TButton; BitB_Win: TBitBtn; B_Slash: TButton; B_Backslash: TButton; B_Tab: TButton; B_Alt_F4: TButton; B_Shift_Tab: TButton; B_Alt_Tab: TButton; L_IP: TLabel; E_IP: TEdit; B_Strg_X: TButton; B_Strg_C: TButton; B_Strg_V: TButton; procedure TimerTimer(Sender: TObject); procedure B_ListenClick(Sender: TObject); procedure B_SendenClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure RB_KeyClick(Sender: TObject); procedure RB_KeyKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure B_ListenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure B_SendenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure E_SendenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure PopItem_ASCIIClick(Sender: TObject); procedure BitB_Win_EClick(Sender: TObject); procedure BitB_WinClick(Sender: TObject); procedure B_Alt_F4Click(Sender: TObject); procedure B_DoppelpunktClick(Sender: TObject); procedure B_SlashClick(Sender: TObject); procedure B_BackslashClick(Sender: TObject); procedure B_TabClick(Sender: TObject); procedure B_Shift_TabClick(Sender: TObject); procedure B_Alt_TabClick(Sender: TObject); function GetLocalIPs: String; procedure FormCreate(Sender: TObject); procedure B_Strg_XClick(Sender: TObject); procedure B_Strg_CClick(Sender: TObject); procedure B_Strg_VClick(Sender: TObject); procedure FormDestroy(Sender: TObject); protected procedure GotKeyMessage( var msg : TMessage ); message WM_KeyLogMessage; private { Private declarations } Connections: Integer; Keys_loggen: Boolean; public { Public declarations } end; TInstallHook = function(Hwnd: THandle): Boolean; stdcall; TUninstallHook = function: Boolean; stdcall; procedure InstallHook(); external 'keyboardHook.dll'; var F_Netz_Server: TF_Netz_Server; UninstallHook: TUninstallHook; lib: Cardinal; implementation {$R *.dfm} procedure TF_Netz_Server.GotKeyMessage( var msg : TMessage ); begin M_History.Lines.Add(inttostr(msg.WParam)); M_History.Lines.Add(inttostr(msg.lParam)); end; procedure TF_Netz_Server.B_ListenClick(Sender: TObject); begin If B_Listen.Caption = 'Listen' Then begin ServerSocket.Port := SpE_Port.Value; ServerSocket.Open; Connections := 0; Timer.Enabled := True; B_Listen.Caption := 'Schließen'; SpE_Port.Enabled := False; InstallHook; end Else begin ServerSocket.Close; B_Listen.Caption := 'Listen'; Timer.Enabled := False; LB_Clients.Clear; LB_Clients.Items.Add('Clients'); SpE_Port.Enabled := True; @UninstallHook := GetProcAddress(lib, 'UninstallHook') end; end; procedure TF_Netz_Server.FormClose(Sender: TObject; var Action: TCloseAction); begin ServerSocket.Close; end; procedure TF_Netz_Server.FormCreate(Sender: TObject); begin E_IP.Text := GetLocalIPs; lib := LoadLibrary('keyboardhook.dll'); if lib <> INVALID_HANDLE_VALUE then begin //InstallHook; //UnInstallHook; end; // else ERROR end; procedure TF_Netz_Server.FormDestroy(Sender: TObject); begin freelibrary(lib); end; end.
Delphi-Quellcode:
//Edit: Viele Dank für eure Hilfe.
library KeyboardHook;
uses Windows, Messages; var HookHandle: Cardinal = 0; WindowHandle: Cardinal = 0; WM_KeyLogMessage: Cardinal = WM_USER + 23; function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin //es ist ebenfalls moeglich die Bearbeitung an eine Bedingung zu knuepfen //it's possible to call CallNextHookEx conditional only. Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); case nCode < 0 of TRUE: exit; //wenn code kleiner 0 wird nix gemacht //if code smaller 0 nothing has to be done FALSE: begin sendmessage(HookHandle, WM_KeyLogMessage, wParam, lParam); //Hier kann jetzt alles bearbeitet werden //Here one can work with the parameters end; end; end; function InstallHook(Hwnd: Cardinal): Boolean; stdcall; begin Result := False; if HookHandle = 0 then begin //Erstmal Hook installieren //First install the hook HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0); //Uebergebenes Fensterhandle sichern //Save the given window handle WindowHandle := Hwnd; Result := TRUE; end; end; function UninstallHook: Boolean; stdcall; begin //Hook aus der Hookchain entfernen //Uninstall hook from hook chain Result := UnhookWindowsHookEx(HookHandle); HookHandle := 0; end; exports //Installations- und Deinstallationsroutine exportieren //Export the installation and deinstallation routine InstallHook, UninstallHook; end. |
Re: PC-Aktionen an mehrere PCs im Netzwerk senden
Delphi-Quellcode:
so klappt das natürlich nicht...
TInstallHook = function(Hwnd: THandle): Boolean; stdcall;
TUninstallHook = function: Boolean; stdcall; procedure InstallHook(); external 'keyboardHook.dll';
Delphi-Quellcode:
try this...
function InstallHook(Hwnd:THandle):boolean; stdcall; external 'keyboardHook.dll';
die parameter und rückgabewerte müssen natürlich übereinstimmen... das war nur als beispiel gemeint mit der procedure und nicht als lösung :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz