AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi PC-Aktionen an mehrere PCs im Netzwerk senden
Thema durchsuchen
Ansicht
Themen-Optionen

PC-Aktionen an mehrere PCs im Netzwerk senden

Ein Thema von 1ceman · begonnen am 22. Okt 2007 · letzter Beitrag vom 26. Okt 2007
Antwort Antwort
Seite 2 von 4     12 34      
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#11

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 11:28
Ne passiert nix, also wird immer nur das eingegeben, was ich auch tippe...
Roman
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 11:41
mir fehlt auch irgendwie nen "installhook"
  Mit Zitat antworten Zitat
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#13

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 12:08
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;
Roman
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 12:11
klar kannst das so machen... aaaaber:


Zitat von 1ceman:
Delphi-Quellcode:
         SpE_Port.Enabled := False;
         @InstallHook := GetProcAddress(lib, 'InstallHook');
         InstallHook( self.handle );
       end
weil wenn du die funktion ned aufrufst passiert auch nix
  Mit Zitat antworten Zitat
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#15

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 12:17
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:
Project P_Netz_Server raised exception class EAccessViolation with message 'Access violation at address 00000000. Read of address 00000000'. Process stopped. Use Step or Run to continue.
Ka was da falsch läuft...
Roman
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#16

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 12:21
Zitat von Relicted:
... oder statisch angeben...

procedure InstallHook(); external 'KeyboardHook.dll';
Versuch die Funktion mal so einzubinden wie relicted es schon gesagt hat.

Dann merkst Du wenigstens gleich schon beim Start, wenn er die DLL nicht findet / die Funktion nicht laden kann.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#17

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 12:38
hmm wenn ich das oben einbinde kommt immer das:
Zitat:
[Error] U_Netz_Server.pas(72): Field definition not allowed after methods or properties
Also meine datei keyboardhook.dpr ist aber so richtig??oder hab ich da schon was falsch gemacht(also ich hab sie aus irgendeinem tutorial genommen und halt das mit dem sendmessage geändert)
Zu dem Sendmessage hab ich auch ne frage: und zwar habe ich
sendmessage(HookHandle, WM_KeyLogMessage, wParam, lParam); genommen, ich hab das aber auch so gefunden:
sendmessage(HWND_BROADCAST, WM_KeyLogMessage, wParam, lParam); jetzt würde ich gerne mal wissen was denn genau der unterschied ist zwischen HookHandle und HWND_BROADCAST.
Wenn ich das richtig verstanden habe, wird mit HWND_BROADCAST die message an alle top-level-fenster gesendet.
Was aber macht/bewirkt HookHandle??
Roman
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 12:42
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...
  Mit Zitat antworten Zitat
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#19

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 13:02
also habs sie kompiliert, das funktioniert auch.
wenn ich jetzt aus den Button Listen klicke kommt diese information:
Zitat:
Project C:\...\P_Netz_Server.exe faulted with message: 'Access violation at 0x009c5cc1: write of address 0x1a340042'. Process Stopped. Use Step or Run to continue.
hab die dll nochmal was geändert und das projekt auch, hier sind nochmal die aktuellen versionen:
Projekt:
Delphi-Quellcode:
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.
so und jetzt die dll:
Delphi-Quellcode:
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.
//Edit: Viele Dank für eure Hilfe.
Roman
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#20

Re: PC-Aktionen an mehrere PCs im Netzwerk senden

  Alt 23. Okt 2007, 13:12
Delphi-Quellcode:
  TInstallHook = function(Hwnd: THandle): Boolean; stdcall;
  TUninstallHook = function: Boolean; stdcall;
  procedure InstallHook(); external 'keyboardHook.dll';
so klappt das natürlich nicht...

  function InstallHook(Hwnd:THandle):boolean; stdcall; external 'keyboardHook.dll'; try this...

die parameter und rückgabewerte müssen natürlich übereinstimmen... das war nur als beispiel gemeint mit der procedure und nicht als lösung
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz