精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓..各种开发技巧..〓〓>>进程、线程和消息>>判断一个实例是否存在的技巧

主题:判断一个实例是否存在的技巧
发信人: gzwsh()
整理人: winsy(2003-03-05 16:35:20), 站内信件
在Form_Initialize事件中: 
FindWindow、OpenIcon为API函数,OpenIcon函数是将最小化的窗口还原 

Private Sub Form_Initialize() 
    Dim ret As Long,ret1 As Long 
    ret = FindWindow(vbNullString, "Form1") 
    If ret = 0 Then Exit Sub 
    ret1=IsIconic(ret) 
    If ret1<>0 Then 
        ret1 = OpenIcon(ret) 
    End If 
    AppActivate "Form1" 
    End 
End Sub 


这种方法与App对象中判断一个实例是否存在的方法有一点不同, 
App.PrevInstance判断是否存在一个实例,这是VB内建的对象, 
在某些应用时,就不及使用API灵活。 
例如,要激活已运行的一个实例时,一般可以使用 
AppActivate (Titel,[Wait]) 
但是,如果已运行的一个实例处于最小化状态时,这个方法就不 
行了,必须使用API将已运行的一个实例还原,这时,就需要获得 
已运行的一个实例的窗口的hWnd,所以在程序开始时,就不判断 
App.PrevInstance是否为真,而是改用FindWindow看看是否已运 
行了该程序的窗口,来判断是否存在一个实例。 
当然,这种方法,对于窗口标题经常会改变的程序,会有点问题, 
就是在FindWindow(vbNullString, "Form1")中,"Form1"经常 
改变,可能查找比较麻烦。FindWindow中的第一个参数改成类名的 
话,应该就可以解决这个问题,但是在VB中对于每个窗口的类名都 
是相同的,我想可以通过API改变窗口的类名,不过我就未试过成功, 
主要是对API还不太熟悉。

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.71.4]

[关闭][返回]