用VB可不可以监测到有没有在玩游戏呢???

handysoft 2004-08-20 08:06:29
不知道大型的游戏,或是局域网游戏,如:CS,红警之类的。在游戏运行时,是不是都要调用系统中的某些文件呢,我想用VB去监测它们,如果有玩游戏的,能记录下他们玩游戏的时间,或是控制他们不让他们玩游戏,

不知道这样的想法能不能用VB实现!!!!

如果有大侠能做到,请给我回帖,或回email:wangxu81@163.com,万分感谢!!要多少分都给!!!!
...全文
332 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
jordi2014 2004-08-26
  • 打赏
  • 举报
回复
学习一下。
123BMW666 2004-08-26
  • 打赏
  • 举报
回复
Mark
yelang771 2004-08-24
  • 打赏
  • 举报
回复
up
goodname008 2004-08-24
  • 打赏
  • 举报
回复
' 在窗体放2个ListBox,1个CommandButton。
' 只是大致意思,不一定能解决楼主的问题。
' 但至少可以从进程(或者说模块)的路径中获得一些信息。 :D

Option Explicit

Private Declare Function CreateToolhelp32Snapshot Lib "KERNEL32.dll" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Module32First Lib "KERNEL32.dll" (ByVal hSnapshot As Long, ByRef lpme As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "KERNEL32.dll" (ByVal hSnapshot As Long, ByRef lpme As MODULEENTRY32) As Long
Private Declare Function Process32First Lib "KERNEL32.dll" (ByVal hSnapshot As Long, ByRef lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "KERNEL32.dll" (ByVal hSnapshot As Long, ByRef lppe As PROCESSENTRY32) 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 * 1024
End Type

Private Type MODULEENTRY32 '模块
dwsize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Byte
modBaseSize As Long
hModule As Long
szModule As String * 256
szExePath As String * 1024
End Type

Private Const TH32CS_SNAPMODULE = &H8
Private Const TH32CS_SNAPPROCESS = &H2

Private Sub Command1_Click()
Dim hProcessSnapshot As Long, hModuleSnapshot As Long
hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If hProcessSnapshot <> -1 Then
Dim strProcName As String, strModPath As String
Dim procEntry As PROCESSENTRY32, modEntry As MODULEENTRY32
List1.Clear
List2.Clear
procEntry.dwsize = Len(procEntry)
modEntry.dwsize = Len(modEntry)
Process32First hProcessSnapshot, procEntry
Do
hModuleSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, procEntry.th32ProcessID)
Module32First hModuleSnapshot, modEntry
strProcName = Left(procEntry.szExeFile, InStr(procEntry.szExeFile, Chr(0)) - 1)
strModPath = Left(modEntry.szExePath, InStr(modEntry.szExePath, Chr(0)) - 1)
List1.AddItem strProcName
List2.AddItem strModPath
Loop Until Process32Next(hProcessSnapshot, procEntry) = False
Else
MsgBox "无法枚举所有进程。"
End If
End Sub

Private Sub List1_Click()
List2.ListIndex = List1.ListIndex
End Sub

Private Sub List2_Click()
List1.ListIndex = List2.ListIndex
End Sub
goodname008 2004-08-24
  • 打赏
  • 举报
回复
这仅枚举出了所以进程,只有进程名。
我的意思是还可以枚举出所有进程的路径。
chenyu5188 2004-08-22
  • 打赏
  • 举报
回复
UP
lndlwwh830 2004-08-22
  • 打赏
  • 举报
回复
up
online 2004-08-22
  • 打赏
  • 举报
回复
目前也只能打开一个游戏,看看任务管理器中的信息,记下来判断
当然,如果改名,就没有好办法了

现在的问题是,我也不知道都有什么游戏已经装入了计算机!!!
你能不能说的细一些,最好有一点代码!!万分感谢了!!!
--------------------------------
请你继续关注我的贴子,谢谢!!!
zyl910 2004-08-22
  • 打赏
  • 举报
回复
就是dongge2000(秋日私语:非[版务].灌!)所说的,用ToolHelp函数集枚举进程

如果是想判断安装那些游戏
可以通过查找注册表实现
但某些游戏没有写注册表

----------------------------------------------------------------
原贴内容:
现在的问题是,我也不知道都有什么游戏已经装入了计算机!!!
你能不能说的细一些,最好有一点代码!!万分感谢了!!!
--------------------------------
请你继续关注我的贴子,谢谢!!!
--------------------------------
http://community.csdn.net/Expert/topic/3295/3295161.xml?temp=4.955691E-02
dongge2000 2004-08-22
  • 打赏
  • 举报
回复
楼上说的是这个吧:
Option Explicit

Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
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
Private Declare Function CreateToolhelp32Snapshot Lib "Kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)
Private Sub Form_Load()
Me.Show
Dim hSnapShot As Long, uProcess As PROCESSENTRY32
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
uProcess.dwSize = Len(uProcess)
Dim r
r = Process32First(hSnapShot, uProcess)
Do While r
Me.Print Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))
r = Process32Next(hSnapShot, uProcess)
Loop
CloseHandle hSnapShot
End Sub
goodname008 2004-08-22
  • 打赏
  • 举报
回复
可以进程列表只能获得进程名,没有路径,可以根据路径作为参考。
但是确实如zyl910所说,到底什么样的进程算是游戏才是关键!!! :)
----------------------------------------------------------------
原贴内容:
对不起我太明白你的意思,为什么说“当然了,只从进程列表可以获得的信息不够多,这时可以枚举每一个进程加载的所有模块,从模块中获得一些重要的信息。
”,
现在的问题是,我也不知道都有什么游戏已经装入了计算机!!!
你能不能说的细一些,最好有一点代码!!万分感谢了!!!
dongge2000 2004-08-21
  • 打赏
  • 举报
回复
小游戏就很难查了。不像CS等那么好查。
dongge2000 2004-08-21
  • 打赏
  • 举报
回复
文件名+路径呗,这是一个见仁见智的问题,一个人有一个人的方法。
zyl910 2004-08-21
  • 打赏
  • 举报
回复
最关键的一个问题是:
你怎么判断一个程序是游戏?

如果是通过监测DirectX:并不是只有游戏使用DirectX的,比如显卡测试软件也用了DirectX。何况还存在窗口游戏

如果是通过判断程序名:改名很easy的
dongge2000 2004-08-21
  • 打赏
  • 举报
回复
VB Form1 Code:
Option Explicit
Private Sub Command1_Click()
List1.Clear
Select Case getVersion()

Case 1 'Windows 95/98

Dim f As Long, sname As String
Dim hSnap As Long, proc As PROCESSENTRY32
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If hSnap = hNull Then Exit Sub
proc.dwSize = Len(proc)
' Iterate through the processes
f = Process32First(hSnap, proc)
Do While f
sname = StrZToStr(proc.szExeFile)
List1.AddItem sname
f = Process32Next(hSnap, proc)
Loop

Case 2 'Windows NT

Dim cb As Long
Dim cbNeeded As Long
Dim NumElements As Long
Dim ProcessIDs() As Long
Dim cbNeeded3 As Long
Dim NumElements2 As Long
Dim Modules(1 To 200) As Long
Dim lRet As Long
Dim ModuleName As String
Dim nSize As Long
Dim hProcess As Long
Dim i As Long

cb = 8
cbNeeded = 96

Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4

For i = 1 To NumElements
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION _
Or PROCESS_VM_READ, 0, ProcessIDs(i))
If hProcess <> 0 Then

lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded3)

If lRet <> 0 Then
ModuleName = Space(MAX_PATH)
nSize = 500
lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize)
List1.AddItem Left(ModuleName, lRet)
End If
End If
lRet = CloseHandle(hProcess)
Next

End Select

End Sub
--------------------------------------------------
VB Module Code:
Option Explicit

Public Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Public Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Public Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Public Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer
Public Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long ' This process
th32DefaultHeapID As Long
th32ModuleID As Long ' Associated exe
cntThreads As Long
th32ParentProcessID As Long ' This process's parent process
pcPriClassBase As Long ' Base priority of process threads
dwFlags As Long
szExeFile As String * 260 ' MAX_PATH
End Type
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long '1 = Windows 95.
'2 = Windows NT
szCSDVersion As String * 128
End Type
Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const PROCESS_VM_READ = 16
Public Const MAX_PATH = 260
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
'STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
Public Const PROCESS_ALL_ACCESS = &H1F0FFF
Public Const TH32CS_SNAPPROCESS = &H2&
Public Const hNull = 0

Function StrZToStr(s As String) As String
StrZToStr = Left$(s, Len(s) - 1)
End Function

Public Function getVersion() As Long
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
getVersion = osinfo.dwPlatformId
End Function
=======================================
所有运行程序的路径!
benxie 2004-08-21
  • 打赏
  • 举报
回复
gz
zhangzhijian 2004-08-21
  • 打赏
  • 举报
回复
gz
goodname008 2004-08-20
  • 打赏
  • 举报
回复
如上所说,利用toolhelp函数集中的函数枚举本地所以进程,如发现游戏可以删除。
当然了,只从进程列表可以获得的信息不够多,这时可以枚举每一个进程加载的所有模块,从模块中获得一些重要的信息。
online 2004-08-20
  • 打赏
  • 举报
回复
文件使用了DX7,DX8,DX9的都有
而且有些则不使用上述文件,如CS
online 2004-08-20
  • 打赏
  • 举报
回复
建议将一些常用的游戏的标志添加到你的程序中
然后枚举进程,如果发现匹配的,则关闭
参考
http://blog.csdn.net/online/archive/2004/08/05/66373.aspx
加载更多回复(7)

7,759

社区成员

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

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