精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VFP>>〖外部引用〗>>防止程序复重加载

主题:防止程序复重加载
发信人: hunter__fox(雁回西楼)
整理人: hunter__fox(2002-03-16 21:48:54), 站内信件
    上一次,说到这一问题,我提出的解决办法是通过锁定本地表的方式来实现,现
在给出用API的解决办法。
    此段代码可用在系统和程序中。
    这是所用 WindowsAPI 的简介:
        FindWindow :通过标题内容寻找窗口
        GetClassNameA :通过对象句柄取得类名
        FindWindowExA :通过窗口类名遍历窗口
        GetWindowTextA :通过对象句柄取得对象标题


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 && 本程序的另外进程
      MessageBox("程序已经运行,不能重复加载!")
      Exit
   EndIf
EndDo

Release hWnd,cClassName,cWndTst,nWndTstLen




----
作者:hunter__fox雁回西楼
※ 来源: 网易虚拟社区 广州站.
※ 个人天地 流水情怀[ccbyy] 灌水精英 NO:003

※ 编程开发 VFP[VFP] 

[关闭][返回]