Solved

Get last window handle?

Posted on 2004-04-14
13
937 Views
Last Modified: 2010-08-05
HI :D

I have a little program that has some shortcuts to windows apps:
I need function to Get the handle of the last program...


Can Somebody Help? please :P
0
Comment
Question by:lnishimura
  • 5
  • 4
  • 3
  • +1
13 Comments
 
LVL 20

Expert Comment

by:Madshi
ID: 10830909
Could you please specify what you mean with "the last program"?
0
 

Author Comment

by:lnishimura
ID: 10830929
All Exe Program Software that creates a window has a handle right?
Ussually an integer... i need to know the handle of the last one...


Got it?


here goes a sample that lists the handles but i cant get the  last one opened


procedure LIstApp;
const
MAX_WINDOW = 16364;
var
 I     : Integer
Caption: Array[0..255]Of Char;
//Lista  : TStringList;
begin
//Lista:=TStringList.Create;
//Lista.Sorted:=True;
For I:=1 To MAX_WINDOW Do
Begin
If((GetWindowText(I,Caption,255)<>0)And (GetWindowLong(I,GWL_EXSTYLE)<>0)And
(GetWindowLong(I,GWL_HWNDPARENT)=0)And (GetWindowLong(I,GWL_HINSTANCE)<>0))Then
If(IsWindowVisible(I))Then begin

 form1.Lista.Items.Add(inttostr(i));
 end;

end;
end;
0
 
LVL 20

Expert Comment

by:Madshi
ID: 10831047
You should use EnumWindows instead of looping through possible window handles.
0
 

Author Comment

by:lnishimura
ID: 10831096
Any Sample or function i can use?
0
 
LVL 3

Expert Comment

by:MarcG
ID: 10831207

For EnumWindows you need to write a function that is called when a window is found. Like this:

function EnumWindowsProc(hWnd: HWND; lParam: LParam): Bool;
var
  processID, tmpID: DWord;
  tmpCaption: array[0..99] of Char;
  tmp: String;
begin
  Result:= True;
  GetWindowThreadProcessID(hWnd, @processID);
  //*** do not get oneself
  if processID <> GetCurrentProcessID then
  begin
    //*** exclude taskbar, desktop and own tray menu
    if (hWnd <> FindWindow('Shell_TrayWnd', nil)) and
      (hWnd <> FindWindow('Progman', nil)) and
      (hWnd <> Findwindow(nil, 'frmMain.mnuTray')) then
    begin
      if isWindowVisible(hWnd) then
      begin
         { Do something }
      end;
    end;
  end;
end;

Then call EnumWindows like this:

EnumWindows(@EnumWindowsProc, 0);

The EnumWindowsProc above is from a prog of me, so the code inside is just an example.
0
 
LVL 20

Expert Comment

by:Madshi
ID: 10831382
Pleae make that EnumWindowsProc to be "stdcall" !!
0
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 
LVL 12

Expert Comment

by:Ivanov_G
ID: 10832340

   You execute these windows Apps from your code.... right ? If so - just when you execute with ShellExecute for example take the result somewhere. It returns Handle ...
0
 

Author Comment

by:lnishimura
ID: 10833144
i Know i can put some thing after ShellExecute...and MarcG is very nice to use too....However
what can i put after shellExecute that returns me the las handle?
0
 
LVL 12

Expert Comment

by:Ivanov_G
ID: 10833317

    I don't understand you .... ShellExecute is function - it has result :

  HINSTANCE ShellExecute(
    HWND hwnd,      // handle to parent window
    LPCTSTR lpOperation,      // pointer to string that specifies operation to perform
    LPCTSTR lpFile,      // pointer to filename or folder name string
    LPCTSTR lpParameters,      // pointer to string that specifies executable-file parameters
    LPCTSTR lpDirectory,      // pointer to string that specifies default directory
    INT nShowCmd       // whether file is shown when opened
  );

Return Values

If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
0
 

Author Comment

by:lnishimura
ID: 10833348
hmn
i will test it

let you know...does it returns the Handle of the soft i opened rght?
0
 
LVL 12

Expert Comment

by:Ivanov_G
ID: 10833412

   "instance handle of the application that was run"

   you can find the declaration of HInst type, which is in fact THandle... Enjoy :)
0
 

Author Comment

by:lnishimura
ID: 10833465
dude.... i'm too much stupid to undersntand your answer(still newbie in delphi)...

Can u post some code that really helps me a lot Thanx :D
0
 
LVL 12

Accepted Solution

by:
Ivanov_G earned 500 total points
ID: 10833797

    Sorry, my mistake, MSDN says that with ShellExecute you receive number > 32 if success, else - <= 32. You can not do anything with this.

   The methods you need to get Handle are CreateProcess and OpenProcess. Here is some source you can look at :
   http://www.delphicorner.f9.co.uk/articles/wapi4.htm

   Then use OpenProcess and you will have the Handle.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Delphi 2010 Export to pdf 2 253
Need Delphi function to get Youtube video title 5 190
delphi exception 7 58
Delphi Form ownership 4 54
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now