Window Precedence

I have an application which has a main window, and when you press a button on the main window, other applications launch as part of the program.  Now, when the applications launch, they take over focus of the program with the main program window still running in the background (which is what I desired).  However, my problem is that when I select the main program, my launched application falls behind the main window.  What I want to do is leave the launched application on top of the main window after clicking the main window, but I want the launched window to be gray and disabled until the user clicks on the launched window again.

Also.. I want to be able to set precedence for the different windows.. like say if window foo is open.. and window baz is open.. I want to have a way for my application to determine that baz should remain on top of foo.
LVL 1
ChrisHAsked:
Who is Participating?
 
mcriderCommented:
Add the following code to a MODULE:

'-------------------------------------------------------------------------------
    Public Const HWND_TOPMOST = -1
    Public Const HWND_NOTOPMOST = -2
    Public Const SWP_NOMOVE = 2
    Public Const SWP_NOSIZE = 1
    Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
    Declare Function SetWindowPos Lib "user32" _
        (ByVal hWnd As Long, _
        ByVal hWndInsertAfter As Long, _
        ByVal x As Long, _
        ByVal y As Long, _
        ByVal cx As Long, _
        ByVal cy As Long, _
        ByVal wFlags As Long) As Long
    Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
    Public Sub SetTopMostWindow(ObjHwnd As Long, Optional Switch As Boolean)
        If Switch = True Then
            SetWindowPos ObjHwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
        Else
            SetWindowPos ObjHwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS
        End If
    End Sub
'-------------------------------------------------------------------------------



Then after you launch your external application, do this to make it always on top:

'REPLACE "Untitled - Notepad" with the string in the TitleBar of your launched application
Dim hWnd As Long
hWnd = FindWindow(vbNullString, "Untitled - Notepad")
SetTopMostWindow hWnd, True



And do this to reset it back to normal:

'REPLACE "Untitled - Notepad" with the string in the TitleBar of your launched application
Dim hWnd As Long
hWnd = FindWindow(vbNullString, "Untitled - Notepad")
SetTopMostWindow hWnd, False





Cheers!®©
0
 
mcriderCommented:
By the way, when you make the call:


   hWnd = FindWindow(vbNullString, "Untitled - Notepad")

if hWnd = 0 then the API did not find the window, so don't call the SetTopMostWindow function....



Cheers!®©
0
 
ChrisHAuthor Commented:
Is there a way to get the title name in before the findwindow call?  See.. I launch a window using a Call Shell() function call based on a register value.  Any thoughts?
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
ChrisHAuthor Commented:
Is there a way to get the title name in before the findwindow call?  See.. I launch a window using a Call Shell() function call based on a register value.  Any thoughts?
0
 
mcriderCommented:
The SetTopMostWindow function I gave you requires a Window Handle and Shell returns an Instance handle...

Check out the following microsoft KB article:

HOWTO: Find a Window Handle from an Instance Handle
http://support.microsoft.com/support/kb/articles/Q242/3/08.ASP?LNG=ENG&SA=MSDN&FR=0 




Cheers!®©
0
 
ChrisHAuthor Commented:
Thanks for your help..
0
 
mcriderCommented:
Thanks for the points! Glad I could help!


Cheers!®©
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.