Hi Ken,

> I've never seen an example of code that could find a running process and
terminate it without relying on the window title search. 

If you store _VFP.ProcessID at program start in some file, you can use the
following code to terminate the process. Just replace _VFP.ProcessID with
the handle read from that file:

 Local lnHandle
 Declare Long OpenProcess in Win32API ;
        Long dwDesiredAccess, ;
        Long bInheritHandle, ;
        Long dwProcessId
 Declare TerminateProcess in Win32API ;
        Long hProcess, ;
        Long uExitCode
 lnHandle = OpenProcess( 1, 0, _VFP.ProcessID )
 TerminateProcess( m.lnHandle, 1 )

If you need to do this based on the EXE name on all platforms including
Windows NT 4, it's a little bit more work. Here's an article with C++ code
to do this:

http://www.codeproject.com/threads/killprocess.asp

You need to slightly modify this as it uses a callback function. Here's my
code of one part that is in there that creates the list of all running
processes. It uses my struct class
(http://www.foxpert.com/download/struct.zip). This code doesn't work on
Windows NT 4 and Windows 3.x. You can modify it to also return the process
ID in the array.

*=====================================================
* AProcess.PRG
*
* Returns a list of all running EXE files
*=====================================================
LParameter tacProcess

        External Array tacProcess

        *--------------------------------------------------
        * Declare WIN-API functions
        *--------------------------------------------------
        Declare Integer CreateToolhelp32Snapshot In win32api Integer,
Integer
        Declare Integer CloseHandle In WIn32Api Integer
        Declare Integer Process32First In WIn32APi Integer, String@
        Declare Integer Process32Next In WIn32APi Integer, String@

        *--------------------------------------------------
        * load struct component
        *--------------------------------------------------
        Local oProcessEntry
        Set Class to Struct.VCX Additive
        oProcessEntry = CreateObject("PROCESSENTRY32")

        *--------------------------------------------------
        * get processes
        *--------------------------------------------------
        Local lnHandle, lnCount, lnRet, lcString, lcStringEmpty
        lnCount = 0
        lnHandle = CreateToolhelp32Snapshot(2,0)
        lcStringEmpty = oProcessEntry.GetString()
        If lnHandle > 0
                lcString = m.lcStringEmpty
                lnRet = Process32First(lnHandle,@lcString)
                oProcessEntry.SetString(lcString)
                Do While lnRet > 0
                        lnCount = lnCount+1
                        Dimension tacProcess[lnCount]
                        tacProcess[lnCount] = oProcessEntry.cExeFile
                        lcString = m.lcStringEmpty
                        lnRet = Process32Next(lnHandle,@lcString)
                        oProcessEntry.SetString(lcString)
                Enddo
                CloseHandle(lnHandle)
        Endif
        
        *--------------------------------------------------
        * cleanup
        *--------------------------------------------------
        oProcessEntry.Release   

Return lnCount

*-----------------------------------------------------
* PROCESSENTRY32 Struktur
*-----------------------------------------------------
Define Class PROCESSENTRY32 as Struct
        nSize = 296
        nCntUsage = 0
        nProcessID = 0
        nDefaultHeap = 0
        nModuleID = 0
        nCntThreads = 0
        nParentProcessID = 0
        nPriClassBase = 0
        nFlags = 0
        cExeFile = ""
        cMembers = "l:nSize,l:nCntUsage,l:nProcessId,"+;
                "l:nDefaultHeap,l:nModuleID,l:nCntThreads,"+;
                "l:nParentProcessID,L:nPriClassbase,"+;
                "l:nFlags,0c260:cExeFile"
Enddefine


-- 
Christof



_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/profox
OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech
Searchable Archive: http://leafe.com/archives/search/profox
This message: http://leafe.com/archives/byMID/profox/[EMAIL PROTECTED]
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to