发信人: foxzz() 
整理人: foxzz(2002-12-22 08:33:22), 站内信件
 | 
 
 
Declare integer SendMessage in user32 ;
         integer, integer, integer, integer
 Declare Integer FindWindow IN USER32.DLL AS FindWindow ;  
         String,String  
 Declare Integer GetClassNameA In user32.Dll As GetClassName ;  
         Integer,String @,Integer @  
 Declare Integer FindWindowExA In user32.Dll As FindWindowEx ;  
         Integer,Integer,String,String  
 Declare Integer GetWindowTextA In user32.Dll As GetWindowText ;  
         Integer,String @,Integer @  
 
 Local hWnd,hWnd2  
 Local cClassName,nClassNameLen  
 Local cWndTst,nWndTstLen  
 && 取得窗口类名  
 hWnd = FindWindow(0,_screen.Caption)  
 cClassName = Space(256)  
 nClassNameLen = GetClassName(hWnd,@cClassName,255)  
 cClassName = Left(cClassName,nClassNameLen)  
 
 Release nClassNameLen  
 && 开始遍历窗口  
 hWnd2 = 0  
 Do While .T.  
    hWnd2 = FindWindowEx(0,hWnd2,cClassName,0)  
    cWndTst = Space(256)  
    nWndTstLen = GetWindowText(hWnd2,@ cWndTst,255)  
    If hWnd2 = 0 && 遍历完毕  
       Exit  
    EndIf  
    If nWndTstLen = 0 && 无标题窗口----一个VFP程序运行时,系统中有多个这样的窗口  
       Loop  
    EndIf  
 
    cWndTst = Left(cWndTst,nWndTstLen)  
    If Not hWnd = hWnd2 && 本程序的另外进程  
       = ShowWindowAsync(hwnd2, 1)
       = SetForegroundWindow(hwnd2)
       && MessageBox("程序已经运行,不能重复加载!")  
       quit
       Exit  
    EndIf  
 EndDo  
 
 Release hWnd,cClassName,cWndTst,nWndTstLen  
 
 
 
 
  | 
 
 
 |