سوال

شروع موضوع توسط hichkas021 ‏3 مارس 2007 در انجمن Visual Basic 6

  1. hichkas021

    hichkas021 Registered User

    تاریخ عضویت:
    ‏7 می 2006
    نوشته ها:
    189
    تشکر شده:
    0
    محل سکونت:
    No Where
    می خواستم ببینم می شه برنامه رو با vb از لیست processes از توی task manager حذف کرد؟
    اگه می شه ، چطوری می شه؟:happy:
     
  2. خدمات پی پالبازدیدیار - افزایش بازدید سایت و سیگنال های برند
  3. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    سلام
    خوب هستيد
    بله ميشه براي اين كار شما بايد task mager رو hijack كنيد يعني بيان و هندل پنجره تكس منيجرو بدست بياوريد و بعد هندل list view ان را استخراج كرده و بعد كلوم مورد نظرتون رو پاك كنيد

    اميدوارم كمك كنه
     
  4. Mojgan110

    Mojgan110 کاربر تازه وارد

    تاریخ عضویت:
    ‏5 مارس 2006
    نوشته ها:
    240
    تشکر شده:
    12
    محل سکونت:
    www.DotNetSource.com
    کد:
    Option Explicit
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lparam As Any) As Long
    Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
    
    Private Const SW_SHOWNORMAL = 1
    Private Const SW_SHOWMAXIMIZED = 3
    
    
    '**************************************************************
    '* Function: Checks to see is specified app is running, if    *
    '*           not, will start application if specified.        *
    '*                                                            *
    '*                                                            *
    '* Usage: IsAppRunning("<app title>", "<app path to launch>") *
    '**************************************************************
    
    Private Declare Function PostMessage Lib "user32" Alias _
                    "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
                    ByVal wParam As Long, lparam As Any) As Long
    
    Private Const WM_CLOSE = &H10
    Private Const GWL_STYLE = (-16)
    Private Const WS_DISABLED = &H8000000
    
    Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessId As Long, ByVal dwType As Long) As Long
    Private Const RSP_SIMPLE_SERVICE = 1
    Private Const RSP_UNREGISTER_SERVICE = 0
    
    Private AppRunning As Boolean
    
    '**************************************************************
    '* Function: Checks to see is specified app is running, if    *
    '*           it is, it will close it.                         *
    '*                                                            *
    '*                                                            *
    '* Usage: EndTask("<app title>")                              *
    '**************************************************************
    
    Private Declare Function IsWindow Lib "user32" (ByVal hwnd As Long) As Long
    
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
        ByVal hwnd As Long, _
        ByVal nIndex As Long) As Long
    
    
    Private Const PROCESS_ALL_ACCESS = &H1F0FFF
    
    Private Declare Function OpenProcess Lib "kernel32" _
      (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
       ByVal dwProcessId As Long) As Long
    
    Private Declare Function GetExitCodeProcess Lib "kernel32" _
       (ByVal hProcess As Long, lpExitCode As Long) As Long
    
    Private Declare Function TerminateProcess Lib "kernel32" _
       (ByVal hProcess 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 * 260
    End Type
    
    Private Type OSVERSIONINFO
      dwOSVersionInfoSize As Long
      dwMajorVersion As Long
      dwMinorVersion As Long
      dwBuildNumber As Long
      dwPlatformId As Long
      szCSDVersion As String * 128
    End Type
    
    Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
    Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
    Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
    Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
    Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
    Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
    Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
    Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
    
    Private Const PROCESS_TERMINATE = &H1
    Private Const VER_PLATFORM_WIN32_WINDOWS = 1
    Private Const PROCESS_QUERY_INFORMATION = 1024
    Private Const PROCESS_VM_READ = 16
    Private Const TH32CS_SNAPPROCESS = &H2
    Private EXEName As String
    Private EXEAVG As String
    
    Private Function GetEXEProcessID(ByVal sEXE As String) As Long
      Dim aPID() As Long
      Dim lProcesses As Long
      Dim lProcess As Long
      Dim lModule As Long
      Dim sName As String
      Dim iIndex As Integer
      Dim bCopied As Long
      Dim lSnapShot As Long
      Dim tPE As PROCESSENTRY32
      Dim bDone As Boolean
      Dim lRet As Long
      
      If CheckVersion() = VER_PLATFORM_WIN32_WINDOWS Then
        'Windows 9x
        'Create a SnapShot of the Currently Running Processes
        lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
        If lSnapShot < 0 Then Exit Function
        tPE.dwSize = Len(tPE)
        'Buffer the First Processes Info..
        bCopied = Process32First(lSnapShot, tPE)
        Do While bCopied
          'While there are Processes List them..
          sName = Left$(tPE.szExeFile, InStr(tPE.szExeFile, Chr(0)) - 1)
          sName = Mid(sName, InStrRev(sName, "\") + 1)
          If InStr(sName, Chr(0)) Then
            sName = Left(sName, InStr(sName, Chr(0)) - 1)
          End If
          bCopied = Process32Next(lSnapShot, tPE)
          If StrComp(sEXE, sName, vbTextCompare) = 0 Then
            GetEXEProcessID = tPE.th32ProcessID
            Exit Do
          End If
        Loop
        
      Else
        'Windows NT
        'The EnumProcesses Function doesn't indicate how many Process there are,
        'so you need to pass a large array and trim off the empty elements
        'as cbNeeded will return the no. of Processes copied.
        ReDim aPID(255)
        Call EnumProcesses(aPID(0), 1024, lProcesses)
        lProcesses = lProcesses / 4
        ReDim Preserve aPID(lProcesses)
        
        For iIndex = 0 To lProcesses - 1
          'Get the Process Handle, by Opening the Process
          lProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, aPID(iIndex))
          If lProcess Then
            'Just get the First Module, all we need is the Handle to get
            'the Filename..
            If EnumProcessModules(lProcess, lModule, 4, 0&) Then
              sName = Space(260)
              Call GetModuleFileNameExA(lProcess, lModule, sName, Len(sName))
              If InStr(sName, "\") > 0 Then
                sName = Mid(sName, InStrRev(sName, "\") + 1)
              End If
              If InStr(sName, Chr(0)) Then
                sName = Left(sName, InStr(sName, Chr(0)) - 1)
              End If
              If StrComp(sEXE, sName, vbTextCompare) = 0 Then
                GetEXEProcessID = aPID(iIndex)
                bDone = True
              End If
            End If
            'Close the Process Handle
            lRet = CloseHandle(lProcess)
            If bDone Then Exit For
          End If
        Next
      End If
    End Function
    
    Private Function TerminateEXE(ByVal sEXE As String) As Boolean
      Dim lPID As Long
      Dim lProcess As Long
      
      lPID = GetEXEProcessID(sEXE)
      If lPID = 0 Then Exit Function
      lProcess = OpenProcess(PROCESS_TERMINATE, 0, lPID)
      Call TerminateProcess(lProcess, 0&)
      Call CloseHandle(lProcess)
      
      TerminateEXE = True
    End Function
    
    Private Function EndShelledProcess(ShellReturnValue As Long) _
       As Boolean
    
    'PURPOSE: End a process started with VB's Shell Statement
    'INPUT: Task ID returned by Shell
    'RETURNS: True if succesful, false otherwise
    
    On Error Resume Next
    
    Dim hInst As Long
    Dim hProcess As Long
    Dim lExitCode As Long
    Dim lRet As Long
    
    hInst = ShellReturnValue
    If hInst = 0 Then Exit Function
    
    'Get handle to process
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0&, hInst)
    If hProcess <> 0 Then
        'get exit code
        GetExitCodeProcess hProcess, lExitCode
            If lExitCode <> 0 Then
                    'bye-bye
                lRet = TerminateProcess(hProcess, lExitCode)
                EndShelledProcess = lRet > 0
            End If
    End If
    
    End Function
    
    Private Function EndTask(sWindowName As String) As Integer
        Dim x As Long, ReturnVal As Long, TargetHwnd As Long
        
        'Find handle of the application
        TargetHwnd = FindWindow(0&, sWindowName)
        'MsgBox sWindowName
        If TargetHwnd = 0 Then Exit Function
    
        If IsWindow(TargetHwnd) = False Then
            GoTo EndTaskFail
        Else
        'Close application
            If Not (GetWindowLong(TargetHwnd, GWL_STYLE) And WS_DISABLED) Then
                x = PostMessage(TargetHwnd, WM_QUIT, 0, 0&)
                DoEvents
            End If
        End If
    
        GoTo EndTaskSucceed
    
    EndTaskFail:
        ReturnVal = False
        MsgBox "EndTask: cannot terminate " & sWindowName & " task"
        GoTo EndTaskEndSub
    
    EndTaskSucceed:
        ReturnVal = True
    
    EndTaskEndSub:
        EndTask% = ReturnVal
    End Function
    
    Private Function CheckVersion() As Long
      Dim tOS As OSVERSIONINFO
      tOS.dwOSVersionInfoSize = Len(tOS)
      Call GetVersionEx(tOS)
      CheckVersion = tOS.dwPlatformId
    End Function
    
    Private Sub Command2_Click()
     TerminateEXE EXEName
    End Sub
    
    Private Sub Command1_Click()
    'might have to click twice.
    
    EXEName = "Notepad.exe"
    WinExec "notepad.exe", 1
    End Sub
     
  5. Mojgan110

    Mojgan110 کاربر تازه وارد

    تاریخ عضویت:
    ‏5 مارس 2006
    نوشته ها:
    240
    تشکر شده:
    12
    محل سکونت:
    www.DotNetSource.com
    اگه از قبل بدونيم چه پراسسي را ميخواين بكشيم ، يعني اسمش رو بدونيم

    مثلا اينجا اسمشو hl گذاشته بالفرض

    کد:
    Dim strComputer As String
    Dim objprocess, objWMIService, colProcessList As Object
    
    Private Sub Form_Unload(Cancel As Integer)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'hl.exe'")
    
    For Each objprocess In colProcessList
    objprocess.Terminate
    Next
    End Sub
     
  6. Mojgan110

    Mojgan110 کاربر تازه وارد

    تاریخ عضویت:
    ‏5 مارس 2006
    نوشته ها:
    240
    تشکر شده:
    12
    محل سکونت:
    www.DotNetSource.com
  7. hichkas021

    hichkas021 Registered User

    تاریخ عضویت:
    ‏7 می 2006
    نوشته ها:
    189
    تشکر شده:
    0
    محل سکونت:
    No Where
    خیلی ممنون از راهنماییتون.
    می خواستم بدونم برای حذف یک سطر از list view از چه توابعی باید استفاده کنم ؟
     
  8. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,435
    تشکر شده:
    1,463
    محل سکونت:
    یه خورده اونورتر
    کد:
     
    ListView1.ListItems.Remove 
    
     
  9. m3hrz4d

    m3hrz4d Registered User

    تاریخ عضویت:
    ‏21 سپتامبر 2005
    نوشته ها:
    620
    تشکر شده:
    1
    محل سکونت:
    اصفهان
    balabala جان ظاهرا این دوستمون برای ListView ی خارج از برنامه میخواد.

    اون روشی که من بلدم اصولش اینه:
    شما باید اول هندل ِ ListView رو به هر طریقی به دست بیاری.
    بعد با استفاده از تابع ای پی آی SendMessage و ارسال پیغام ها متعدد LVM_GETITEMTEXT و گرفتن متن هر آیتم ,ایندکس آیتم مورد نظر رو پیدا کنی
    و بعد با پیغام LVM_DELETEITEM آیتم مورد نظر رو حذف کنی.
    منتها من یکبار این رو واسه ListView ی TaskManager تست کردم توی حذف آیتم یه مشکلی بود اما درست یادم نیست...
     
  10. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,435
    تشکر شده:
    1,463
    محل سکونت:
    یه خورده اونورتر
    اوه راست میگی :blush:
    تقریبا همونی هست که plus گفت. اینجوری میشه:
    کد:
     
    Const LVM_FIRST = &H1000
    Const LVM_DELETEITEM = (LVM_FIRST + 8)
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
     
    Function DeleteItem(Index As Long) As Boolean
    DeleteItem = SendMessage(m_Handler, LVM_DELETEITEM, ByVal Index, 0)
    End Function
    
    البته همونطور که plus گفت باید هندلر لیست ویو (اینجا m_Handler ) رو بگیری. هندلر خوده لیست ویو نه پرنتش رو.
     
  11. cracki

    cracki Registered User

    تاریخ عضویت:
    ‏23 مارس 2004
    نوشته ها:
    672
    تشکر شده:
    23
    چطوري مي شه هندل ليست ويو رو در آورد؟ مشتاقم بدونم !
     
  12. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,435
    تشکر شده:
    1,463
    محل سکونت:
    یه خورده اونورتر
    اگر با CreateWindow میسازید که خودش برمیگردونه. اگر از کنترل listview استفاده میکنید که hwndش هست وگرنه میشه با WindowFromDC یا Enum کردن کل پنجره ها و رسیدن به listview اونرو گرفت.
    کلا بستگی داره که کجا باشه :}
     
  13. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    سلام حوب هستيد شما براي اين كار همانطور كه بلا بلا گفت بايد هندل پنجره رو پيدا كنيد يك راهش همان enum هست كه يك ذره مشكل داره چون براي بدست اوردن كلوم مورد نظر شما نميتويد از حافظه معمولي استفاده كنيد چون حافظه شما بصورت شير با برنامه مرود نظر نيست در نتيجه وقتي داريد سعي ميكند ايندكس اون را بر اساس نوشتش در بياريد بايد يك بافري براي گرفتن اسم هر سطر به تابع getwindowtexta يا getdlgitemtexta يا با استفاده از sendmessgae اختصاص بديد و از انجايي كه اين بافر بافر برنامه حودتونه در نتيجه اين توابع با مشكل بر ميخورتد و جواب نمي دهند ( فكر كنم دستمون plus هم به همين مشكل بر خورده بود ) براي حل اين مشكل بايد با استفاده از openproccess بيان و پروسس مورد نظر رو باز كنيد و سپس با استفاده از تابع VirtualAllocEx يك بافر درون خود حافظه برنامه با قابليت شير بسازيد و ....
    سپس متن مورد نظر تون رو پيدا بدست اورده و ادامه ماجرا

    براي بدست اوردن هندل برنامه ها ميتونيد از برنامه the customiser و يا برنامه PAT or JK's API SPY 5.0 براي جنريت كد ها توي وي بي براي پيدا كردن پنجره ها و هندلاشون استفاده كنيد

    اگه دوست داريد بگيد تا يك آموزش در موردش بنويسيم

    به اميد ديدار
     
  14. cracki

    cracki Registered User

    تاریخ عضویت:
    ‏23 مارس 2004
    نوشته ها:
    672
    تشکر شده:
    23
    روش خيلي خوبيه. ممنونم
    با اين روش به نظرم بشه كاراي خاصي كرد كه گاهي حسابي به كمك مياد
    سعيد جان من واقعا ممنون مي شم اگه يه آموزش براش بنويسي
     
  15. m3hrz4d

    m3hrz4d Registered User

    تاریخ عضویت:
    ‏21 سپتامبر 2005
    نوشته ها:
    620
    تشکر شده:
    1
    محل سکونت:
    اصفهان
    خیلی عالی بود.ممنون
     
  16. hichkas021

    hichkas021 Registered User

    تاریخ عضویت:
    ‏7 می 2006
    نوشته ها:
    189
    تشکر شده:
    0
    محل سکونت:
    No Where
    میشه یک کم بیشتر توضیح بدی ؟:eek:
     
عسل طبیعی و گرده گل ایرانی