| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖
标题:请问怎样判断表单FRM1是否打开?
只看楼主 加入收藏
davyxjc
Rank: 2
等 级:论坛游民
帖 子:130
专家分:76
注 册:2009-6-30
结帖率:70.37%
收藏
 问题点数:0 回复次数:4 
请问怎样判断表单FRM1是否打开?
退出系统时,请问怎样判断表单FRM1是否打开?如果打开,就要关闭。
搜索更多相关主题的帖子: 表单 
2011-05-09 17:44
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
不管打没有打开,加上一句Unload FRM1就可以!

   唯实惟新 至诚致志
2011-05-09 19:51
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
暴力法

在程序最后一行加上
    Call KillProcess("您执行档名称.EXE")


Module1
程序代码:
'Kill Process
Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwFlags As Long
    szexeFile As String * 260
End Type

Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long
Declare Function ProcessFirst Lib "kernel32.dll" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function ProcessNext Lib "kernel32.dll" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function CreateToolhelpSnapshot Lib "kernel32.dll" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Declare Function TerminateProcess Lib "kernel32.dll" (ByVal ApphProcess As Long, ByVal uExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

Public Function KillProcess(NameProcess As String)

Const PROCESS_ALL_ACCESS = &H1F0FFF
Const TH32CS_SNAPPROCESS As Long = 2&

Dim uProcess  As PROCESSENTRY32
Dim RProcessFound As Long
Dim hSnapshot As Long
Dim SzExename As String
Dim ExitCode As Long
Dim MyProcess As Long
Dim AppKill As Boolean
Dim AppCount As Integer
Dim i As Integer
Dim WinDirEnv As String
        
       If NameProcess <> "" Then
          AppCount = 0

          uProcess.dwSize = Len(uProcess)
          hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
          RProcessFound = ProcessFirst(hSnapshot, uProcess)
  
          Do
            i = InStr(1, uProcess.szexeFile, Chr(0))
            SzExename = LCase$(Left$(uProcess.szexeFile, i - 1))
            WinDirEnv = Environ("Windir") + "\"
            WinDirEnv = LCase$(WinDirEnv)
        
            If Right$(SzExename, Len(NameProcess)) = LCase$(NameProcess) Then
               AppCount = AppCount + 1
               MyProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)
               AppKill = TerminateProcess(MyProcess, ExitCode)
               Call CloseHandle(MyProcess)
            End If
            RProcessFound = ProcessNext(hSnapshot, uProcess)
            
          Loop While RProcessFound
          
          Call CloseHandle(hSnapshot)
          
       End If
End Function


这会让你相同执行档Process~一率砍~砍光光~

Sorry~贴错程序~

[ 本帖最后由 wube 于 2011-5-9 22:21 编辑 ]

不要選我當版主
2011-05-09 22:19
davyxjc
Rank: 2
等 级:论坛游民
帖 子:130
专家分:76
注 册:2009-6-30
收藏
得分:0 
没有人知道吗?
2011-05-16 11:01
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
VB里有一个 FORMS 对象,
这个对象,对应着程序里打开的所有的窗体对象。

遍类这个对象,然后判断名字,或者什么特殊属性,都可以确定 FORM1 是否打开。

如果,你 每个窗体 都定义这么一个变量。
dim FORML as long              '在所有的过程之前定义。
这种定义的变量,就相当于窗体的一个属性,为了移植性,不建议使用 TAG 属性。

然后在窗体载入过程中,如 FORM1 中就写到 ,
FORML=1                        '代表本窗体是 FORM1 。不怕 窗体改名字。
其它不需要判断的窗体,就不需要写,或者写 =0

那么在程序退出的代码中,
for i=0 to forms.count-1
   if forms(i).Forml=1 then
        'FORMS(i) 即为打开了的 FORM1,加以处理。
   end if
next i

自己加个变量,比使用窗体的名字判断要好一些。比使用 TAG 属性也要好。

不知你看懂了没有,自己测试一下就是了。

这种方法不会漏掉任何打开的 FROM1 ,包括误操作导致 的 隐藏加载情况。

-------------------------------------------
还有一种方法是,记录每个打开窗体的 HWND 值,退出时,针对当前打开的窗体来查找 HWND 值,如果发现是打开的 FORM1 窗体,再处理。
这种方法,可以排除 误操作导致 FROM1 被隐藏加载然后又被处理的情况,只会处理 手机打开的 FORM1 窗体(要求记录 HWND值 )。

授人于鱼,不如授人于渔
早已停用QQ了
2011-05-16 13:30
快速回复:请问怎样判断表单FRM1是否打开?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018319 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved