HOWTO: Use API Calls to Detect Other Running Applications (188404)



The information in this article applies to:

  • Microsoft Visual FoxPro for Windows 3.0
  • Microsoft Visual FoxPro for Windows 3.0b
  • Microsoft Visual FoxPro for Windows 5.0
  • Microsoft Visual FoxPro for Windows 5.0a

This article was previously published under Q188404

SUMMARY

At times it is desirable to determine what other applications or background processes are executing. This article describes how to use Windows API calls to determine what applications are running concurrently with a Visual FoxPro session or application.

MORE INFORMATION

Under certain circumstances, it is desirable to determine whether other applications, or multiple instances of a application are executing. You can use Windows API calls to determine what applications are executing at any given time. The code snippet, listed below, illustrates use of Windows API functions to determine what applications are currently executing.

Create a program called Enumwins.prg and type in the following code:

Sample Code

   LOCAL awin_apps, vfp_handle, ln_current_window,ln_window_count
   * Dimension array awin_apps to store running apps
   DIMENSION awin_apps[1]
   * Initialize variable to store handle for current application
   vfp_handle=0
   * Declare API Functions
   DECLARE INTEGER FindWindow ;
      IN win32api ;
      INTEGER nullpointer, ;
      STRING cwindow_name
   DECLARE INTEGER GetWindow ;
      IN win32api ;
      INTEGER ncurr_window_handle, ;
      INTEGER ndirection
   DECLARE INTEGER GetWindowText ;
      IN win32api ;
      INTEGER n_win_handle, ;
      STRING @ cwindow_title, ;
      INTEGER ntitle_length
   * End of API function declarations
   * Get handle for current application
   vfp_handle=findwindow(0,_SCREEN.CAPTION)
   * Store handle of current app to a variable
   ln_current_window=vfp_handle
   * Initialize a count variable used to dimension array of running apps
   ln_window_count=0
   DO WHILE ln_current_window>0
      *  Initialize variable to store application title
      lc_window_title=SPACE(255)
      * Call to GetWindowText to fetch window caption
      ln_length=getwindowtext(ln_current_window, ;
         @lc_window_title,LEN(lc_window_title))
      * Note that the lc_window_title variable is used as a buffer to
      * receive text from the call to GetWindowText
      IF ln_length>0
         lc_window_title=STRTRAN(TRIM(lc_window_title),CHR(0),"")
      ELSE
         lc_window_title=""
      ENDIF
      IF ln_current_window>0 .AND. !EMPTY(lc_window_title)
         * Increment the window count and re-dimension the array of running
         * applications
         ln_window_count=ln_window_count+1
         DIMENSION awin_apps(ln_window_count)
         awin_apps[ln_Window_Count]=lc_window_title
      ENDIF
      * Call to GetWindow to fetch handle of running applications.
      ln_current_window=getwindow(ln_current_window,2)
   ENDDO
   CREATE TABLE runapps (appname m)
   IF ALEN(awin_apps,1)>0
      SELECT runapps
      APPEND BLANK
      FOR i=1 TO ALEN(awin_apps,1)
         REPLACE appname WITH awin_apps[i]+CHR(13) ADDITIVE
      NEXT
   ENDIF
   MODIFY MEMO appname NOEDIT
				
The application stores the names of all executing applications in the memo field of the table Runapps.dbf.

Modification Type:MinorLast Reviewed:3/3/2005
Keywords:kbhowto KB188404