2011-04-28 46 views

回答

0

这是一个杀死特定程序的所有可见实例的函数。你需要知道它的ClassName。我已经能够通过搜索找到常见的应用(如Office应用程序)的类名:

FUNCTION KillApp 
*============================================================================== 
* Program:    KillApp.PRG 
* Purpose:    Close any invisible instances of a specified program 
* Author:    Tamar E. Granor 
* Last revision:   04/16/02 
* Parameters:   tcClassName - the classname of the app to close 
* Returns:    Number of instances closed; -1, if parameter problems 
* Environment in:  
* Environment out:  Several API functions declared 
*============================================================================== 
#DEFINE GW_CHILD 5 
#DEFINE GW_HWNDNEXT 2 
#DEFINE WM_CLOSE 0x10 

LPARAMETERS tcClassName 

ASSERT VARTYPE(tcClassName) = "C" AND NOT EMPTY(tcClassName) ; 
    MESSAGE "KillApp: Must pass class name of application to kill" 

IF VARTYPE(tcClassName) <> "C" OR EMPTY(tcClassName) 
    ERROR 11 
    RETURN -1 
ENDIF 

DECLARE LONG GetDesktopWindow IN WIN32API 
DECLARE LONG GetWindow IN WIN32API LONG hWnd, LONG wCmd 
DECLARE LONG IsWindowVisible IN WIN32API LONG hWnd 
DECLARE LONG GetClassName IN WIN32API LONG hWnd, STRING lpClassName, LONG nMaxCount 
DECLARE LONG PostMessage IN WIN32API LONG hwnd, LONG wMsg, LONG wParam, LONG lParam 

LOCAL lnDesktopHWnd, lnHWnd, lnOldHWnd, lcClass, lnLen, nClosedCount 

lnDesktopHWnd = GetDesktopWindow() 
lnHWnd = GetWindow(lnDesktopHWnd, GW_CHILD) 
lnClosedCount = 0 

DO WHILE lnHWnd <> 0 
    lcClass = SPACE(256) 
    lnLen = GetClassName(lnHWnd, @lcClass, 256) 
    lnOldHWnd = lnHWnd 
    lnHWnd = GetWindow(lnOldHWnd, GW_HWNDNEXT) 
    IF UPPER(LEFT(lcClass, lnLen)) = UPPER(tcClassName) 
     lnVisible = IsWindowVisible(lnOldHWnd) 
     IF lnVisible = 0 
      PostMessage(lnOldHWnd, WM_CLOSE, 0, 0) 
      lnClosedCount = lnClosedCount + 1 
     ENDIF 
    ENDIF 
ENDDO 

RETURN lnClosedCount 

刚刚意识到的过程可能不一样的应用程序。它看起来像查找过程的API函数是EnumProcesses。检出http://www.news2news.com/vfp/?group=-1&function=246

添马舰

+0

非常好的添马舰。我能够调整你的代码,简单地给我一个正在运行的进程的游标(和一个集合)。我只是想看看机器上运行的是什么,不一定会杀死任何东西。我改编的代码在这里http://codepaste.net/1enkjz – MattSlay 2016-10-17 16:47:54