hichkas021
Registered User
می خواستم ببینم می شه برنامه رو با vb از لیست processes از توی task manager حذف کرد؟
اگه می شه ، چطوری می شه؟:happy:
اگه می شه ، چطوری می شه؟:happy:
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
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
سلام
خوب هستيد
بله ميشه براي اين كار شما بايد task mager رو hijack كنيد يعني بيان و هندل پنجره تكس منيجرو بدست بياوريد و بعد هندل list view ان را استخراج كرده و بعد كلوم مورد نظرتون رو پاك كنيد
اميدوارم كمك كنه
خیلی ممنون از راهنماییتون.
می خواستم بدونم برای حذف یک سطر از list view از چه توابعی باید استفاده کنم ؟
ListView1.ListItems.Remove
کد:ListView1.ListItems.Remove
اوه راست میگی :blush:balabala جان ظاهرا این دوستمون برای ListView ی خارج از برنامه میخواد.
اون روشی که من بلدم اصولش اینه:
شما باید اول هندل ِ ListView رو به هر طریقی به دست بیاری.
بعد با استفاده از تابع ای پی آی SendMessage و ارسال پیغام ها متعدد LVM_GETITEMTEXT و گرفتن متن هر آیتم ,ایندکس آیتم مورد نظر رو پیدا کنی
و بعد با پیغام LVM_DELETEITEM آیتم مورد نظر رو حذف کنی.
منتها من یکبار این رو واسه ListView ی TaskManager تست کردم توی حذف آیتم یه مشکلی بود اما درست یادم نیست...
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
اگر با CreateWindow میسازید که خودش برمیگردونه. اگر از کنترل listview استفاده میکنید که hwndش هست وگرنه میشه با WindowFromDC یا Enum کردن کل پنجره ها و رسیدن به listview اونرو گرفت.چطوري مي شه هندل ليست ويو رو در آورد؟ مشتاقم بدونم !
سلام حوب هستيد شما براي اين كار همانطور كه بلا بلا گفت بايد هندل پنجره رو پيدا كنيد يك راهش همان enum هست كه يك ذره مشكل داره چون براي بدست اوردن كلوم مورد نظر شما نميتويد از حافظه معمولي استفاده كنيد چون حافظه شما بصورت شير با برنامه مرود نظر نيست در نتيجه وقتي داريد سعي ميكند ايندكس اون را بر اساس نوشتش در بياريد بايد يك بافري براي گرفتن اسم هر سطر به تابع getwindowtexta يا getdlgitemtexta يا با استفاده از sendmessgae اختصاص بديد و از انجايي كه اين بافر بافر برنامه حودتونه در نتيجه اين توابع با مشكل بر ميخورتد و جواب نمي دهند ( فكر كنم دستمون plus هم به همين مشكل بر خورده بود ) براي حل اين مشكل بايد با استفاده از openproccess بيان و پروسس مورد نظر رو باز كنيد و سپس با استفاده از تابع VirtualAllocEx يك بافر درون خود حافظه برنامه با قابليت شير بسازيد و ....
سپس متن مورد نظر تون رو پيدا بدست اورده و ادامه ماجرا
براي بدست اوردن هندل برنامه ها ميتونيد از برنامه the customiser و يا برنامه PAT or JK's API SPY 5.0 براي جنريت كد ها توي وي بي براي پيدا كردن پنجره ها و هندلاشون استفاده كنيد
اگه دوست داريد بگيد تا يك آموزش در موردش بنويسيم
به اميد ديدار
سلام حوب هستيد شما براي اين كار همانطور كه بلا بلا گفت بايد هندل پنجره رو پيدا كنيد يك راهش همان enum هست كه يك ذره مشكل داره چون براي بدست اوردن كلوم مورد نظر شما نميتويد از حافظه معمولي استفاده كنيد چون حافظه شما بصورت شير با برنامه مرود نظر نيست در نتيجه وقتي داريد سعي ميكند ايندكس اون را بر اساس نوشتش در بياريد بايد يك بافري براي گرفتن اسم هر سطر به تابع getwindowtexta يا getdlgitemtexta يا با استفاده از sendmessgae اختصاص بديد و از انجايي كه اين بافر بافر برنامه حودتونه در نتيجه اين توابع با مشكل بر ميخورتد و جواب نمي دهند ( فكر كنم دستمون plus هم به همين مشكل بر خورده بود ) براي حل اين مشكل بايد با استفاده از openproccess بيان و پروسس مورد نظر رو باز كنيد و سپس با استفاده از تابع VirtualAllocEx يك بافر درون خود حافظه برنامه با قابليت شير بسازيد و ....
سپس متن مورد نظر تون رو پيدا بدست اورده و ادامه ماجرا
براي بدست اوردن هندل برنامه ها ميتونيد از برنامه the customiser و يا برنامه PAT or JK's API SPY 5.0 براي جنريت كد ها توي وي بي براي پيدا كردن پنجره ها و هندلاشون استفاده كنيد
اگه دوست داريد بگيد تا يك آموزش در موردش بنويسيم
به اميد ديدار