用VB编写监视指定进程的程序解析文档格式.docx
- 文档编号:16206022
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:12
- 大小:21.25KB
用VB编写监视指定进程的程序解析文档格式.docx
《用VB编写监视指定进程的程序解析文档格式.docx》由会员分享,可在线阅读,更多相关《用VB编写监视指定进程的程序解析文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
dwSizeAsLong
cntUsageAsLong
th32ProcessIDAsLong
th32DefaultHeapIDAsLong
th32ModuleIDAsLong
cntTreadsAsLong
th32ParentProcessIDAsLong
pcPriClassBaseAsLong
dwFlagsAsLong
szExeFileAsString*260’这就是包含全路径的进程文件名
EndType
PublicDeclareFunctionProcess32FirstLib"
kernel32"
(ByValhSnapshotAsLong,lppeAsPROCESSENTRY32)AsLong’用来遍历进程池的函数,这是查找的起始函数
PublicDeclareFunctionProcess32NextLib"
(ByValhSnapshotAsLong,lppeAsPROCESSENTRY32)AsLong’遍历进程池的向下递归函数
PublicTypeSTARTUPINFO’记录进程启动信息的结构
cbAsLong
lpReservedAsString
lpDesktopAsString
lpTitleAsString
dwXAsLong
dwYAsLong
dwXSizeAsLong
dwYSizeAsLong
dwXCountCharsAsLong
dwYCountCharsAsLong
dwFillAttributeAsLong
wShowWindowAsInteger
cbReserved2AsInteger
lpReserved2AsByte
hStdInputAsLong
hStdOutputAsLong
hStdErrorAsLong
PublicTypePROCESS_INFORMATION’记录进程启动后相关信息的结构
hProcessAsLong’进程句柄
hThreadAsLong’线程句柄
dwProcessIdAsLong’进程ID
dwThreadIdAsLong’线程ID
PublicDeclareFunctionGetCurrentProcessLib"
()AsLong’获取当前进程句柄
PublicDeclareFunctionGetCurrentProcessIdLib"
()AsLong;
获取当前进程ID
PublicConstTH32CS_SNAPPROCESS=AsLongH2
PublicDeclareFunctionWaitForSingleObjectLib"
(ByValhHandleAsLong,ByValdwMillisecondsAsLong)AsLong
PublicDeclareFunctionExitWindowsExLib"
user32"
(ByValuFlagsAsLong,ByValdwReservedAsLong)AsLong
PublicDeclareFunctionRegisterServiceProcessLib"
(ByValdwProcessIdAsLong,ByValdwTypeAsLong)AsLong
PublicDeclareFunctionGetModuleFileNameLib"
Alias"
GetModuleFileNameA"
(ByValhModuleAsLong,ByVallpFileNameAsString,ByValnSizeAsLong)AsLong
PublicDeclareFunctionRegSetValueExLib"
advapi32.dll"
RegSetValueExA"
(ByValhKeyAsLong,ByVallpValueNameAsString,ByValReservedAsLong,ByValdwTypeAsLong,ByVallpDataAsString,ByValcbDataAsLong)AsLong
PublicDeclareFunctionRegCloseKeyLib"
(ByValhKeyAsLong)AsLong
PublicDeclareFunctionRegOpenKeyLib"
RegOpenKeyA"
(ByValhKeyAsLong,ByVallpSubKeyAsString,phkResultAsLong)AsLong
PublicDeclareFunctionGetWindowLib"
(ByValhwndAsLong,ByValwCmdAsLong)AsLong
PublicDeclareFunctionGetWindowTextLib"
GetWindowTextA"
(ByValhwndAsLong,ByVallpStringAsString,ByValcchAsLong)AsLong
PublicDeclareFunctionGetWindowTextLengthLib"
GetWindowTextLengthA"
(ByValhwndAsLong)AsLong
PublicDeclareFunctionCreateProcessLib"
CreateProcessA"
(ByVallpApplicationNameAsString,ByVallpCommandLineAsString,ByVallpProcessAttributesAsLong,ByVallpThreadAttributesAsLong,ByValbInheritHandlesAsLong,ByValdwCreationFlagsAsLong,lpEnvironmentAsAny,ByVallpCurrentDriectoryAsString,lpStartupInfoAsSTARTUPINFO,lpProcessInformationAsPROCESS_INFORMATION)AsLong
PublicDeclareFunctionGetSystemMenuLib"
(ByValhwndAsLong,ByValbRevertAsLong)AsLong
PublicDeclareFunctionRemoveMenuLib"
(ByValhMenuAsLong,ByValnPositionAsLong,ByValwFlagsAsLong)AsLong
PublicDeclareFunctionDrawMenuBarLib"
PublicDeclareFunctionGetMenuItemCountLib"
(ByValhMenuAsLong)AsLong
PublicDeclareFunctionResumeThreadLib"
(ByValhThreadAsLong)AsLong
PublicDeclareFunctionSuspendThreadLib"
PublicDeclareFunctionCreateThreadLib"
(ByVallpThreadAttributesAsLong,ByValdwStackSizeAsLong,ByVallpStartAddressAsLong,ByVallpParameterAsLong,ByValdwCreationFlagsAsLong,lpThreadIdAsLong)AsLong
PublicDeclareFunctionTerminateProcessLib"
(ByValhProcessAsLong,ByValuExitCodeAsLong)AsLong
PublicDeclareFunctionTerminateThreadLib"
(ByValhThreadAsLong,ByValdwExitCodeAsLong)AsLong
PublicConstPROCESS_TERMINATE=&
H1
PublicConstPROCESS_QUERY_INFORMATION=&
H400
PublicConstEWX_FORCE=4
PublicConstEWX_REBOOT=2
PublicConstGW_CHILD=5
PublicConstGW_HWNDFIRST=0
PublicConstGW_HWNDNEXT=2
PublicConstGW_MAX=5
PublicConstGW_OWNER=4
PublicConstHKEY_LOCAL_MACHINE=&
H80000002
PublicConstREG_SZ=1
PublicConstRSP_SIMPLE_SERVICE=1
PublicConstRSP_UNREGISTER_SERVICE=0
PublicConstCREATE_SUSPENDED=&
H4
PublicConstMF_BYPOSITION=&
PublicConstBM_CLICK=&
HF5
PublicpeAsPROCESSENTRY32,hSnapshotAsLong
PublicStartNumAsLong,AppNameAsString,SectionAsString,sKeyAsString,appValueAsString,sKeyFileAsString,sKeyNumAsString
PublicNumTerminateAsLong,hThreadAsLong,ThreadIDAsLong,sFileNameAsString
PublicFunctionStartMonitor(lParamAsLong)AsLong’线程函数
WaitForTheProcessGetProcessHandle(sFileName),sFileName’开始监控
StartMonitor=1
EndFunction
PublicFunctionSendEnterAsLong()’搜寻系统登陆对话框,找到就发送回车键
DimCurrwndAsLong,LengthAsLong,ListItemAsString
Currwnd=GetWindow(Form1.hwnd,GW_HWNDFIRST)’这里用窗口标题查找的原因是系统重启时基本上不会加载多少进程,这样窗口的标题通常是不会被改变的。
WhileCurrwnd<
>
0
Length=GetWindowTextLength(Currwnd)’获取窗口标题字符串的长度。
IfLength<
0Then
ListItemAsString=SpaceAsString(Length)
Length=GetWindowText(Currwnd,ListItemAsString,Length+2)’获取窗口标题
IfInStr(ListItem,"
输入网络密码"
)<
EnumChildWindowsCurrwnd,AddressOfGetOkButton,0
SendEnter=1
ExitFunction
EndIf
Currwnd=GetWindow(Currwnd,GW_HWNDNEXT)
Wend
SendEnter=0
PublicSubWaitForTheProcess(ByValhProcessAsLong,ByValsPathAsString)’开始监控进程
DimPro_InfoAsPROCESS_INFORMATION,StartInfoAsSTARTUPINFO
StartInfo.cb=Len(StartInfo)
IfhProcess>
0Then’如果已经运行了被监控进程则开始监控
DimWaitResultAsLong
WaitResult=WaitForSingleObject(hProcess,(-1))
CloseHandlehProcess
IfStartNum>
=NumTerminateThen’如果重启次数超过设置的次数就重新启动系统
SaveSettingAppName,Section,sKey,"
1"
ExitWindowsExEWX_REBOOTOrEWX_FORCE,0’强制退出,这样可以顺利退出
ExitSub
StartNum=StartNum+1
Form1.Label6=StartNum
CreateProcessvbNullString,sPath,0,0,True,32,ByVal0AsLong,vbNullString,StartInfo,Pro_Info’否则用被监控进程的全路径文件名来创建被监控进程
WaitForTheProcessPro_Info.hProcess,sPath
EndSub
PublicFunctionGetProcessHandleAsLong(ByValsPathAsString)’获取被监控进程的进程句柄
sPath=LCase(sPath)
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)’创建一个snapshot对象
pe.dwSize=Len(pe)
bValue=Process32First(hSnapshot,pe)’开始遍历系统进程池
WhilebValue<
IfInStr(LCase(pe.szExeFile),sPath)<
0Then’如果找到了,则…
DimhProcessAsLong
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION,0,pe.th32ProcessID)
GetProcessHandle=hProcess
CloseHandlehSnapshot
bValue=Process32Next(hSnapshot,pe)
GetProcessHandle=0’否则返回0
PublicFunctionGetOkButton(ByValhwndAsLong,ByVallParamAsLong)AsLong’获取“输入网络密码框”窗口中“确定”按钮的句柄
DimLength&
ListItem$
Length=GetWindowTextLength(hwnd)
ListItem$=Space$(Length)
Length=GetWindowText(hwnd,ListItem$,Length+2)
确定"
SendMessagehwnd,BM_CLICK,0,0’激活窗口
SendMessagehwnd,BM_CLICK,0,0’发送Click消息
GetOkButton=0’退出EnumChildWindows()函数的枚举循环
GetOkButton=1’继续EnumChildWindows()函数的枚举循环
窗口中有几个Label控件:
Label2用来提示当前被监控的进程的,Label4和Label6用来记录次数的。
窗口中还有一个菜单,用来向用户提供设置方法的。
因为允许操作人员设置,不能隐藏窗口,所以这里隐藏了菜单,在窗口上用鼠标点右键才能看见,而触摸屏上顾客是无法点右键的,这样设置就安全了,具体的菜单项见下面程序:
作者:
安徽省滁州市电信局小型机房徐原
来自:
计算机世界网
PrivateSubForm_Load()
RegisterServiceProcessGetCurrentProcessId,RSP_SIMPLE_SERVICE’注册进程为系统服务进程,这样进程只在系统关机的最后一刻才从系统中卸掉。
DimFNAsString,hRegAsLong,tRegKeyAsString,tSubKeyAsString,phkResultAsLong,lpSubKeyAsString,EnterResultAsLong
DimTimePassed1AsLong,TimePassed2AsLong
FN=Space(255)
GetModuleFileNameApp.hInstance,FN,255’获取当前进程的全路径文件名
FN=Trim(FN)
lpSubKey="
Sysexplor"
tSubKey="
SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices"
RegOpenKeyHKEY_LOCAL_MACHINE,tSubKey,phkResult’打开注册表项
RegSetValueExphkResult,lpSubKey,0,REG_SZ,FN,Len(FN)’写当前进程的全路径到上面所说的注册表项中,以便下次系统重启说能和系统登陆对话框一同运行
RegCloseKeyphkResult’关闭注册表项
AppName="
TiMonitor"
Section="
Reboot"
sKeyFile="
FileName"
sFileName=GetSetting(AppName,Section,sKeyFile,"
"
)’读取注册表中记录的被监控进程的全路径名
aa:
I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 编写 监视 指定 进程 程序 解析