برگزیده های پرشین تولز

سوال

hichkas021

Registered User
تاریخ عضویت
7 می 2006
نوشته‌ها
190
لایک‌ها
0
محل سکونت
No Where
می خواستم ببینم می شه برنامه رو با vb از لیست processes از توی task manager حذف کرد؟
اگه می شه ، چطوری می شه؟:happy:
 

saeedsmk

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

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

Mojgan110

کاربر تازه وارد
تاریخ عضویت
5 مارس 2006
نوشته‌ها
243
لایک‌ها
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
 

Mojgan110

کاربر تازه وارد
تاریخ عضویت
5 مارس 2006
نوشته‌ها
243
لایک‌ها
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
 

hichkas021

Registered User
تاریخ عضویت
7 می 2006
نوشته‌ها
190
لایک‌ها
0
محل سکونت
No Where
سلام
خوب هستيد
بله ميشه براي اين كار شما بايد task mager رو hijack كنيد يعني بيان و هندل پنجره تكس منيجرو بدست بياوريد و بعد هندل list view ان را استخراج كرده و بعد كلوم مورد نظرتون رو پاك كنيد

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

خیلی ممنون از راهنماییتون.
می خواستم بدونم برای حذف یک سطر از list view از چه توابعی باید استفاده کنم ؟
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
کد:
ListView1.ListItems.Remove

balabala جان ظاهرا این دوستمون برای ListView ی خارج از برنامه میخواد.

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

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
balabala جان ظاهرا این دوستمون برای ListView ی خارج از برنامه میخواد.

اون روشی که من بلدم اصولش اینه:
شما باید اول هندل ِ ListView رو به هر طریقی به دست بیاری.
بعد با استفاده از تابع ای پی آی SendMessage و ارسال پیغام ها متعدد LVM_GETITEMTEXT و گرفتن متن هر آیتم ,ایندکس آیتم مورد نظر رو پیدا کنی
و بعد با پیغام LVM_DELETEITEM آیتم مورد نظر رو حذف کنی.
منتها من یکبار این رو واسه ListView ی TaskManager تست کردم توی حذف آیتم یه مشکلی بود اما درست یادم نیست...
اوه راست میگی :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 ) رو بگیری. هندلر خوده لیست ویو نه پرنتش رو.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
چطوري مي شه هندل ليست ويو رو در آورد؟ مشتاقم بدونم !
اگر با CreateWindow میسازید که خودش برمیگردونه. اگر از کنترل listview استفاده میکنید که hwndش هست وگرنه میشه با WindowFromDC یا Enum کردن کل پنجره ها و رسیدن به listview اونرو گرفت.
کلا بستگی داره که کجا باشه :}
 

saeedsmk

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

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

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

به اميد ديدار
 

cracki

Registered User
تاریخ عضویت
23 مارس 2004
نوشته‌ها
672
لایک‌ها
23
سن
38
روش خيلي خوبيه. ممنونم
با اين روش به نظرم بشه كاراي خاصي كرد كه گاهي حسابي به كمك مياد
سعيد جان من واقعا ممنون مي شم اگه يه آموزش براش بنويسي
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
سلام حوب هستيد شما براي اين كار همانطور كه بلا بلا گفت بايد هندل پنجره رو پيدا كنيد يك راهش همان enum هست كه يك ذره مشكل داره چون براي بدست اوردن كلوم مورد نظر شما نميتويد از حافظه معمولي استفاده كنيد چون حافظه شما بصورت شير با برنامه مرود نظر نيست در نتيجه وقتي داريد سعي ميكند ايندكس اون را بر اساس نوشتش در بياريد بايد يك بافري براي گرفتن اسم هر سطر به تابع getwindowtexta يا getdlgitemtexta يا با استفاده از sendmessgae اختصاص بديد و از انجايي كه اين بافر بافر برنامه حودتونه در نتيجه اين توابع با مشكل بر ميخورتد و جواب نمي دهند ( فكر كنم دستمون plus هم به همين مشكل بر خورده بود ) براي حل اين مشكل بايد با استفاده از openproccess بيان و پروسس مورد نظر رو باز كنيد و سپس با استفاده از تابع VirtualAllocEx يك بافر درون خود حافظه برنامه با قابليت شير بسازيد و ....
سپس متن مورد نظر تون رو پيدا بدست اورده و ادامه ماجرا

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

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

به اميد ديدار

خیلی عالی بود.ممنون
 

hichkas021

Registered User
تاریخ عضویت
7 می 2006
نوشته‌ها
190
لایک‌ها
0
محل سکونت
No Where
سلام حوب هستيد شما براي اين كار همانطور كه بلا بلا گفت بايد هندل پنجره رو پيدا كنيد يك راهش همان enum هست كه يك ذره مشكل داره چون براي بدست اوردن كلوم مورد نظر شما نميتويد از حافظه معمولي استفاده كنيد چون حافظه شما بصورت شير با برنامه مرود نظر نيست در نتيجه وقتي داريد سعي ميكند ايندكس اون را بر اساس نوشتش در بياريد بايد يك بافري براي گرفتن اسم هر سطر به تابع getwindowtexta يا getdlgitemtexta يا با استفاده از sendmessgae اختصاص بديد و از انجايي كه اين بافر بافر برنامه حودتونه در نتيجه اين توابع با مشكل بر ميخورتد و جواب نمي دهند ( فكر كنم دستمون plus هم به همين مشكل بر خورده بود ) براي حل اين مشكل بايد با استفاده از openproccess بيان و پروسس مورد نظر رو باز كنيد و سپس با استفاده از تابع VirtualAllocEx يك بافر درون خود حافظه برنامه با قابليت شير بسازيد و ....
سپس متن مورد نظر تون رو پيدا بدست اورده و ادامه ماجرا

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

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

به اميد ديدار

میشه یک کم بیشتر توضیح بدی ؟:eek:
 
بالا