Set ppt = nothingppt:所创建的PowerPoint对象
解决方案 »
- 用VB做一个网络游戏
- 程序打包后cpu利用率很高
- 庆祝多了颗星,散分!
- Win NT下安装不了vb6.0的MSDN,怎么才可以解决?
- 请问这个怎么用????????????????????????????????
- 大家平时用什么工具做帮助啊? 好象Help & Manual还可以,但是中文是乱码如何解决??
- 关于msflexgrid
- 如何显示Combox中具体某一项的值 ??
- 再vb中怎样做sql2000的数据库恢复啊!我只有一个a.bak文件,急死了!!!!!!!!!!!!11
- 一光盘,制造者将盘上的目录隐藏,然后使用一个(以编译)VB程序,让我输入要查询的目录名,只有输入目录名正确,才可以看到目录下的文件,但我已忘了目录名,我改怎吗办,请大虾指点
- 请问怎样把form中的picture属性中的图片删除?
- 如果获取当前计算机所登录的域名?
Set powerfile = GetObject("c:\Exam\PowerPoint1\Exam.ppt")For i = 1 To powerfile.Slides.Count
....
next iset powerfile=nothing但是进程管理器中仍然留有powerpnt.exe,导致后续程序无法进行
'察看Win2000的进程列表
Public Const MAX_PATH = 260Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesireAccess As Long, ByVal vInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function EnumProcesses Lib "PSAPI.DLL" (idProcess As Long, ByVal cBytes As Long, cbNeeded As Long) As Long
Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hPorcess As Long, hModule As Long, ByVal cb As Long, cbNeeded As Long) As Long
Public Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpBaseName As String, ByVal nSize As Long) As Long
Public Declare Function GetModuleFileNameEx Lib "PSAPI.DLL" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilname As String, byvalnSize As Long) As Long
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, ByRef lpExitCode As Long) As Long
'Public Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
'Public Declare Function GetLastError Lib "kernel32" () As LongPublic Const STANDARD_RIGHTS_REQUITED = &HF0000
Public Const SYNCHRONIZE = &H100000
Public Const PROCESS_VM_READ = &H10
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUITED Or SYNCHRONIZE Or &HFFF
Public Function GetWin2KProcessID(sFQEXEName As String, sEXEName As String, ByRef cMatches As Long) As Long
'从这个EXE名称或从全限定名(路径/名称)得到进程标识符
'EXE名称
'If sFQName<>"" 那用它来匹配
'If sName<>"" 仅使用名称来匹配
'如果进程不存在返回0,否则返回最后匹配的进程标识符
'返回输出参数cMatches中的匹配数
'如果sFQName和sName都是空的,值为-1
'如果得到进程列表错误则为-2Dim i As Integer, j As Integer, l As Integer
Dim cbNeeded As Long
Dim hEXE As Long
Dim hProcess As LongDim lret As Long
Dim cProcesses As Long
Dim lProcessIDs() As Long
Dim sEXENames() As String
Dim sFQEXENames() As String'----------------------------------
'获取进程ID数组
'----------------------------------
'初始值
cProcesses = 25Do
'定数组大小
ReDim lProcessIDs(1 To cProcesses)
'枚举
lret = EnumProcesses(lProcessIDs(1), cProcesses * 4, cbNeeded)
If lret = 0 Then
GetWin2KProcessID = -2
Exit Function
End If
'将需要的字节数和数组的字节大小比较
'如果少,那么我们得到全部字节
If cbNeeded < cProcesses * 4 Then
Exit Do
Else
cProcesses = cProcesses * 2
End If
LoopcProcesses = cbNeeded / 4ReDim Preserve lProcessIDs(1 To cProcesses)
ReDim sEXENames(1 To cProcesses)
ReDim sFQEXENames(1 To cProcesses)'----------------------------------
'获取EXE文件名
'----------------------------------
For i = 1 To cProcesses
'使用OpenProcess得到每一个进程的句柄
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0&, lProcessIDs(i))
'注意特殊的句柄
Select Case lProcessIDs(i)
Case 0 'System Idle Process
sEXENames(i) = "Idle Process"
sFQEXENames(i) = "Idle Process"
Case 8
sEXENames(i) = "System"
sFQEXENames(i) = "System"
Case 164
sEXENames(i) = "csrss.exe"
sFQEXENames(i) = "csrss.exe"
End Select
'If essor skip this process
If hProcess = 0 Then
GoTo hpContinue
End If
'得到这个进程中第一个模块的句柄
'因为这是一个EXE
hEXE = 0
lret = EnumProcessModules(hProcess, hEXE, 4&, cbNeeded)
If hEXE = 0 Then GoTo hpContinue
'得到这个模块的名称
sEXENames(i) = String$(MAX_PATH, Chr$(0)) lret = GetModuleBaseName(hProcess, hEXE, sEXENames(i), Len(sEXENames(i)))
sEXENames(i) = Left$(sEXENames(i), lret)
'得到完整的路径名
sFQEXENames(i) = String$(MAX_PATH, Chr$(0))
lret = GetModuleFileNameEx(hProcess, hEXE, sFQEXENames(i), Len(sFQEXENames(i)))
sFQEXENames(i) = Left$(sFQEXENames(i), lret)
hpContinue:
'关闭句柄
lret = CloseHandle(hProcess)
Next'----------------------------------
'匹配检查
'----------------------------------cMatches = 0
If sFQEXEName <> "" Then
For i = 1 To cProcesses
If LCase$(sFQEXENames(i)) = LCase$(sFQEXEName) Then
cMatches = cMatches + 1
GetWin2KProcessID = lProcessIDs(i)
End If
Next
ElseIf sEXEName <> "" Then
For i = 1 To cProcesses
If LCase$(sEXENames(i)) = LCase$(sEXEName) Then
cMatches = cMatches + 1
GetWin2KProcessID = lProcessIDs(i)
sFQEXEName = sFQEXENames(i)
End If
Next
Else
GetWin2KProcessID = -1
End IfEnd Function