我做了个程序,其中有一部分需要把一个指定的3D网游强制关掉。我用的是先FindWindow,然后PostMessage WM_CLOSE信息的办法。可是这个3D网游在退出前有一提示框询问是否退出,我的程序一旦向这个网游发送WM_CLOSE,这个提示框就弹出。想问问各位有没有什么能将一个程序强制关掉(像在任务管理器里强制关掉一样),谢谢! 
  用的是VB6  
  用什么方法都可以,不过最好代码别太烦琐

解决方案 »

  1.   

    有个代码很少的办法
    你只要用自己的程序运行他然后运行command7就可以了Private Sub Command1_Click()
    a = Shell("calc.exe", 1)
    AppActivate a
    End SubPrivate Sub Command7_Click()
    itshandle = OpenProcess(1, -1, a)
    TerminateProcess itshandle, 0
    CloseHandle itshandle
    End Sub
      

  2.   

    如果不能用你的程序启动
    也可以用我下面的方法
    代码要多点Private Const MAX_PATH = 260
    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 * MAX_PATH
    End TypePrivate Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
    Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As Any) As Long
    Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As Any) As LongPrivate Const TH32CS_SNAPHEAPLIST = &H1
    Private Const TH32CS_SNAPPROCESS = &H2
    Private Const TH32CS_SNAPTHREAD = &H4
    Private Const TH32CS_SNAPMODULE = &H8
    Private Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST + TH32CS_SNAPPROCESS + TH32CS_SNAPTHREAD + TH32CS_SNAPMODULE)
    Private Const TH32CS_INHERIT = &H80000000
    'Terminate   Process   Functions
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Const PROCESS_ALL_ACCESS = 1'提升权限
    Private Const ANYSIZE_ARRAY = 1
    Private Const TOKEN_ADJUST_PRIVILEGES = &H20
    Private Const TOKEN_QUERY = &H8
    Private Const SE_PRIVILEGE_ENABLED = &H2
    Private Type LUID
        lowpart As Long
        highpart As Long
    End Type
    Private Type LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
    End Type
    Private Type TOKEN_PRIVILEGES
        PrivilegeCount As Long
        Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End Type
    Private Declare Function SetSystemPowerState Lib "kernel32" (ByVal fSuspend As Long, ByVal fForce As Long) As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
    Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
    Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As LongConst STANDARD_RIGHTS_REQUIRED = &HF0000
    Const TOKEN_ASSIGN_PRIMARY = &H1
    Const TOKEN_DUPLICATE = (&H2)
    Const TOKEN_IMPERSONATE = (&H4)Const TOKEN_QUERY_SOURCE = (&H10)Const TOKEN_ADJUST_GROUPS = (&H40)
    Const TOKEN_ADJUST_DEFAULT = (&H80)
    Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or _
                              TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or _
                              TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
    Private Sub Command1_Click()    '查找进程和终结进程
        Dim hSnapshot     As Long, lRet       As Long, P       As PROCESSENTRY32
        Dim exitCode     As Long
        Dim myProcess     As Long
        Dim AppKill     As Boolean    P.dwSize = Len(P)
        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, ByVal 0)
        If hSnapshot Then
            lRet = Process32First(hSnapshot, P)
            Do While lRet
                If InStr(P.szExeFile, "WINLOGON.EXE") <> 0 Then    '要关闭的程序在这里自己修改WINLOGON.EXE那个程序什么名字这里就是什么,但是要注意大小写
                    myProcess = OpenProcess(PROCESS_ALL_ACCESS, False, P.th32ProcessID)
                    AppKill = TerminateProcess(myProcess, exitCode)
                    Call CloseHandle(myProcess)
                End If
                lRet = Process32Next(hSnapshot, P)
            Loop
            lRet = CloseHandle(hSnapshot)
        End If
    End Sub
      

  3.   

    还是3楼的简洁,其实我的程序里早把目标程序的句柄找好了
    winHwnd = FindWindow(vbNullString, exetitle) 'exetitle应用程序的标题
    一句话就解决,但是这种方法不灵活,要是那种不是固定标题的程序就完了
    谢谢3楼