Skip to content

Commit

Permalink
Simba: TProc, TProcArr, SetTarget, and GetProcesses.
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnPeel committed Dec 23, 2010
1 parent 40c93dc commit 58faccf
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 9 deletions.
10 changes: 10 additions & 0 deletions Units/MMLAddon/PSInc/Wrappers/other.inc
Expand Up @@ -284,3 +284,13 @@ begin
mDebugLn('Exception in GetClipBoard: ' + e.message);
end;
end;

function ps_GetProcesses: TProcArr;
begin
Result := CurrThread.Client.IOManager.GetProcesses;
end;

procedure ps_SetTarget(Proc: TProc);
begin
CurrThread.Client.IOManager.SetTargetEx(Proc);
end;
3 changes: 3 additions & 0 deletions Units/MMLAddon/PSInc/pscompile.inc
Expand Up @@ -64,3 +64,6 @@ AddTypeS('TSP_Property','(SP_WriteTimeStamp,SP_OnTerminate)');
AddConstantN('mouse_Right','integer').SetInt(ps_mouse_right); //0
AddConstantN('mouse_Left','integer').SetInt(ps_mouse_left);//1
AddConstantN('mouse_Middle','integer').SetInt(ps_mouse_middle);//2

AddTypes('TProc', 'record Title: string; Handle: integer; Pid: integer; Width, Height: integer; end;');
AddTypes('TProcArr', 'array of TProc;');
2 changes: 2 additions & 0 deletions Units/MMLAddon/PSInc/psexportedmethods.inc
Expand Up @@ -195,6 +195,8 @@ AddFunction(@ps_messageBox,'function MessageBox(Text, Caption: string; Flags: Lo
AddFunction(@ps_MessageDlg,'function MessageDlg(const Caption, Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons) : integer;');
AddFunction(@ps_SetClipBoard, 'procedure SetClipBoard(const Data: string);');
AddFunction(@ps_GetClipBoard, 'function GetClipBoard: string;');
AddFunction(@ps_GetProcesses, 'function GetProcesses: TProcArr;');
AddFunction(@ps_SetTarget, 'procedure SetTarget(Proc: TProc);');
{$ENDIF}

{string}
Expand Down
4 changes: 3 additions & 1 deletion Units/MMLCore/iomanager.pas
Expand Up @@ -316,7 +316,9 @@ TIOManager_Abstract = class(TObject)
procedure SetKeyMouseTarget(idx: integer);
procedure FreeTarget(idx: integer);
procedure SetState(val: Boolean);


function GetProcesses: TProcArr; virtual; abstract;
procedure SetTargetEx(Proc: TProc); virtual; abstract;
protected
function SetImageTarget(target: TTarget): integer;
function SetKeyMouseTarget(target: TTarget): integer;
Expand Down
8 changes: 8 additions & 0 deletions Units/MMLCore/mufasatypes.pas
Expand Up @@ -106,6 +106,14 @@ TBox = record
x1, y1, x2, y2: Integer;
end;

TProc = record
Title: string;
Handle: integer;
Pid: integer;
Width, Height: integer;
end;
TProcArr = array of TProc;

const
TMDTMPointSize = 5*SizeOf(integer)+Sizeof(boolean);
type
Expand Down
15 changes: 14 additions & 1 deletion Units/MMLCore/os_linux.pas
Expand Up @@ -96,6 +96,9 @@ TIOManager = class(TIOManager_Abstract)
constructor Create(plugin_dir: string);
function SetTarget(target: TNativeWindow): integer; overload;
procedure SetDesktop; override;

function GetProcesses: TProcArr; override;
procedure SetTargetEx(Proc: TProc); overload;
private
procedure NativeInit; override;
procedure NativeFree; override;
Expand Down Expand Up @@ -509,5 +512,15 @@ implementation
begin
SetBothTargets(TWindow.Create(display, screennum, target))
end;


function TIOManager.GetProcesses: TProcArr;
begin
raise Exception.Create('GetProcesses: Not Implemented.');
end;

procedure TIOManager.SetTargetEx(Proc: TProc);
begin
raise Exception.Create('SetTargetEx: Not Implemented.');
end;

end.
48 changes: 41 additions & 7 deletions Units/MMLCore/os_windows.pas
Expand Up @@ -27,7 +27,7 @@
interface

uses
Classes, SysUtils, mufasatypes, windows, graphics, LCLType, bitmaps, IOManager, WinKeyInput;
Classes, SysUtils, mufasatypes, windows, graphics, LCLType, LCLIntf, bitmaps, IOManager, WinKeyInput;

type

Expand Down Expand Up @@ -80,7 +80,7 @@ TWindow = class(TWindow_Abstract)
keyinput: TKeyInput;
procedure ValidateBuffer(w,h:integer);
protected
function WindowRect(out Rect : TRect) : Boolean;virtual;
function WindowRect(out Rect : TRect) : Boolean; virtual;
end;

{ TDesktopWindow }
Expand All @@ -97,6 +97,8 @@ TIOManager = class(TIOManager_Abstract)
constructor Create(plugin_dir: string);
function SetTarget(target: TNativeWindow): integer; overload;
procedure SetDesktop; override;
function GetProcesses: TProcArr; override;
procedure SetTargetEx(Proc: TProc); overload;
protected
DesktopHWND : Hwnd;
procedure NativeInit; override;
Expand Down Expand Up @@ -422,9 +424,9 @@ function TWindow.IsMouseButtonHeld(button: TClickType): boolean;
inherited Create(plugin_dir);
end;

procedure TIOManager.NativeInit;
procedure TIOManager.NativeInit;
begin
self.DesktopHWND:= GetDesktopWindow;
self.DesktopHWND:= GetDesktopWindow;
end;

procedure TIOManager.NativeFree;
Expand All @@ -441,6 +443,41 @@ function TWindow.IsMouseButtonHeld(button: TClickType): boolean;
SetBothTargets(TWindow.Create(target));
end;

threadvar
ProcArr: TProcArr;

function EnumProcess(Handle: HWND; Param: LPARAM): WINBOOL; stdcall;
var
Proc: TProc;
I: integer;
pPid: DWORD;
begin
Result := (not ((Handle = 0) or (Handle = null)));
if ((Result) and (IsWindowVisible(Handle))) then
begin
I := Length(ProcArr);
SetLength(ProcArr, I + 1);
ProcArr[I].Handle := Handle;
SetLength(ProcArr[I].Title, 255);
SetLength(ProcArr[I].Title, GetWindowText(Handle, PChar(ProcArr[I].Title), Length(ProcArr[I].Title)));
GetWindowSize(Handle, ProcArr[I].Width, ProcArr[I].Height);
GetWindowThreadProcessId(Handle, pPid);
ProcArr[I].Pid := pPid;
end;
end;

function TIOManager.GetProcesses: TProcArr;
begin
SetLength(ProcArr, 0);
EnumWindows(@EnumProcess, 0);
Result := ProcArr;
end;

procedure TIOManager.SetTargetEx(Proc: TProc);
begin
SetTarget(Proc.Handle);
end;

{ TDesktopWindow }

constructor TDesktopWindow.Create(DesktopHandle: HWND);
Expand All @@ -450,9 +487,6 @@ constructor TDesktopWindow.Create(DesktopHandle: HWND);
self.handle:= DesktopHandle;
end;




function TDesktopWindow.WindowRect(out Rect : TRect) : Boolean;
begin
Rect.Left:= GetSystemMetrics(SM_XVIRTUALSCREEN);
Expand Down

0 comments on commit 58faccf

Please sign in to comment.