ايران ويج

نسخه‌ی کامل: بستن یک پنجره در vb
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام روز همگی بخیر.


توی یک پروژه ویژوال بیسیک وقتی روی یک دکمه کلیک می کنم با دستور shell یک نرم افزار مثلا ورد یا اکسل اجرا می شه.

می خواهم کاری کنم اگر روی یک دکمه دیگه کلیک کردم از ورد یا اکسل اجرا شده خارج بشه و پنجره مربوطه رو ببنده.

ممنون میشم اگه منو راهنمایی بفرمایید.
دوست عزيز
اجرا برنامه هاي ديگه از داخل برنامه شما به صورت شل كار چندان درستي نيست ،‌بهتره اگه با ورد كاري داريد اون روبه صورت ابجكت باز كرده و كارهاي مربوطه رو انجام بديد

به هر صورت براي بستن برنامه ايي ديگه از داخل برنامه خودتون مي تونيد يك ماژول ايجاد كرده و كدهاي زير رو داخلش قرار بديد :

کد php:
''-----------------------------------------For Delete From TaskManager
Private Const MAX_PATH As Long 260
Private Const TH32CS_SNAPPROCESS = &H2&
Private Const 
PROCESS_QUERY_INFORMATION As Long = (&H400)
Private Const 
PROCESS_TERMINATE As Long = (&H1)

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 Type

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" (ByVal dwFlags As LongByVal th32ProcessID As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As LongByVal lProcessID As Long) As Long

Private Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As LongByRef lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As LongByRef lppe As PROCESSENTRY32) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As LonguProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As LonguProcess As PROCESSENTRY32) As Long

Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As LongByVal bInheritHandle As LongByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess As LongByVal uExitCode As Long) As Long


Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32.dll" (ByVal hProcess As LongByRef lpExitCode As Long) As Long


Sub KillProcess
(ByVal sExeName As String)
Dim lSnapshot As LonglNextProcess As Long
Dim tPE 
As PROCESSENTRY32

    
' Create Snapshot
    lSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
    If lSnapshot <> -1 Then
        tPE.dwSize = LenB(tPE)
        ' 
Find first process
        lNextProcess 
Process32First(lSnapshottPE)
 
       Do While lNextProcess
            
' Find specified process
            If UCase(sExeName) = UCase(Left(tPE.szExeFile, Len(sExeName))) And Len(sExeName) > 0 Then
                Dim lProcess As Long
                Dim lExitCode As Long
                                  
                ' 
Open Process
                lProcess 
OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_TERMINATEFalsetPE.th32ProcessID)
 
               ' Get Exitcode
                GetExitCodeProcess lProcess, lExitCode
                ' 
Terminate Process
                TerminateProcess lProcess
lExitCode
                
' Close Handle
                CloseHandle (lProcess)
                Exit Do
            End If
            lNextProcess = Process32Next(lSnapshot, tPE)
        Loop
        ' 
Close Handle
        CloseHandle 
(lProcess)
 
   End If
End Sub

Sub TaskManager
(ProgramName As String)
 
   Dim nStr As String
    Dim hSnapshot 
As Long
    Dim uProcess 
As PROCESSENTRY32
    Dim r 
As Long
    
    hSnapshot 
CreateToolhelpSnapshot(TH32CS_SNAPPROCESS0&)
 
   
    If hSnapshot 
0 Then Exit Sub
    
    uProcess
.dwSize Len(uProcess)
 
   
    r 
ProcessFirst(hSnapshotuProcess)
 
   
    Do 
While r
    
    nStr 
uProcess.szExeFile
    If UCase
(Left(UCase(nStr), Len(ProgramName))) = UCase(ProgramNameThen
       KillProcess 
(ProgramName)
 
   End If
 
    r ProcessNext(hSnapshotuProcess)
 
   
    Loop 
' Do all the processs
End Sub

Function FindManager(ProgramName As String) As Boolean
    Dim nStr As String
    Dim hSnapshot As Long
    Dim uProcess As PROCESSENTRY32
    Dim r As Long
    
    FindManager = False
    hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
    
    If hSnapshot = 0 Then Exit Function
    
    uProcess.dwSize = Len(uProcess)
    
    r = ProcessFirst(hSnapshot, uProcess)
    
    Do While r
    
    nStr = uProcess.szExeFile
    If UCase(Left(UCase(nStr), Len(ProgramName))) = UCase(ProgramName) Then
       FindManager = True
    End If
     r = ProcessNext(hSnapshot, uProcess)
    
    Loop ' 
Do all the processs
End 
Function 
و بعد هرجا كه خواستيد از تابع زير استفاده كنيد :

کد:
KillProcess ("winword.exe")


اميدوارم كمك كنه