大哥们好,本人是公司网管,最近因公司同事们猛聊QQ。而被老板痛骂!本人想写一个监控的小程序,随电脑自动启动,当电脑一启动QQ程序,该监控程序就KILL掉QQ程序!!
请大哥们给个意见!!!

解决方案 »

  1.   

    搜索窗口句柄,如果找到句柄就向窗口发送关闭消息
    dim hwnd as long
    hwnd = FindWindow(your_fomr_classname, your_fomr_caption)
    if (hwnd <> 0)
      SendMessage(hwnd, WM_CLOSE, 0, 0)
    end if
      

  2.   

    枚举当前所有顶级窗口的类名.
    判断如果类名="#32770"的就KILL掉,这样就可以.
      

  3.   

    参考:
    显示进程、关闭进程 
    首先通过CreateToolhelp32Snapshot函数创建一个进程的快照,然后通过调用Process32First使用快照返回的句柄对进程进行遍历,相关的信息存放在PROCESSENTRY32结构类型的实例中,然后显示出来。 Winxp+vb6+sp6代码如下:Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As LongPrivate Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As LongPrivate Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _    ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, _    ByVal uExitCode As Long) As Long Private 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 * 1024End Type Const TH32CS_SNAPHEAPLIST = &H1Const TH32CS_SNAPPROCESS = &H2Const TH32CS_SNAPTHREAD = &H4Const TH32CS_SNAPMODULE = &H8Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)Const TH32CS_INHERIT = &H80000000'添加listview控件,3个按钮'删除listview中选定的进程Private Sub Command2_Click()    If MsgBox("你想删除 " & ListView1.SelectedItem.SubItems(2) & " 进程?", vbYesNo + vbQuestion) <> vbYes Then        Exit Sub    End If        Dim mProcID As Long    mProcID = OpenProcess(1&, -1&, ListView1.SelectedItem)    TerminateProcess mProcID, 0&    DoEvents    ListView1.ListItems.Remove (ListView1.SelectedItem.Index)    ListView1.RefreshEnd Sub'得到进程填充listviewPrivate Sub Command1_Click()  Dim my As PROCESSENTRY32  Dim l As Long  Dim l1 As Long  Dim mlistitem As ListItem  '  List1.Clear  l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)  If l Then    my.dwSize = 1060    If (Process32First(l, my)) Then '遍历第一个进程      Do       Set mlistitem = ListView1.ListItems.Add(, , my.th32ProcessID)             mlistitem.SubItems(1) = my.th32ParentProcessID             mlistitem.SubItems(2) = my.szExeFile      Loop Until (Process32Next(l, my) < 1) '遍历所有进程知道返回值为False    End If    l1 = CloseHandle(l)  End IfEnd Sub Private Sub Form_Load()    ListView1.ListItems.Clear    ListView1.ColumnHeaders.Clear    ListView1.FullRowSelect = True    ListView1.ColumnHeaders.Add , , "Process ID", 1500    ListView1.ColumnHeaders.Add , , "Process Parent ID", (1500)    ListView1.ColumnHeaders.Add , , "Name", (Me.Width - 3200)    ListView1.View = lvwReportEnd Sub '循环检测进程中是否有指定进程,如果有,关闭,如果没有,启动一个程序Private Sub Command3_Click()  Dim my As PROCESSENTRY32  Dim l As Long  Dim l1 As Long  Dim flag As Boolean  Dim mName As String  Dim i As Integer   l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)  If l Then    my.dwSize = 1060    If (Process32First(l, my)) Then '遍历第一个进程      Do             i = InStr(1, my.szExeFile, Chr(0))             mName = LCase(Left(my.szExeFile, i - 1))        If mName = "winword.exe" Then             PID = my.th32ProcessID             pname = mName             MsgBox "找到word"              If MsgBox("你想删除 " & mName & " 进程?", vbYesNo + vbQuestion) <> vbYes Then                    Exit Sub                End If                 Dim mProcID As Long             mProcID = OpenProcess(1&, -1&, PID)             TerminateProcess mProcID, 0&                          flag = True             Exit Sub         Else             flag = False         End If      Loop Until (Process32Next(l, my) < 1) '遍历所有进程知道返回值为False    End If    l1 = CloseHandle(l)  End If    If flag = False Then    MsgBox "没有找到word"    Shell "c:\Program Files\Microsoft Office\Office\WINWORD.EXE", vbNormalFocus  End IfEnd Sub
      

  4.   

    //本人想写一个监控的小程序,随电脑自动启动,当电脑一启动QQ程序,该监控程序就KILL掉QQ程序!!
    请大哥们给个意见!!!
    结束进程用TerminateProcess就可以了不过建议你从设置服务器的方面考虑一下(比如说封掉某个端口)
      

  5.   

    同意楼上意见你用程序强制不许QQ启动,但用户不可以把你的进程先关闭了呀,若你的程序被关闭了,那QQ不就可以继续启动了吗?建议关闭QQ的端口。具体如何操作,用Google搜一下,有N多的吧!
      

  6.   

    建议从端口入手,如果你们有同事也“很强”,会用什么代理,什么“通通通”软件的,那也没办法的啦,不过感觉聊QQ的一般没这水平吧,高手都用MSN了
    要不会个思路,把允许执行的程序列出来,别的就不能上了,有点象天网那样
      

  7.   

    你是网管,当然应该从你的代理服务器上想办法了,把qq的代理服务关掉,实现不行把UDP服务也关掉,你想给每一员工的电脑里都安装你做的的监控软件?那也太笨了吧,再说就算你装上了人家也可以删掉的,所以还是从服务器想办法吧
      

  8.   

    枚举窗口找到qq返回进程ID杀死进程