mirror of
https://github.com/moparisthebest/Simba
synced 2024-12-22 23:38:50 -05:00
Added KeyUp/KeyDown/KeyPress and SendText. Should work on Windows as well on Linux.
git-svn-id: http://www.villavu.com/repositories/merlijn/mufasa@211 3f818213-9676-44b0-a9b4-5e4c4e03d09d
This commit is contained in:
parent
6b38b276bc
commit
a68d70d456
@ -11,7 +11,7 @@
|
||||
<TargetFileExt Value=""/>
|
||||
<Icon Value="0"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<ActiveEditorIndexAtStart Value="1"/>
|
||||
<ActiveEditorIndexAtStart Value="0"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<ProjectVersion Value=""/>
|
||||
@ -35,8 +35,8 @@
|
||||
<Filename Value="project1.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="project1"/>
|
||||
<CursorPos X="1" Y="95"/>
|
||||
<TopLine Value="73"/>
|
||||
<CursorPos X="23" Y="98"/>
|
||||
<TopLine Value="84"/>
|
||||
<EditorIndex Value="0"/>
|
||||
<UsageCount Value="38"/>
|
||||
<Loaded Value="True"/>
|
||||
@ -90,8 +90,8 @@
|
||||
<Unit7>
|
||||
<Filename Value="../../Units/MMLCore/input.pas"/>
|
||||
<UnitName Value="Input"/>
|
||||
<CursorPos X="78" Y="314"/>
|
||||
<TopLine Value="296"/>
|
||||
<CursorPos X="56" Y="49"/>
|
||||
<TopLine Value="24"/>
|
||||
<EditorIndex Value="1"/>
|
||||
<UsageCount Value="13"/>
|
||||
<Loaded Value="True"/>
|
||||
@ -109,7 +109,7 @@
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<UnitName Value="ocr"/>
|
||||
<CursorPos X="11" Y="361"/>
|
||||
<TopLine Value="37"/>
|
||||
<TopLine Value="330"/>
|
||||
<EditorIndex Value="3"/>
|
||||
<UsageCount Value="14"/>
|
||||
<Loaded Value="True"/>
|
||||
@ -181,124 +181,124 @@
|
||||
</Units>
|
||||
<JumpHistory Count="30" HistoryIndex="29">
|
||||
<Position1>
|
||||
<Filename Value="../../Units/MMLCore/bitmaps.pas"/>
|
||||
<Caret Line="483" Column="21" TopLine="459"/>
|
||||
</Position1>
|
||||
<Position2>
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<Caret Line="656" Column="18" TopLine="636"/>
|
||||
</Position2>
|
||||
<Position3>
|
||||
</Position1>
|
||||
<Position2>
|
||||
<Filename Value="../../Units/MMLCore/bitmaps.pas"/>
|
||||
<Caret Line="62" Column="33" TopLine="47"/>
|
||||
</Position3>
|
||||
<Position4>
|
||||
</Position2>
|
||||
<Position3>
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<Caret Line="653" Column="39" TopLine="637"/>
|
||||
</Position3>
|
||||
<Position4>
|
||||
<Filename Value="../../Units/MMLCore/window.pas"/>
|
||||
<Caret Line="52" Column="40" TopLine="37"/>
|
||||
</Position4>
|
||||
<Position5>
|
||||
<Filename Value="../../Units/MMLCore/window.pas"/>
|
||||
<Caret Line="52" Column="40" TopLine="37"/>
|
||||
<Caret Line="73" Column="33" TopLine="58"/>
|
||||
</Position5>
|
||||
<Position6>
|
||||
<Filename Value="../../Units/MMLCore/window.pas"/>
|
||||
<Caret Line="73" Column="33" TopLine="58"/>
|
||||
<Caret Line="373" Column="39" TopLine="368"/>
|
||||
</Position6>
|
||||
<Position7>
|
||||
<Filename Value="../../Units/MMLCore/window.pas"/>
|
||||
<Caret Line="373" Column="39" TopLine="368"/>
|
||||
</Position7>
|
||||
<Position8>
|
||||
<Filename Value="../../Units/MMLCore/bitmaps.pas"/>
|
||||
<Caret Line="98" Column="27" TopLine="91"/>
|
||||
</Position8>
|
||||
<Position9>
|
||||
</Position7>
|
||||
<Position8>
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<Caret Line="656" Column="33" TopLine="637"/>
|
||||
</Position9>
|
||||
<Position10>
|
||||
</Position8>
|
||||
<Position9>
|
||||
<Filename Value="../../Units/MMLCore/window.pas"/>
|
||||
<Caret Line="63" Column="37" TopLine="47"/>
|
||||
</Position10>
|
||||
<Position11>
|
||||
</Position9>
|
||||
<Position10>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="68" Column="30" TopLine="63"/>
|
||||
</Position11>
|
||||
<Position12>
|
||||
</Position10>
|
||||
<Position11>
|
||||
<Filename Value="../../Units/MMLCore/bitmaps.pas"/>
|
||||
<Caret Line="487" Column="3" TopLine="469"/>
|
||||
</Position11>
|
||||
<Position12>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="81" Column="4" TopLine="66"/>
|
||||
</Position12>
|
||||
<Position13>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="81" Column="4" TopLine="66"/>
|
||||
<Caret Line="60" Column="4" TopLine="45"/>
|
||||
</Position13>
|
||||
<Position14>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="60" Column="4" TopLine="45"/>
|
||||
<Caret Line="81" Column="4" TopLine="66"/>
|
||||
</Position14>
|
||||
<Position15>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="81" Column="4" TopLine="66"/>
|
||||
<Caret Line="60" Column="4" TopLine="45"/>
|
||||
</Position15>
|
||||
<Position16>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="60" Column="4" TopLine="45"/>
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<Caret Line="11" Column="67" TopLine="1"/>
|
||||
</Position16>
|
||||
<Position17>
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<Caret Line="11" Column="67" TopLine="1"/>
|
||||
<Caret Line="466" Column="18" TopLine="451"/>
|
||||
</Position17>
|
||||
<Position18>
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<Caret Line="466" Column="18" TopLine="451"/>
|
||||
<Caret Line="477" Column="36" TopLine="45"/>
|
||||
</Position18>
|
||||
<Position19>
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<Caret Line="477" Column="36" TopLine="45"/>
|
||||
<Caret Line="493" Column="19" TopLine="478"/>
|
||||
</Position19>
|
||||
<Position20>
|
||||
<Filename Value="../../Units/MMLCore/ocr.pas"/>
|
||||
<Caret Line="493" Column="19" TopLine="478"/>
|
||||
</Position20>
|
||||
<Position21>
|
||||
<Filename Value="../../Units/MMLCore/bitmaps.pas"/>
|
||||
<Caret Line="98" Column="33" TopLine="91"/>
|
||||
</Position21>
|
||||
<Position22>
|
||||
</Position20>
|
||||
<Position21>
|
||||
<Filename Value="../../Units/MMLCore/client.pas"/>
|
||||
<Caret Line="33" Column="53" TopLine="31"/>
|
||||
</Position21>
|
||||
<Position22>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="12" Column="6" TopLine="1"/>
|
||||
</Position22>
|
||||
<Position23>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="12" Column="6" TopLine="1"/>
|
||||
<Caret Line="41" Column="17" TopLine="23"/>
|
||||
</Position23>
|
||||
<Position24>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="41" Column="17" TopLine="23"/>
|
||||
<Caret Line="96" Column="16" TopLine="75"/>
|
||||
</Position24>
|
||||
<Position25>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="96" Column="16" TopLine="75"/>
|
||||
</Position25>
|
||||
<Position26>
|
||||
<Filename Value="../../Units/MMLCore/input.pas"/>
|
||||
<Caret Line="47" Column="65" TopLine="33"/>
|
||||
</Position25>
|
||||
<Position26>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="13" Column="25" TopLine="1"/>
|
||||
</Position26>
|
||||
<Position27>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="13" Column="25" TopLine="1"/>
|
||||
<Caret Line="96" Column="39" TopLine="82"/>
|
||||
</Position27>
|
||||
<Position28>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="96" Column="39" TopLine="82"/>
|
||||
</Position28>
|
||||
<Position29>
|
||||
<Filename Value="../../Units/MMLCore/input.pas"/>
|
||||
<Caret Line="47" Column="33" TopLine="33"/>
|
||||
</Position29>
|
||||
<Position30>
|
||||
</Position28>
|
||||
<Position29>
|
||||
<Filename Value="../../Units/MMLCore/bitmaps.pas"/>
|
||||
<Caret Line="477" Column="35" TopLine="469"/>
|
||||
</Position29>
|
||||
<Position30>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<Caret Line="97" Column="12" TopLine="73"/>
|
||||
</Position30>
|
||||
</JumpHistory>
|
||||
</ProjectOptions>
|
||||
@ -306,7 +306,7 @@
|
||||
<Version Value="8"/>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)/"/>
|
||||
<OtherUnitFiles Value="$(ProjPath)/../../Units/MMLCore/;$(ProjPath)/../../Units/Misc/;$(ProjPath)/../../Units/MMLAddon/;$(LazarusDir)/lcl/units/$(TargetCPU)-$(TargetOS)/$(LCLWidgetType)/;$(LazarusDir)/lcl/units/$(TargetCPU)-$(TargetOS)/;$(ProjPath)/../../Units/Linux/"/>
|
||||
<OtherUnitFiles Value="$(ProjPath)/../../Units/MMLCore/;$(ProjPath)/../../Units/Misc/;$(ProjPath)/../../Units/MMLAddon/;$(LazarusDir)/lcl/units/$(TargetCPU)-$(TargetOS)/$(LCLWidgetType)/;$(LazarusDir)/lcl/units/$(TargetCPU)-$(TargetOS)/;$(ProjPath)/../../Units/Linux/;$(LazarusDir)/components/mouseandkeyinput/"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<Optimizations>
|
||||
|
@ -93,7 +93,9 @@ begin
|
||||
writeln('Time: ' + FloatToStr(((GetTickCount - Time) / (i + 1))));
|
||||
writeln(C.MOCR.GetUpTextAt(0,0)); }
|
||||
|
||||
C.MInput.ClickMouse(5,5, mouse_Left);
|
||||
//C.MInput.ClickMouse(5,5, mouse_Left);
|
||||
sleep(2000);
|
||||
C.MInput.SendText('a');
|
||||
|
||||
C.Free;
|
||||
bmp.OnDestroy:=nil;
|
||||
|
42
Units/MMLAddon/PSInc/Wrappers/keyboard.inc
Normal file
42
Units/MMLAddon/PSInc/Wrappers/keyboard.inc
Normal file
@ -0,0 +1,42 @@
|
||||
{
|
||||
This file is part of the Mufasa Macro Library (MML)
|
||||
Copyright (c) 2009 by Raymond van Venetië and Merlijn Wajer
|
||||
|
||||
MML is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MML is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with MML. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
See the file COPYING, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
Keyboard.inc for the Mufasa Macro Library
|
||||
}
|
||||
|
||||
procedure KeyDown(key: Word);
|
||||
begin
|
||||
CurrThread.Client.MInput.KeyDown(key);
|
||||
end;
|
||||
|
||||
procedure KeyUp(key: Word);
|
||||
begin
|
||||
CurrThread.Client.MInput.KeyUp(key);
|
||||
end;
|
||||
|
||||
procedure SendKeys(s: string);
|
||||
begin
|
||||
CurrThread.Client.MInput.SendText(s);
|
||||
end;
|
||||
|
||||
procedure PressKey(key: Word);
|
||||
begin
|
||||
CurrThread.Client.MInput.PressKey(key);
|
||||
end;
|
@ -97,6 +97,12 @@ Sender.AddFunction(@SetColorToleranceSpeed, 'procedure SetColorToleranceSpeed(ct
|
||||
Sender.AddFunction(@MoveMouse, 'procedure MoveMouse(x, y: integer);');
|
||||
Sender.AddFunction(@GetMousePos, 'procedure GetMousePos(var x, y: integer);');
|
||||
|
||||
{Keyboard}
|
||||
Sender.AddFunction(@KeyDown, 'procedure KeyDown(key: Word);');
|
||||
Sender.AddFunction(@KeyUp, 'procedure KeyUp(key: Word);');
|
||||
Sender.AddFunction(@PressKey, 'procedure PressKey(key: Word);');
|
||||
Sender.AddFunction(@SendKeys, 'procedure SendKeys(s: string);');
|
||||
|
||||
{ OCR}
|
||||
|
||||
Sender.AddFunction(@rs_GetUpText, 'function rs_GetUpText: string;');
|
||||
|
@ -157,7 +157,6 @@ begin
|
||||
SyncInfo:= TheSyncInfo;
|
||||
SetLength(PluginsToLoad,0);
|
||||
Client := TClient.Create;
|
||||
|
||||
PSScript := TPSScript.Create(nil);
|
||||
PSScript.UsePreProcessor:= True;
|
||||
PSScript.OnNeedFile := @RequireFile;
|
||||
@ -196,6 +195,7 @@ end;
|
||||
{$I PSInc/Wrappers/colour.inc}
|
||||
{$I PSInc/Wrappers/math.inc}
|
||||
{$I PSInc/Wrappers/mouse.inc}
|
||||
{$I PSInc/Wrappers/keyboard.inc}
|
||||
{$I PSInc/Wrappers/dtm.inc}
|
||||
{$I PSInc/Wrappers/ocr.inc}
|
||||
|
||||
|
@ -30,11 +30,13 @@ interface
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
mufasatypes, // for common mufasa types
|
||||
windowutil // for mufasa window utils
|
||||
windowutil, // for mufasa window utils
|
||||
{$IFDEF LINUX}
|
||||
,ctypes,x, xlib,xtest{,keysym} // for X* stuff
|
||||
// do non silent keys with XTest.
|
||||
{$ENDIF};
|
||||
ctypes,x, xlib,xtest, // for X* stuff
|
||||
// do non silent keys/mouse with XTest / TKeyInput.
|
||||
{Later on we should use xdotool, as it allows silent input}
|
||||
{$ENDIF}
|
||||
MouseAndKeyInput, KeyInputIntf, lclintf;
|
||||
type
|
||||
TMInput = class(TObject)
|
||||
constructor Create(Client: TObject);
|
||||
@ -46,8 +48,10 @@ type
|
||||
procedure MouseButtonActionSilent(x,y : integer; mClick: TClickType; mPress: TMousePress);
|
||||
procedure ClickMouse(X, Y: Integer; mClick: TClickType);
|
||||
|
||||
procedure KeyUp(key: Integer);
|
||||
procedure KeyDown(key: Integer);
|
||||
procedure KeyUp(key: Word);
|
||||
procedure KeyDown(key: Word);
|
||||
procedure PressKey(key: Word);
|
||||
procedure SendText(text: string);
|
||||
|
||||
// Not used yet.
|
||||
procedure SetSilent(_Silent: Boolean);
|
||||
@ -63,13 +67,14 @@ type
|
||||
private
|
||||
// Not used yet.
|
||||
Silent: Boolean;
|
||||
//KeyInput: TKeyInput;
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Client{$IFDEF MSWINDOWS},windows{$ENDIF};
|
||||
Client,{$IFDEF MSWINDOWS}windows {$ELSE}lcltype{$ENDIF};
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
type
|
||||
@ -123,24 +128,52 @@ constructor TMInput.Create(Client: TObject);
|
||||
begin
|
||||
inherited Create;
|
||||
Self.Client := Client;
|
||||
//Self.KeyInput := KeyInput;
|
||||
|
||||
end;
|
||||
|
||||
destructor TMInput.Destroy;
|
||||
begin
|
||||
|
||||
//Self.KeyInput := nil;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TMInput.KeyUp(key: Integer);
|
||||
procedure TMInput.KeyUp(key: Word);
|
||||
|
||||
begin
|
||||
|
||||
{Self.}KeyInput.Up(Key);
|
||||
end;
|
||||
|
||||
procedure TMInput.KeyDown(key: Integer);
|
||||
procedure TMInput.KeyDown(key: Word);
|
||||
|
||||
begin
|
||||
{Self.}KeyInput.Down(Key);
|
||||
end;
|
||||
|
||||
procedure TMInput.PressKey(key: Word);
|
||||
begin
|
||||
Self.KeyDown(key);
|
||||
Self.KeyUp(key);
|
||||
end;
|
||||
|
||||
{ No using VkKeyScan }
|
||||
function GetSimpleKeyCode(c: char): word;
|
||||
|
||||
begin
|
||||
//result := ord(UpCase(c));
|
||||
c := lowerCase(c);
|
||||
if ((c >= 'a') and (c <= 'z')) then
|
||||
Exit(VK_A + (Byte(c) - 97));
|
||||
Raise Exception.CreateFMT('GetSimpleKeyCode - char is not in A..z',[]);
|
||||
end;
|
||||
|
||||
procedure TMInput.SendText(text: string);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 1 to length(text) do
|
||||
Self.PressKey(GetSimpleKeyCode(text[i]));
|
||||
end;
|
||||
|
||||
procedure TMInput.GetMousePos(var X, Y: Integer);
|
||||
|
Loading…
Reference in New Issue
Block a user