如何罗列“任务管理器”里所有的“应用程序”

aalei 2006-06-12 09:30:22
把所有的应用程序名添加到combo里
...全文
345 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
DengXingJie 2006-06-15
  • 打赏
  • 举报
回复
學習
aalei 2006-06-15
  • 打赏
  • 举报
回复
DengXingJie 2006-06-15
  • 打赏
  • 举报
回复
模組:
Option Explicit

Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long

Public Const SW_HIDE = 0
Public Const SW_SHOW = 5

Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean

Dim S As String ' 讀取 hWnd 的視窗標題
S = String(80, 0)
Call GetWindowText(hwnd, S, 80)
S = Left(S, InStr(S, Chr(0)) - 1)
' 若視窗標題不為空字串,則顯示在 ListBox 之中
If Len(S) > 0 Then Form1.List1.AddItem S
EnumWindowsProc = True ' 表示繼續列舉 hWnd

End Function


窗體:
Private Sub Command2_Click()
Dim i As Integer
Dim hw As Long

List1.Clear
List2.Clear
EnumWindows AddressOf EnumWindowsProc, 0& '測偵巳在執行的程序
For i = 0 To List1.ListCount - 1
hw = FindWindow(vbNullString, List1.List(i))
If IsWindowVisible(ByVal hw) <> 0 Then
List2.AddItem List1.List(i)
End If
Next i

End Sub
List2中的項目所有可見進程,與你的要求還是有些差別的
aalei 2006-06-14
  • 打赏
  • 举报
回复
顶。。谁给个符合题意的完成代码啊。。。。。。。。。。。。。
谢谢了
清晨曦月 2006-06-13
  • 打赏
  • 举报
回复
应用程序,,,那是窗口列表。。。用与我后来提供的代码类似的代码就可以解决了

用API也行,呵呵。API就是用FINDWINDOW了。比较简单,以下一是段代码:

测试代码请在窗体上添加一个LISTBOX,一个CMD,LISTBOX名称默认,按钮名改为CWindow
'以下是一个CMD的点击事件,CMD名称为CWindow
Private Sub CWindow_Click()
Dim l As Long

List1.Clear
'遍历所有的窗口
l = EnumWindows(AddressOf EnumWindowsProc, 0)
End Sub

'以下在一个模块中,是一个回调
Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim astr As String * 256
Dim l As Long
l = GetWindowText(hwnd, astr, Len(astr)) '得到窗口的标题
If InStr(astr, " ") > 1 Then
Form1.List1.AddItem astr
End If
EnumWindowsProc = True
End Function
'上面代码将显示所有的窗体,其中包含隐藏窗体,你可以把他们用代码过滤掉.
'上面代码使用了回调的方法,也可以使用FINDWINDOWEX函数,这个函数可以指定查询起始的HWND,具体应用示例可以参考这里的部分代码,
http://community.csdn.net/Expert/topic/4746/4746854.xml?temp=.3710901
另外,用WMI也可以实现,我先写一下,一会给你回复
mndsoft 2006-06-13
  • 打赏
  • 举报
回复
这个参考一下:
模仿Windows任务管理器源代码
http://www.mndsoft.com/blog/article.asp?id=51

LC进程管理器
http://www.mndsoft.com/blog/article.asp?id=211&keyword=%E7%AE%A1%E7%90%86%E5%99%A8

进程指挥官--进程控制源代码
http://www.mndsoft.com/blog/article.asp?id=202&keyword=%E8%BF%9B%E7%A8%8B
aalei 2006-06-13
  • 打赏
  • 举报
回复
顶。。谁给个符合题意的完成代码啊。。。。。。。。。。。。。
谢谢了
aalei 2006-06-13
  • 打赏
  • 举报
回复
顶。
谢谢楼上的兄台
可我要的不是进程啊。。。
我要的是 ”任务管理器”里所有的“应用程序”
清晨曦月 2006-06-12
  • 打赏
  • 举报
回复
哦, 对了,忘记说明了,测试上面代码需要一个COMBOX控件,名称默认
清晨曦月 2006-06-12
  • 打赏
  • 举报
回复
上面是用API实现的,如果你的程序用在2K/XP一上版本中,那么可以用以下代码:
注意:使用前先添加引用:Microsoft WMI Scripting V1.X Library
我电脑上的是1.2,现在的WMI版本一般都支持要用到的操作,添加你的版本即可
具体代码:
Option Explicit

Dim objSWbemLocator As New SWbemLocator
Dim objSWbemServices As SWbemServices
Dim objSWbemObjectSet As SWbemObjectSet
Dim objSWbemObject As SWbemObject

Private Sub GetPro()
Dim i As Long, mReturn As Long, strNameOfUser
Set objSWbemServices = objSWbemLocator.ConnectServer() '连接到本机的WMI,返回一个对 SWbemServices 对象的引用
Set objSWbemObjectSet = objSWbemServices.InstancesOf("Win32_Process") '返回Win32_Process类名标识的所有实例
Combo1.Clear
For Each objSWbemObject In objSWbemObjectSet '枚举每一个Win32_Process的实例
Combo1.AddItem objSWbemObject.Name '将进程名添加到LvProcess第二列
Next
Combo1.ListIndex = 0
End Sub

Private Sub Form_Load()
GetPro
End Sub
清晨曦月 2006-06-12
  • 打赏
  • 举报
回复
用API可以,这方面文章很多,可以去翻翻看,这个代码是我存起来的一段,其中提升权限的API和函数你用不到,可以去了。你稍加修改,把里面LIST.ADDITEM改成COMBOX的ADDITEM就可以了
测试代码需要一个FRM,2个LISTVIEW(MS WINDOWS COMMON CONTROLS 6.0里面的),4个按钮,名称默认
Option Explicit
'======================用于查找进程和终止进程的API函数常数定义=====================
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode 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 Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const MAX_PATH As Integer = 260
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
Const TH32CS_SNAPheaplist = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPthread = &H4
Const TH32CS_SNAPmodule = &H8
Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule


'======================在WIN2000下提升本进程权限的API函数常数定义=====================
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const TOKEN_ASSIGN_PRIMARY = &H1
Const TOKEN_DUPLICATE = (&H2)
Const TOKEN_IMPERSONATE = (&H4)
Const TOKEN_QUERY = (&H8)
Const TOKEN_QUERY_SOURCE = (&H10)
Const TOKEN_ADJUST_PRIVILEGES = (&H20)
Const TOKEN_ADJUST_GROUPS = (&H40)
Const TOKEN_ADJUST_DEFAULT = (&H80)
Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or _
TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or _
TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
Const SE_PRIVILEGE_ENABLED = &H2
Const ANYSIZE_ARRAY = 1
Private Type LUID
lowpart As Long
highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long


'程序加载
Private Sub Form_Load()
AdjustTokenPrivileges2000
Me.Caption = "WINDOWS 进程管理器"
Command1.Caption = "刷新"
Command2.Caption = "终止进程"
Command3.Caption = "退出"
ListView1.ColumnHeaders.Clear
ListView1.ColumnHeaders.Add , "a", "进程ID", 800
ListView1.ColumnHeaders.Add , "b", "进程名", 4900
ListView1.View = lvwReport
Command1_Click '刷新进程列表
End Sub


'显示当前系统中全部进程
Private Sub Command1_Click()
Dim i As Long, lPid As Long
Dim Proc As PROCESSENTRY32
Dim hSnapShot As Long
ListView1.ListItems.Clear '清空ListView
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPall, 0) '获得进程“快照”的句柄
Proc.dwSize = Len(Proc)
lPid = ProcessFirst(hSnapShot, Proc) '获取第一个进程的PROCESSENTRY32结构信息数据
i = 0
Do While lPid <> 0 '当返回值非零时继续获取下一个进程
ListView1.ListItems.Add , "a" & i, Proc.th32ProcessID & "(&H" & Hex(Proc.th32ProcessID) & ")" '将进程ID添加到ListView1第一列
ListView1.ListItems("a" & i).SubItems(1) = Proc.szExeFile '将进程名添加到ListView1第二列
i = i + 1
lPid = ProcessNext(hSnapShot, Proc) '循环获取下一个进程的PROCESSENTRY32结构信息数据
Loop
CloseHandle hSnapShot '关闭进程“快照”句柄
End Sub


'终止指定进程
Private Sub Command2_Click()
Dim lPHand As Long, TMBack As Long
If ListView1.SelectedItem.Text <> "" Then
If MsgBox("确实要结束进程[" & ListView1.SelectedItem.SubItems(1) & "]吗?", vbYesNo) = vbYes Then
lPHand = Val(ListView1.SelectedItem.Text)
lPHand = OpenProcess(1&, True, lPHand) '获取进程句柄
TMBack = TerminateProcess(lPHand, 0&) '关闭进程
If TMBack <> 0 Then
MsgBox ListView1.SelectedItem.SubItems(1) & "已经被终止!"
Else
MsgBox ListView1.SelectedItem.SubItems(1) & "不能被终止!"
End If
CloseHandle lPHand
Command1_Click '刷新进程列表
End If
End If
End Sub


'退出本程序
Private Sub Command3_Click()
Unload Me
End Sub


'这个函数用于在WIN2000/XP/03/NT4+系统中,本进程提升权限
Sub AdjustTokenPrivileges2000()
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
Dim lP As Long
hdlProcessHandle = GetCurrentProcess()
lP = OpenProcessToken(hdlProcessHandle, TOKEN_ALL_ACCESS, hdlTokenHandle)
lP = LookupPrivilegeValue("", "SeDebugPrivilege", tmpLuid)
tkp.PrivilegeCount = 1
tkp.Privileges(0).pLuid = tmpLuid
tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
lP = AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)
End Sub
概要介绍: 本课程主要是介绍并实战一款java中间件~redisson,介绍redisson相关的核心技术栈及其典型的应用场景,其中的应用场景就包括布隆过滤器、限流器、短信发送、实时/定时邮件发送、数据字典、分布式服务调度等等,在业界号称是在java项目正确使用redis的姿势。本课程的目标就在于带领各位小伙伴一起学习、攻克redisson,更好地巩固自己的核心竞争力,而至于跳槽涨薪,自然不在话下!  课程内容: 说起redisson,可能大伙儿不是很熟悉,但如果说起redis,想必肯定很多人都晓得。没错,这家伙字如其名,它就是架设在redis基础上的一款综合性的、新型的中间件,号称是java企业级应用开发中正确使用redis的姿势/客户端实例。 它是架设在redis基础之上,但拥有的功能却远远多于原生Redis 所提供的,比如分布式对象、分布式集合体系、分布式锁以及分布式服务调度等一系列具有分布式特性的对象实例… 而这些东西debug将在本门课程进行淋漓尽致的介绍并实战,除此之外,我们将基于spring boot2.0搭建的多模块项目实战典型的应用场景:对象存储、数据字典、短信发送、实时/定时邮件发送、布隆过滤器、限流组件、分布式服务调度....课程大纲如下所示: 下面罗列一下比较典型的核心技术栈及其实际业务场景的实战,如下图所示为redisson基于订阅-发布模式的核心技术~主题Topic的实际业务场景,即实时发送邮件: 而下图则是基于“多值映射MultiMap”数据结构实战实现的关于“数据字典”的缓存管理: 除此之外,我们还讲解了可以与分布式服务调度中间件dubbo相媲美的功能:分布式远程服务调度,在课程中我们动手搭建了两个项目,用于分别充当“生产者”与“消费者”角色,最终通过redisson的“服务调度组件”实现服务与服务之间、接口与接口之间的调用!  课程收益: (1)认识并掌握redisson为何物、常见的几种典型数据结构-分布式对象、集合、服务的应用及其典型应用场景的实战; (2)掌握如何基于spring boot2.0整合redisson搭建企业级多模块项目,并以此为奠基,实战企业级应用系统中常见的业务场景,巩固相应的技术栈! (3)站在项目管理与技术精进的角度,掌握对于给定的功能模块进行业务流程图的绘制、分析、模块划分、代码实战与性能测试和改进,提高编码能力与其他软实力; (4)对于Java微服务、分布式、springboot精进者而言,学完本课程,不仅可以巩固提高中间件的实战能力,其典型的应用场景更有助于面试、助力相关知识点的扫盲! 如下图所示: 关键字:Spring Boot,Redis,缓存穿透,缓存击穿,缓存雪崩,红包系统,Mybatis,高并发,多线程并发编程,发送邮件,列表List,集合Set,排行榜,有序集合SortedSet,哈希Hash ,进阶实战,面试,微服务、分布式 适用人群:redisson学习者,分布式中间件实战者,微服务学习者,java学习者,spring boot进阶实战者,redis进阶实战者

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧