![]() |
Tasten ausgeben
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 |
Re: Tasten ausgeben
Hast wirklich schon mal versucht
![]() |
Re: Tasten ausgeben
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? |
Re: Tasten ausgeben
|
Re: Tasten ausgeben
hey wenn ich jetzt schreib :
Delphi-Quellcode:
dann schreibt er ein "c" statts ne "1".
PostMessage(wnd, WM_KEYDOWN, VK_NUMPAD1, 0);
Wa hab ich falsch gemacht? Mfg KleinAmann |
Re: Tasten ausgeben
Probiers mal mit den Prozeduren hier:
Delphi-Quellcode:
Mfg
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 |
Re: Tasten ausgeben
Zitat:
|
Re: Tasten ausgeben
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:
Hab mir den unteren Teil so vorgestellt :
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.
Delphi-Quellcode:
Das erste Sleep ist dafür dass man dummerweise auf den Button meines Programmes klicken muss und dann in das Fenser wo es dann
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; 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 |
Re: Tasten ausgeben
Zitat:
Mit PostMessage nicht. Probiere es so:
Delphi-Quellcode:
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; |
Re: Tasten ausgeben
hey danke für die Antworten,
Delphi-Quellcode:
leider funktioniert dass hier nur in Notepad und nicht bei der cabalmain.exe
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; 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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 by Thomas Breitkreuz