AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tasten ausgeben

Ein Thema von KleinAmann · begonnen am 29. Apr 2008 · letzter Beitrag vom 20. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#1

Tasten ausgeben

  Alt 29. Apr 2008, 20:20
Hallo,

Ich bin neu in dem Fourm und beschäftige mich seit einiger Zeit mit Delphi.

Nun hab ich das Problem dass ich eine Taste ausgeben will, also einen Tastendruck simulieren.

Ich hab schon gesucht aber leider nichts gefunden wäre nett wenn ihr mir ein paar Tips gibt oder ein Beispiel machen/geben könntet.

Arbeite mit Delphi7

Mfg KleinAmann
Dominik A.
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Tasten ausgeben

  Alt 29. Apr 2008, 20:22
Hast wirklich schon mal versucht Hier im Forum suchenTastendruck simulieren in der Suchfunktion einzugeben? Und da kommt nichts raus?
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#3

Re: Tasten ausgeben

  Alt 29. Apr 2008, 20:35
hey,

ich hab bis jetzt immer nach virtuelle tastatur oder virtuellen tastendruck gesucht.
Wollte grad meinen Code den ich jetzt gerade noch geschrieben habe Posten hab da noch Fragen.

Naja sorry

PostMessage(wnd, WM_KEYDOWN, VK_SPACE, 0);

dieser Code virtualisiert ja eine Leertaste wenn ich aber VK_1 angebe also die Taste "1"
dann bringt er ein fehler was muss ich tun?
Dominik A.
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Tasten ausgeben

  Alt 29. Apr 2008, 20:49
Hier wurde die komplette Liste der virtuellen KeyCodes gepostet.

Mfg
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#5

Re: Tasten ausgeben

  Alt 30. Apr 2008, 16:21
hey wenn ich jetzt schreib :

PostMessage(wnd, WM_KEYDOWN, VK_NUMPAD1, 0); dann schreibt er ein "c" statts ne "1".

Wa hab ich falsch gemacht?

Mfg KleinAmann
Dominik A.
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Tasten ausgeben

  Alt 30. Apr 2008, 16:34
Probiers mal mit den Prozeduren hier:
Delphi-Quellcode:
procedure PressKey(Key: Word);overload;
begin
  keybd_event(Key, 0, 0, 0);
  keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
end;

procedure PressKey(Key: Char);overload;
begin
  PressKey(vkKeyScan(Key));
end;

//Aufruf:

  PressKey(vk_SPACE);//Entweder mit virtuellem KeyCode
  PressKey('h'); //Oder mit Char
Mfg
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: Tasten ausgeben

  Alt 30. Apr 2008, 18:02
Zitat von Fussball-Robby:
Hier wurde die komplette Liste der virtuellen KeyCodes gepostet.
Die stehen übrigens auch in der Delphi-Hilfe.
  Mit Zitat antworten Zitat
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#8

Re: Tasten ausgeben

  Alt 2. Mai 2008, 03:32
hey,

Danke für die Funktion und in der Delphi Help steht nur Key_1 statt VK_NUMPAD1.

Ich hab folgendes Problem und zwar wen ich den befehl
PressKey(vk_NUMPAD1);
ausführen lasse dann erscheint im Editor nichts, wenn ich aber

PressKey(vk_NUMPAD1);
PressKey(vk_SPACE);
PressKey(vk_NUMPAD1);
PressKey(vk_SPACE);
PressKey(vk_NUMPAD1);
PressKey(vk_SPACE);

ausführen lasse dann ist eine Seite voller Einser (1), ich versteh das iwi nicht.
Sieht dann so aus -.-
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
nur die ganze Seite voll.
Ich hab hier den kompletten Code ist nur der Entwurf für ein Programm für mein Kumpel.
Delphi-Quellcode:
unit panel_start;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Calendar, Menus, ComCtrls, ExtCtrls, StdCtrls, FileCtrl,
  Outline, DirOutln, OleCtrls, SHDocVw, OleServer, WordXP;

type
  TPanel = class(TForm)
    menu: TMainMenu;
    menucontroll: TMenuItem;
    Beenden2: TMenuItem;
    Minimieren1: TMenuItem;
    Kalender: TMonthCalendar;
    Button1: TButton;
    procedure Beenden2Click(Sender: TObject);
    procedure Minimieren1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Panel: TPanel;

implementation

{$R *.dfm}

procedure PressKey(Key: Word);overload;
begin
  keybd_event(Key, 0, 0, 0);
  keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
end;

procedure PressKey(Key: Char);overload;
begin
  PressKey(vkKeyScan(Key));
end;

procedure TPanel.Beenden2Click(Sender: TObject);
begin
Panel.Close;
end;

procedure TPanel.Minimieren1Click(Sender: TObject);
begin
Panel.WindowState := wsMinimized;
end;

procedure TPanel.Button1Click(Sender: TObject);
var
  wnd: HWND;
begin
  wnd := FindWindow('notepad', nil);
  begin
    wnd := FindWindowEx(wnd, 0, 'Edit', nil);

    PressKey(vk_NUMPAD1);
    PressKey(vk_SPACE);
    PressKey(vk_NUMPAD1);
    PressKey(vk_SPACE);
    PressKey(vk_NUMPAD1);
    PressKey(vk_SPACE);


  end;
end;

end.
Hab mir den unteren Teil so vorgestellt :
Delphi-Quellcode:
procedure TPanel.Button1Click(Sender: TObject);
var
  wnd: HWND;
begin
  wnd := FindWindow('notepad', nil);
  begin
    wnd := FindWindowEx(wnd, 0, 'notepad', nil);

    Sleep(5000);
    PressKey(vk_NUMPAD4);
    Sleep(5000);
    PressKey(vk_NUMPAD1);
    Sleep(5000);
    PressKey(vk_NUMPAD2);
    Sleep(5000);
    PressKey(vk_NUMPAD3);
    Sleep(5000);

  end;
end;
Das erste Sleep ist dafür dass man dummerweise auf den Button meines Programmes klicken muss und dann in das Fenser wo es dann
senden soll. Dann funktionierst. Da wollte ich Fragen ob es dort keine direkte engabe gibt dachte dass müsste mit FindWindow funktionieren.

MFG D©MI
Dominik A.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#9

Re: Tasten ausgeben

  Alt 2. Mai 2008, 03:59
Zitat von KleinAmann:
hey wenn ich jetzt schreib :

PostMessage(wnd, WM_KEYDOWN, VK_NUMPAD1, 0); dann schreibt er ein "c" statts ne "1".

Wa hab ich falsch gemacht?

Mfg KleinAmann
Wenn du die Tasten mit keybd_event sendest, muss Notepad den Focus haben.
Mit PostMessage nicht.

Probiere es so:
PostKey(wnd, VK_NUMPAD1);
Delphi-Quellcode:
procedure PostKey(hWindow: HWND; key: Word);
begin
  if IsWindow(hWindow) then begin
    PostMessage(hWindow, WM_KEYDOWN, key,
      MakeLong(0, MapVirtualKey(key, 0)));
    PostMessage(hWindow, WM_KEYUP, key,
      MakeLong(0, MapVirtualKey(key, 0) or $C000));
  end;
end;
Thomas
  Mit Zitat antworten Zitat
KleinAmann

Registriert seit: 29. Apr 2008
Ort: Bad Waldsee
32 Beiträge
 
#10

Re: Tasten ausgeben

  Alt 7. Mai 2008, 13:10
hey danke für die Antworten,

Delphi-Quellcode:
procedure TPanel.Button1Click(Sender: TObject);
var
  i : Integer;
  wnd: HWND;
begin
  wnd := FindWindow('cabalmain', nil);
  if wnd <> 0 then
  begin
        wnd := FindWindowEx(wnd, 0, 'cabalmain', nil);
        i := 1;
        while i < 10 do
            begin
              if i = 1 then begin Sleep(4000); PressKey(vk_NUMPAD4); Edit2.Text := 'Taste 4 aktiviert'; i:= i+1; Sleep(1900); end;
              begin
                if i > 1 then
                begin
                  i:= i+1;
                  Edit2.Text := 'Taste 1 aktiviert';
                  PressKey(vk_NUMPAD1);
                  Sleep(1400);
                  Edit2.Text := 'Taste 2 aktiviert';
                  PressKey(vk_NUMPAD2);
                  Sleep(1400);
                  end else Edit2.Text := 'faild';
        end;
    end;
  end;
end;
leider funktioniert dass hier nur in Notepad und nicht bei der cabalmain.exe

was ist zu tun?

Naja sorry das ich Frag hatt kaum Internet letzter Zeit viel stress und meine Kumpels wollen endlich dass Programm also sry.

Mfg D○MI
Dominik A.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:38 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