5 |
The LA Fox Developer Newsletter
|
March 1998
|
Here is a handy function that can be used in Visual FoxPro to determine if your application is already running or if a specific window has already been instantiated. It checks for the existence of a window with a specified caption and returns a logical value indicating it existence or non-existence. It also optionally wilt minimize, normalize or maximize the window if it finds it.
FUNCTION APPRUNNING (tcAppName, tnWindowSize)
*__ Parameters:
*__
1)
tcAppName:
The caption in the window to check for.
I
=
Show the window Normalized,
*__
If the second parameter is not passeu, then assume we don’t want to show the window,
*__
we just want to know
if it
exists. IF TYPE(”tnWindowSize”)
<>
“N”
tnWindowSize
=
0
ENDIF
LOCAL lcNull, InAppHandle, IlReturnValue
IcNuII
=
.NULL.
IlReturnValue
=
.F.
*__
Define the Windows API routines. DECLARE INTEGER FlndWindow IN W1N32API
STRING IcNulI, STRING tcAppName
DECLARE INTEGER ShowWindow IN WIN32API; INTEGER InAppHandle, INTEGER tnWindowSize
*__
Get the handle of the specified window. This will return zero if no such window exists. InAppHandle
=
FindWindow(IcNulI, tcAppName)
IF lnAppHandle
<>
0
IlReturnValue
=
.T.
*__
If the window size parameter is zero,
back that It is there.
IF tnWindowSize > 0
ShowWindow(InAppHandle, tnWindowSlze)
ENDIF
ENDIF
RETURN IlReturnValue
|
Checkina To See If Your Application Has Already Been
I Launched
In order for this function to work, your application must have a main window with a unique caption. This can be a top-level form or the FoxPro window. Since the function checks for windows with a specific caption, then if you dynamically Change the caption the function may not return the expected value.
To use the function, put in code similar to the following at the beginning of your main program:
IF APPRUNNING(”My Application’s Caption”, 3)
RETURN
ENDIF
This will call the APPRUNNING function that will check to see if there is a window with the caption “My Application’s Caption”. If so, then it will maximize that window and return a .T. condition causing the second instance to terminate.
Checkina For Activated Windows.
If your application restricts specific windows to one instance of thatwindow, then the APPRUNNING function can be used for this too. I recently developed an application that keeps track of different development projects. The main screen is just a grid that contains the name of the development project and the path to where the data is for that project. The control source for the•
table called that "Projects.dbf" with
two
fields
-
ProjName (Project Name) and Proj DBC (full path to where the DBC is for the project).
To display the status of a project, the user first clicks on the row in the grid containing the project, then clicks on the “Display Project” button. This then opens the DBC (specified in the Projects.ProjDBC field) and displays the project information form (called ProjTrak).
The caption of the ProjTrak form is set to the project name (from the Projects.ProjName field). Thus, each instance of the project information form has a unique caption.
If the ProjTrak form has already been instantiated for a given project, then I don’t want to open that DBC again and
try
to instantiate another instance of that project. I used the APPRUNNING function to check for this. The click event for the “Display Project” button looks something like this:
IF NOT APPRUNNING(ALLTRIM(Projects.ProjName),
1)
LOCAL IcDBC
IcDBC
=
Projects.Pr0jDBC
OPEN DATABASE &IcDBC
DO FORM ProjTrak WITH alltrim(Projects.ProjName)
ENDIF
|
Page 5
|
5 |