第一个问题用SHELL“文件名”来实现
第二个太麻烦,要用API取得句柄,再用SENDMESSAGE来关闭它

解决方案 »

  1.   

    第一个问题GetWindowPos(白痴) 已经解决,感谢,
    第二问题:vb怎样kill一个进程,就像在结束任务里结束一个进程一样,知道进程映像名称(sw_magik.exe)。
      

  2.   

    Private Declare Function WaitForSingleObject Lib "Kernel32" _
       (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Declare Function CloseHandle Lib "Kernel32" _
       (ByVal hObject 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 Const SYNCHRONIZE = &H100000Dim iTask as string
    Dim pHandle as long
    iTask=shell("batchName",vbhide)
    pHandle = OpenProcess(SYNCHRONIZE, False, iTask)
    ret = WaitForSingleObject(pHandle, INFINITE)
    ret = CloseHandle(pHandle)
      

  3.   

    作者补充:我是想用VB杀死一个其他程序的进程,进程映象名称SWMAGIK.EXE
    ,只要杀死就行,应该简单吧
      

  4.   

    Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As LonghProcess Long,指定要中断的一个进程的句柄 
    uExitCode Long,进程的一个退出代码 
      

  5.   

    你启动应用程序的方式不太好其实最好用
    Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long启动一个进程lpApplicationName String,要执行的应用程序的名字。可设为vbNullString;在这种情况下,应用程序的名字应在lpCommandLine参数的起始处出现 
    lpCommandLine String,要执行的命令行。可用GetCommandLine函数取得一个进程使用的命令行。Windows会尽可能地根据下述搜索顺序来查找执行文件:
      (1)包含了父进程执行文件的目录
      (2)父进程当前的目录
      (3)由GetSystemDirectory返回的系统目录
      (4)仅适于windows NT:16位系统目录
      (5)由GetWindowDirectory返回的Windows目录
      (6)由PATH环境变量指定的目录 
    lpProcessAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了进程的安全特性 
    lpThreadAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了进程之主线程的安全特性 
    bInheritHandles Long,TRUE表示允许当前进程中的所有句柄都由新建的子进程继承 
    dwCreationFlags Long,来自API32.TXT文件的一个或多个下述常数之一,它们都带有前缀CREATE_。下面这些用于VB程序员: 
    CREATE_SEPARATE_WOW_VDM(仅适用于NT) 启动一个16位的Windows应用程序时,强迫它在自己的内存空间运行 
    CREATE_SHARED_WOW_VDM(仅适用于NT) 启动一个16位的Windows应用程序时,强迫它在共享的16位虚拟机(VM)内运行 
    CREATE_SUSPENDED 立即挂起新进程。除非调用了ResumeThread函数函数,否则它不会恢复运行 
    也可能是下述常数之一,用于指定优先级 
    IDLE_PRIORITY_CLASS 新进程应该有非常低的优先级——只有在系统空闲的时候才能运行。基本值是4 
    HIGH_PRIORITY_CLASS 新进程有非常高的优先级,它优先于大多数应用程序。基本值是13。注意尽量避免采用这个优先级 
    NORMAL_PRIORITY_CLASS 标准优先级。如进程位于前台,则基本值是9;如在后台,则优先值是7 
    不要在VB中使用REALTIME_PRIORITY_CLASS 
    lpEnvironment Any,指向一个环境块的指针(环境缓冲区的头一个字符,或者环境块的地址) 
    lpCurrentDriectory String,新进程的当前目录路径。调用函数的时候,可用vbNullString指定当前目录 
    lpStartupInfo STARTUPINFO,指定一个STARTUPINFO结构,其中包含了创建进程时使用的附加信息 
    lpProcessInformation PROCESS_INFORMATION,该结构用于容纳新进程的进程和线程标识符。大多数情况下,一旦这个函数返回,父应用程序都会关闭两个句柄。 然后再用上面的办法关闭
      

  6.   

    者补充:我是想用VB杀死一个其他程序的进程,就像在任务管理器里结束任务一样结束一个进程,进程映象名称SWMAGIK.EXE
    ,只要杀死就行,应该简单吧
      

  7.   

    最后一招用FindWindow得到那个进程的主窗口句柄然后向那个句柄发送WM_CLOSE消息
      

  8.   

    作者补充:
    那个进程没有窗口,所以我才用结束进程,
    没有窗口能用WM_CLOSE 吗?