Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Determining If a VB EXE Is Running
Message
 
To
25/10/2006 14:14:40
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
01164478
Message ID:
01164497
Views:
16
I always love Marcia's error messages :-)))
TEXT TO lcMessage NOSHOW TEXTMERGE
     This is another Brain Dead Programmer Error.
     <<myError>>
     Have a nice day now...
ENDTEXT
Hmm, I must put that in production.


>Ha ha ha! I just added that at the last minute for him... :o) Which by the way, Marcia had another option she posted a couple of years ago to do the same thing:
>
>*--Courtesy Marcia Atkins, Universal Thread
>? isapprunning('NotePad')
>
>FUNCTION isapprunning
>LPARAMETERS tcAppName
>*** This function uses the creation of a named MUTEX to determine whether
>*** or not the application is already running. This function should be called
>*** near the top of the application's main program to create a named object
>*** that can be checked every time the application is started.  If the named
>*** object exists, the function will try to activate the FoxPro running application.
>
>LOCAL lcMsg, lnAttributes, lnOwner, lcName, lnMutexHandle, lnhWnd, lnRelationship, lnStyle, llRetVal
>LOCAL lcAppName
>
>lcMsg = ''
>SET ASSERTS ON
>IF EMPTY( NVL( tcAppName, '' ) )
>  TEXT TO lcMsg NOSHOW
>    This is another Brain Dead Programmer Error.
>    You must pass the name of an application to FirstTime().
>    Have a nice day now...
>  ENDTEXT
>  ASSERT .F. MESSAGE lcMsg
>  RETURN
>ENDIF
>
>lcAppName = UPPER( ALLTRIM( tcAppName ) ) + CHR( 0 )
>
>*** Declare just API functions and constants
>#DEFINE SW_MAXIMIZE              3
>#DEFINE ERROR_ALREADY_EXISTS   183
>#DEFINE GW_HWNDNEXT              2
>#DEFINE GW_CHILD                 5
>
>DECLARE INTEGER CreateMutex IN WIN32API INTEGER lnAttributes, INTEGER lnOwner, STRING @lcName
>DECLARE INTEGER GetProp IN WIN32API INTEGER lnhWnd, STRING @lcName
>DECLARE INTEGER SetProp IN WIN32API INTEGER lnhWnd, STRING @lcNam, INTEGER lnValue
>DECLARE INTEGER CloseHandle IN WIN32API INTEGER lnMutexHandle
>DECLARE INTEGER GetLastError IN WIN32API
>DECLARE INTEGER GetWindow IN USER32 INTEGER lnhWnd, INTEGER lnRelationship
>DECLARE INTEGER GetDesktopWindow IN WIN32API
>DECLARE BringWindowToTop IN Win32APi INTEGER lnhWnd
>DECLARE ShowWindow IN WIN32API INTEGER lnhWnd, INTEGER lnStyle
>
>*** Try and create a new MUTEX with the name of the passed application
>lnMutexHandle = CreateMutex( 0, 1, @lcAppName )
>
>*** If the named MUTEX creation fails because it exists already, try to display
>*** the existing application
>IF GetLastError() = ERROR_ALREADY_EXISTS
>
>  *** Get the hWnd of the first top level window on the Windows Desktop.
>  lnhWnd = GetWindow( GetDesktopWindow(), GW_CHILD )
>
>  *** Loop through the windows.
>  DO WHILE lnhWnd > 0
>
>     *** Is this the one that we are looking for?
>     *** Look for the property we added the first time
>     *** we launched the application
>     IF GetProp( lnhWnd, @lcAppName ) = 1
>       *** Activate the app and exit stage left
>       BringWindowToTop( lnhWnd )
>       ShowWindow( lnhWnd, SW_MAXIMIZE )
>       EXIT
>     ENDIF
>     lnhWnd = GetWindow( lnhWnd, GW_HWNDNEXT )
>  ENDDO
>
>  *** Close the 'failed to open' MUTEX handle
>  CloseHandle( lnMutexHandle )
>ELSE
>  *** Add a property to the FoxPro App so we can identify it again
>  SetProp( _vfp.Hwnd, @lcAppName, 1)
>  llRetVal = .T.
>ENDIF
>
>RETURN llRetVal
>
>
>
>>>=MESSAGEBOX('Press anykey to browse all running processes...')
>>
>>There is no "ANY" key on my keyboard :-))
>>BTW you could only press Esc, Space or Enter
Against Stupidity the Gods themselves Contend in Vain - Johann Christoph Friedrich von Schiller
The only thing normal about database guys is their tables.
Previous
Reply
Map
View

Click here to load this message in the networking platform