Link to home
Start Free TrialLog in
Avatar of nikolaosk
nikolaoskFlag for Greece

asked on

function that retrieves the state(maximise,minimise,restore) of an open window depending on its class

hi there

i need a function in delphi where i can pass as a parameter the name of a class e.g

"Notepad", and get a result back as a string or integer that tells me whether this window that belongs to this class

is mininimised,maximised or restored

for example

i open the art.txt notepad file and i minimise it

i want the fuction to return me the following:

minimise=0
restore=1
maximise=2


urgent help needed

thanks



function Get_windowminimised(const thestring: WideString): long;
var
  foldercaption:cardinal;
  foldercaptiontext,foldercaptiontext1:array[0..255] of char;

begin
     
     
      foldercaption := FindWindow('myClass', nil);
     
      GetWindowText (foldercaption, foldercaptiontext, 256);
        isminimised     (blah)
Result := ismin or is max or is restored
     
End;
Avatar of Hamidreza Vakilian
Hamidreza Vakilian

Hi!

You can use GetWindowPlacement Win32 API function:
I wrote a function that returns the status by a string using GetWindowPlacement =>


function GetWindowState(Wnd:HWnd):string;
var WPlacement : PWINDOWPLACEMENT;
begin
  GetMem(WPlacement,SizeOf(TWINDOWPLACEMENT));
  WPlacement^.Length:=SizeOf(TWINDOWPLACEMENT);
  if GetWindowPlacement(Wnd,WPlacement) then
    begin
    case WPlacement^.showCmd of
    SW_SHOWMAXIMIZED:  Result := 'Maximized';
    SW_SHOWMINIMIZED:  Result := 'Minimized';
    SW_SHOWNORMAL:     Result := 'Normal';{or restored}
    end
    end
  else
    Result:='ERR';
  FreeMem(WPlacement);
end;


Programmer-x
ASKER CERTIFIED SOLUTION
Avatar of Hamidreza Vakilian
Hamidreza Vakilian

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of nikolaosk

ASKER

hi,

your code works....

but in this function of yours

function GetWindowState(Wnd:HWnd):Integer;

i need to pass the classname of the window that i want to see if it is minimised or not, as a parameter.can you change the function a bit?

 
... Can you explain more?
hi i will try to explain as soon possible.

using the code below i can pass in the following function


GetStateOfWindow(param1,param2)

param1="CabinetWclass"
param2="My Computer"


and get the state of the window.
what i need is a similar function that i will be able to pass the same arguments and force(and not check) the window state. for example i open "my computer" window and SET the STATEof the window to restore or minimised.

some minor alterations to the code below i think

thanks



*******************************************

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function GetStateOfWindow(const thestr,thestr2: WideString): Integer;
var
  h2,h1:string;
  wnd:thandle;
  WPlacement:PWINDOWPLACEMENT;
  begin

  try
    h2:=string(thestr);
    h1:=string(thestr2);
    wnd := FindWindow(pansichar(h1),pansichar(h2));
    GetMem(WPlacement,SizeOf(TWINDOWPLACEMENT));
    WPlacement^.Length:=SizeOf(TWINDOWPLACEMENT);
    if GetWindowPlacement(Wnd,WPlacement) then
      begin
      case WPlacement^.showCmd of
        SW_SHOWMAXIMIZED:  Result := 2;
        SW_SHOWMINIMIZED:  Result := 0;
        SW_SHOWNORMAL:     Result := 1;
        end
        end
        else
        result:=-2;

  finally
    FreeMem(WPlacement);
  end;
  //end;
  end;



procedure TForm1.Button1Click(Sender: TObject);
var
a:integer;
x1,x2:string;
begin
x1:='My Computer';
x2:='CabinetWClass';

      a:=GetStateOfWindow(x1,x2);
         showmessage(inttostr(a));
      end;

end.