BSOne.SFC/EM.Lib/DelphiUIAutomation/demo/UIAutoWrapper.pas

432 lines
14 KiB
Plaintext

{***************************************************************************}
{ }
{ DelphiUIAutomation }
{ }
{ Copyright 2016 JHC Systems Limited }
{ }
{***************************************************************************}
{ }
{ Licensed under the Apache License, Version 2.0 (the "License"); }
{ you may not use this file except in compliance with the License. }
{ You may obtain a copy of the License at }
{ }
{ http://www.apache.org/licenses/LICENSE-2.0 }
{ }
{ Unless required by applicable law or agreed to in writing, software }
{ distributed under the License is distributed on an "AS IS" BASIS, }
{ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. }
{ See the License for the specific language governing permissions and }
{ limitations under the License. }
{ }
{***************************************************************************}
unit UIAutoWrapper;
interface
const
{$IFDEF WIN64}
DLL_UIAUTO = 'UIAutomation64.dll';
{$ELSE}
DLL_UIAUTO = 'UIAutomation.dll';
{$ENDIF}
type
// TODO: Better names for these types please
TSimpleFunc = procedure; stdcall;
TLaunchFunc = procedure (const val1, val2: String);
TStringFunc = function (const value: String): Pointer;
TPointerFunc = procedure (handle: Pointer);
TSelectTabFunc = procedure (handle: Pointer; text: String);
TGetTabFunc = function (handle: Pointer; value: Integer): Pointer;
TGetEditBoxByNameFunc = function (handle: Pointer; text: String): Pointer;
TGetTextFunc = function (handle: Pointer): String;
TToggleFunc = procedure (handle: Pointer);
TGetStatusBarFunc = function (handle: Pointer): Pointer;
TSetTextFunc = procedure (handle: Pointer; text: String);
TGetMenuItemFunc = function (parent: Pointer; handle: Pointer; text: String): Pointer;
TGetStatusbarTextFunc = function (handle: Pointer; value: Integer): String;
TClickFunc = procedure(handle: Pointer; text: String);
TSelectTreeViewItemFunc = procedure (handle: Pointer; item: Integer; text: String);
TRadioButtonSelectFunc = procedure (handle: Pointer; item: Integer);
TGetGridFunc = function (parent: Pointer; item: Integer) : Pointer;
TGetCellValueFunc = function (parent: Pointer; x, y: Integer): String;
TUIAutoWrapper = class
private
dllHandle : THandle;
launchOrAttachFunc: TLaunchFunc;
killFunc: TSimpleFunc;
initializeFunc: TSimpleFunc;
finalizeFunc: TSimpleFunc;
waitWhileBusyFunc: TSimpleFunc;
getDesktopWindowFunc: TStringFunc;
getWindowFunc: TGetEditBoxByNameFunc;
maximizeFunc: TPointerFunc;
selectTabFunc: TSelectTabFunc;
getTabFunc: TGetTabFunc;
getCheckBoxFunc: TGetTabFunc;
getEditBoxFunc: TGetTabFunc;
getTextBoxFunc: TGetTabFunc;
getEditBoxByNameFunc: TGetEditBoxByNameFunc;
getTextFunc: TGetTextFunc;
getTextFromTextFunc: TGetTextFunc;
toggleFunc: TToggleFunc;
getStatusbarTextFunc: TGetStatusbarTextFunc;
getComboBoxByNameFunc: TGetEditBoxByNameFunc;
getComboBoxFunc: TGetTabFunc;
setTextFunc: TSetTextFunc;
selectTreeViewItemFunc: TSelectTreeViewItemFunc;
selectRadioButtonFunc: TRadioButtonSelectFunc;
clickMenuItemFunc : TClickFunc;
clickButtonFunc : TClickFunc;
getGridFunc: TGetGridFunc;
getCellValueFunc : TGetCellValueFunc;
public
constructor Create(sDllPath: String = '');
destructor Destroy; override;
procedure Launch(const val1, val2: String);
procedure Kill;
procedure Initialize;
procedure Finalize;
procedure WaitWhileBusy;
function GetDesktopWindow(const name: String) : Pointer;
function GetWindow(parent: Pointer; const name: String) : Pointer;
procedure Maximize(handle: Pointer);
procedure Focus(handle: Pointer);
procedure SelectTab(handle: Pointer; text: String);
function GetTab(handle: Pointer; item: integer): Pointer;
function GetEditBox(handle: Pointer; item: Integer): pointer; overload;
function GetEditBox(handle: Pointer; name: String): pointer; overload;
function GetTextBox(handle: Pointer; item: Integer): pointer;
function GetText(handle: Pointer): String;
function GetTextFromText(handle: Pointer): String;
function GetCheckBox(handle: Pointer; index: Integer): Pointer;
procedure Toggle(handle: Pointer);
function GetStatusbarText(handle: Pointer; item: Integer): String;
function GetComboBox(handle: Pointer; item: Integer): Pointer; overload;
function GetComboBox(handle: Pointer; name: String): Pointer; overload;
procedure SetText(handle: Pointer; text: String);
procedure SelectTreeViewItem(parent: Pointer; item: Integer; name: String);
procedure ClickMenu(parent: Pointer; value: String);
procedure SelectRadioButton(handle: Pointer; index: Integer);
procedure ClickButton(parent: Pointer; name: String);
function GetDataGrid(parent: Pointer; item: Integer): Pointer;
function GetCellValue(parent: Pointer; x, y: Integer): String;
end;
implementation
uses
dialogs,
windows, Tocsg.Path;
{ TUIAutoWrapper }
procedure TUIAutoWrapper.ClickMenu(parent: Pointer; value: String);
begin
writeln('About to click on ' + value);
self.clickMenuItemFunc(parent, value);
writeln('Clicked ' + value);
end;
constructor TUIAutoWrapper.Create(sDllPath: String = '');
begin
WriteLn('Loading DLL');
if sDllPath = '' then
sDllPath := GetRunExePathDir + DLL_UIAUTO;
dllHandle := LoadLibrary(PChar(sDllPath));
WriteLn('Loaded DLL');
if dllHandle <> 0 then
begin
@launchOrAttachFunc := getProcAddress(dllHandle, 'LaunchOrAttach');
if not Assigned (launchOrAttachFunc) then
WriteLn('"LaunchOrAttach" function not found') ;
@killFunc := getProcAddress(dllHandle, 'Kill');
if not Assigned (killFunc) then
WriteLn('"Kill" function not found') ;
@clickMenuItemFunc := getProcAddress(dllHandle, 'ClickMenuItem');
if not Assigned (clickMenuItemFunc) then
WriteLn('"ClickMenuItem" function not found') ;
@initializeFunc := getProcAddress(dllHandle, 'Initialize');
if not Assigned (initializeFunc) then
WriteLn('"Initialise" function not found') ;
@finalizeFunc := getProcAddress(dllHandle, 'Finalize');
if not Assigned (finalizeFunc) then
WriteLn('"Finalize" function not found') ;
@waitWhileBusyFunc := getProcAddress(dllHandle, 'WaitWhileBusy');
if not Assigned (waitWhileBusyFunc) then
WriteLn('"WaitWhileBusy" function not found');
@getDesktopWindowFunc := getProcAddress(dllHandle, 'GetDesktopWindow');
if not Assigned (getDesktopWindowFunc) then
WriteLn('"GetDesktopWindow" function not found');
@selectTabFunc := getProcAddress(dllHandle, 'SelectTab');
if not Assigned (selectTabFunc) then
WriteLn('"SelectTab" function not found');
@getTabFunc := getProcAddress(dllHandle, 'GetTab');
if not Assigned (getTabFunc) then
WriteLn('"GetTab" function not found');
@maximizeFunc := getProcAddress(dllHandle, 'Maximize');
if not Assigned (maximizeFunc) then
WriteLn('"Maximize" function not found');
@getEditBoxByNameFunc := getProcAddress(dllHandle, 'GetEditBoxByName');
if not Assigned (getEditBoxByNameFunc) then
WriteLn('"GetEditBoxByName" function not found');
@getEditBoxFunc := getProcAddress(dllHandle, 'GetEditBox');
if not Assigned (getEditBoxFunc) then
WriteLn('"GetEditBox" function not found');
@getTextFunc := getProcAddress(dllHandle, 'GetText');
if not Assigned (getTextFunc) then
WriteLn('"GetText" function not found');
@getCheckBoxFunc := getProcAddress(dllHandle, 'GetCheckBox');
if not Assigned (getCheckBoxFunc) then
WriteLn('"GetCheckBox" function not found');
@toggleFunc := getProcAddress(dllHandle, 'Toggle');
if not Assigned (toggleFunc) then
WriteLn('"Toggle" function not found');
@getStatusbarTextFunc := getProcAddress(dllHandle, 'GetStatusBarText');
if not Assigned (getStatusbarTextFunc) then
WriteLn('"GetStatusBarText" function not found');
@getTextBoxFunc := getProcAddress(dllHandle, 'GetTextBox');
if not Assigned (getTextBoxFunc) then
WriteLn('"GetTextBox" function not found');
@getTextFromTextFunc := getProcAddress(dllHandle, 'GetTextFromText');
if not Assigned (getTextFromTextFunc) then
WriteLn('"GetTextFromText" function not found');
@getComboBoxByNameFunc := getProcAddress(dllHandle, 'GetComboBoxByName');
if not Assigned (getComboBoxByNameFunc) then
WriteLn('"GetComboBoxByName" function not found');
@getComboBoxFunc := getProcAddress(dllHandle, 'GetComboBox');
if not Assigned (getComboBoxFunc) then
WriteLn('"GetComboBox" function not found');
@setTextFunc := getProcAddress(dllHandle, 'SetText');
if not Assigned (setTextFunc) then
WriteLn('"SetText" function not found');
@selectTreeViewItemFunc := getProcAddress(dllHandle, 'SelectTreeViewItem');
if not Assigned (selectTreeViewItemFunc) then
WriteLn('"SelectTreeViewItem" function not found');
@selectRadioButtonFunc := getProcAddress(dllHandle, 'SelectRadioButton');
if not Assigned (selectRadioButtonFunc) then
WriteLn('"SelectRadioButton" function not found');
@clickButtonFunc := getProcAddress(dllHandle, 'ClickButton');
if not Assigned (clickButtonFunc) then
WriteLn('"ClickButton" function not found');
@getWindowFunc := getProcAddress(dllHandle, 'GetWindow');
if not Assigned (getWindowFunc) then
WriteLn('"GetWindow" function not found');
@getGridFunc := getProcAddress(dllHandle, 'GetGrid');
if not Assigned (getGridFunc) then
WriteLn('"GetGrid" function not found');
@getCellValueFunc := getProcAddress(dllHandle, 'GetCellValue');
if not Assigned (getCellValueFunc) then
WriteLn('"GetCellValue" function not found');
end
else
begin
WriteLn('Dll not found') ;
Exit;
end;
end;
destructor TUIAutoWrapper.Destroy;
begin
FreeLibrary(dllHandle);
inherited Destroy;
end;
procedure TUIAutoWrapper.Finalize;
begin
self.FinalizeFunc;
end;
procedure TUIAutoWrapper.Initialize;
begin
self.InitializeFunc;
end;
procedure TUIAutoWrapper.WaitWhileBusy;
begin
self.waitWhileBusyFunc;
end;
function TUIAutoWrapper.GetDesktopWindow(const name: String) : Pointer;
begin
result := self.getDesktopWindowFunc(name);
end;
procedure TUIAutoWrapper.ClickButton(parent: Pointer; name: String);
begin
self.clickButtonFunc(parent, name);
end;
//wrapper.GetDataGrid(window, 0, 'TAutomationStringGrid');
function TUIAutoWrapper.GetDataGrid(parent: Pointer; item: Integer) : Pointer;
begin
result := self.getGridFunc(parent, item);
end;
function TUIautoWrapper.GetCellValue(parent: Pointer; x,y : Integer) : String;
begin
result := self.getCellValueFunc(parent, x, y);
end;
procedure TUIAutoWrapper.Focus (handle: Pointer);
begin
// Nothing yet.
end;
procedure TUIAutoWrapper.Kill;
begin
self.KillFunc;
end;
procedure TUIautoWrapper.maximize(handle: Pointer);
begin
self.maximizeFunc (handle);
end;
function TUIAutoWrapper.getTab(handle: Pointer; item: Integer): Pointer;
begin
result := self.GetTabFunc(handle, item);
end;
function TUIAutoWrapper.GetEditBox(handle: Pointer; item: Integer): pointer;
begin
result := self.getEditBoxFunc(handle, item);
end;
function TUIAutoWrapper.GetTextBox(handle: Pointer; item: Integer): pointer;
begin
result := self.getTextBoxFunc(handle, item);
end;
function TUIAutoWrapper.GetTextFromText(handle: Pointer): String;
begin
result := self.getTextFromTextFunc(handle);
end;
function TUIAutoWrapper.GetWindow(parent: Pointer; const name: String): Pointer;
begin
result := self.getWindowFunc(parent, name);
end;
function TUIAutoWrapper.GetText(handle: Pointer): String;
begin
result := self.getTextFunc(handle);
end;
function TUIAutoWrapper.GetCheckBox(handle: Pointer; index: Integer): Pointer;
begin
result := self.getCheckBoxFunc(handle, index);
end;
procedure TUIAutoWrapper.SelectRadioButton(handle: Pointer; index: Integer);
begin
self.selectRadioButtonFunc(handle, index);
end;
function TUIAutoWrapper.GetComboBox(handle: Pointer; name: String): Pointer;
begin
result := self.getComboBoxByNameFunc(handle, name);
end;
function TUIAutoWrapper.GetComboBox(handle: Pointer; item: Integer): Pointer;
begin
result := self.getComboBoxFunc(handle, item);
end;
function TUIAutoWrapper.GetStatusBarText(handle: Pointer; item: Integer): String;
begin
result := self.GetStatusBarTextFunc(handle, item);
end;
function TUIAutoWrapper.GetEditBox(handle: Pointer; name: String): pointer;
begin
result := self.getEditBoxByNameFunc(handle, name);
end;
procedure TUIAutoWrapper.SelectTab(handle: Pointer; text: String);
begin
self.SelectTabFunc(handle, text);
end;
procedure TUIAutoWrapper.SelectTreeViewItem(parent: Pointer; item: Integer;
name: String);
begin
self.selectTreeViewItemFunc(parent, item, name);
end;
procedure TUIAutoWrapper.SetText(handle: Pointer; text: String);
begin
self.setTextFunc(handle, text);
end;
procedure TUIAutoWrapper.Toggle(handle: Pointer);
begin
self.ToggleFunc(handle);
end;
procedure TUIAutoWrapper.Launch(const val1, val2: String);
begin
self.launchOrAttachFunc(val1, val2);
end;
end.