VB怎么获得与程序标题对应的进程名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB怎么获得与程序标题对应的进程名相关的知识,希望对你有一定的参考价值。

VB怎么获得与程序标题对应的进程名,比如我的程序名字为123,进程里的名字为123.exe , 但是我现在不知道那个进程里的名字的,就是说,我现在只知道这个程序的最上边的名字,也就是标题是123.用什么API能够获得在开启它后,进程里显示的进程名字呢?
你没看懂我的问题诶- -

参考技术A 根据你的反馈,回复如下:
假如进程名为12345678.exe,则可以分三步解决:
一、定义数组a(),然后枚举所有进程,找出进程名为12345678.exe的进程,并将其ID存入数组a()中
二、枚举所有窗口,取得对应的进程ID,然后与数组a()中的ID进行比较,若处于可见状态且ID相同,则将该数组元素置为空。
三、循环检验数组a(),如ID不为空,则终止此进程。
参考技术B Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
如果该参数为null时,将会寻找任何与lpWindowName参数匹配的窗口。
lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。

如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。

接着用得到的句柄,配合以下API遍历进程(相关用法请搜索)

获得进程:
GetWindowTreadProcessId

获得exe名或dll名,完整路径:
GetModuleFileName
or
GetModuleFileNameEx
参考技术C Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId 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 GetModuleBaseName Lib "psapi.dll" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpBaseName As String, ByVal nSize As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Sub Command1_Click()
Dim hwnd&, Pid&, pHandle&, str As String * 20
hwnd = FindWindow(vbNullString, "123") '可用"计算器"测试
If (hwnd = 0) Then Exit Sub
GetWindowThreadProcessId hwnd, Pid
pHandle = OpenProcess(&H1F0FFF, 0, Pid)
If (pHandle = 0) Then Exit Sub
GetModuleBaseName pHandle, 0, str, Len(str)
MsgBox "进程名为:" & Trim(str),,"Loumou"
CloseHandle hProcess
End Sub
参考技术D 不用api啊,直接这样不就行了么。。。
Text1.Text = App.EXEName

VB中怎么获得系统日期与时间

我要把日期和时间分开的.为什么下面这样不行?
strarticaldate=date(now)
strarticaltime=time(now)
出现:Microsoft VBScript 运行时错误 错误 '800a01c2'

错误的参数个数或无效的参数属性值: 'date'

/publisharticle.asp,行 22
一楼能进一步解释一下吗?

日期:DateTime.Now.ToShortDateString
时间:DateTime.Now.ToFileTime

可以这样用:
Response.Write(DateTime.Now.ToShortDateString() + "<br/>");
Response.Write(DateTime.Now.ToShortTimeString() + "<br/>");

输出:
2007-1-29
8:49

Response.Write(DateTime.Now.ToLongDateString() + "<br/>");
Response.Write(DateTime.Now.ToLongTimeString() + "<br/>");

输出:
2007年1月29日
8:49:15

不知合不合你要求
我是要VS2005下使用,很好用。可查看MSDN以下简单例出:

.NET Framework 类库
DateTime 成员
请参见 构造函数 字段 方法 属性 显式接口实现
全部折叠 全部展开 成员选项:全部显示 成员选项:已筛选
包括继承的成员
包括受保护的成员
仅 .NET Compact Framework 成员

表示时间上的一刻,通常以日期和当天的时间表示。

下表列出了由 DateTime 类型公开的成员。

公共构造函数
名称 说明
DateTime 已重载。初始化 DateTime 结构的新实例。
页首
公共字段
名称 说明
MaxValue 表示 DateTime 的最大可能值。此字段为只读。
MinValue 表示 DateTime 的最小可能值。此字段为只读。
页首
公共属性
名称 说明
Date 获取此实例的日期部分。
Day 获取此实例所表示的日期为该月中的第几天。
DayOfWeek 获取此实例所表示的日期是星期几。
DayOfYear 获取此实例所表示的日期是该年中的第几天。
Hour 获取此实例所表示日期的小时部分。
Kind 获取一个值,该值指示由此实例表示的时间是基于本地时间、协调通用时间 (UTC),还是两者皆否。
Millisecond 获取此实例所表示日期的毫秒部分。
Minute 获取此实例所表示日期的分钟部分。
Month 获取此实例所表示日期的月份部分。
Now 获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间。
Second 获取此实例所表示日期的秒部分。
Ticks 获取表示此实例的日期和时间的刻度数。
TimeOfDay 获取此实例的当天的时间。
Today 获取当前日期。
UtcNow 获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,表示为协调通用时间 (UTC)。
Year 获取此实例所表示日期的年份部分。
页首
公共方法
名称 说明
Add 将指定的 TimeSpan 的值加到此实例的值上。
AddDays 将指定的天数加到此实例的值上。
AddHours 将指定的小时数加到此实例的值上。
AddMilliseconds 将指定的毫秒数加到此实例的值上。
AddMinutes 将指定的分钟数加到此实例的值上。
AddMonths 将指定的月份数加到此实例的值上。
AddSeconds 将指定的秒数加到此实例的值上。
AddTicks 将指定的刻度数加到此实例的值上。
AddYears 将指定的年份数加到此实例的值上。
Compare 比较 DateTime 的两个实例,并返回它们相对值的指示。
CompareTo 已重载。 将此实例与指定的对象或值类型进行比较,并返回二者相对值的指示。
DaysInMonth 返回指定年和月中的天数。
Equals 已重载。 返回一个值,该值指示两个 DateTime 对象,或者一个 DateTime 实例和另一个对象或 DateTime 是否相等。
FromBinary 反序列化一个 64 位二进制值,并重新创建序列化的 DateTime 初始对象。
FromFileTime 将指定的 Windows 文件时间转换为等效的本地时间。
FromFileTimeUtc 将指定的 Windows 文件时间转换为等效的 UTC 时间。
FromOADate 返回与指定的 OLE 自动化日期等效的 DateTime。
GetDateTimeFormats 已重载。 将此实例的值转换为标准 DateTime 格式说明符支持的所有字符串表示形式。
GetHashCode 已重写。 返回此实例的哈希代码。
GetType 获取当前实例的 Type。 (从 Object 继承。)
GetTypeCode 返回值类型 DateTime 的 TypeCode。
IsDaylightSavingTime 指示此 DateTime 实例是否在当前时区的夏时制范围内。
IsLeapYear 返回指定的年份是否为闰年的指示。
op_Addition 将指定的时间间隔加到指定的日期和时间以生成新的日期和时间。
op_Equality 确定 DateTime 的两个指定的实例是否相等。
op_GreaterThan 确定指定的 DateTime 是否大于另一个指定的 DateTime。
op_GreaterThanOrEqual 确定指定的 DateTime 是否大于或等于另一个指定的 DateTime。
op_Inequality 确定 DateTime 的两个指定的实例是否不等。
op_LessThan 确定指定的 DateTime 是否小于另一个指定的 DateTime。
op_LessThanOrEqual 确定指定的 DateTime 是否小于或等于另一个指定的 DateTime。
op_Subtraction 已重载。 从指定的 DateTime 减去指定的 DateTime 或 TimeSpan。
Parse 已重载。 将日期和时间的指定字符串表示转换成其等效的 DateTime。
ParseExact 已重载。 将日期和时间的指定字符串表示转换成其等效的 DateTime。该字符串表示形式的格式必须与指定的格式完全匹配。
ReferenceEquals 确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。)
SpecifyKind 创建新的 DateTime 对象,该对象表示与指定的 DateTime 相同的时间,但是根据指定的 DateTimeKind 值的指示,指定为本地时间或协调通用时间 (UTC),或者两者皆否。
Subtract 已重载。 从此实例中减去指定的时间或持续时间。
ToBinary 将当前 DateTime 对象序列化为一个 64 位二进制值,该值随后可用于重新创建 DateTime 对象。
ToFileTime 将当前 DateTime 对象的值转换为 Windows 文件时间。
ToFileTimeUtc 将当前 DateTime 对象的值转换为 Windows 文件时间。
ToLocalTime 将当前 DateTime 对象的值转换为本地时间。
ToLongDateString 将此实例的值转换为其等效的长日期字符串表示形式。
ToLongTimeString 将此实例的值转换为其等效的长时间字符串表示形式。
ToOADate 将此实例的值转换为等效的 OLE 自动化日期。
ToShortDateString 将此实例的值转换为其等效的短日期字符串表示形式。
ToShortTimeString 将此实例的值转换为其等效的短时间字符串表示形式。
ToString 已重载。 已重写。 将此实例的值转换为其等效的字符串表示。
ToUniversalTime 将当前 DateTime 对象的值转换为协调通用时间 (UTC)。
TryParse 已重载。 将日期和时间的指定字符串表示转换成其等效的 DateTime。
TryParseExact 已重载。 将日期和时间的指定字符串表示转换成其等效的 DateTime。该字符串表示形式的格式必须与指定的格式完全匹配。
页首
显式接口实现
名称 说明
System.IConvertible.ToBoolean 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToByte 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToChar 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToDateTime 返回当前 DateTime 对象。
System.IConvertible.ToDecimal 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToDouble 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToInt16 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToInt32 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToInt64 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToSByte 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToSingle 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToType 将当前的 DateTime 对象转换为指定类型的对象。
System.IConvertible.ToUInt16 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToUInt32 不支持此转换。尝试这样做会引发 InvalidCastException。
System.IConvertible.ToUInt64 不支持此转换。尝试这样做会引发 InvalidCastException。
System.Runtime.Serialization.ISerializable.GetObjectData 使用序列化当前 DateTime 对象所需要的数据来填充 SerializationInfo 对象。
页首
请参见
参考
DateTime 结构
参考技术A 在VB中直接用Date和Time就是系统当前日期和时间,不用加Now参数。 参考技术B 直接用
strarticaltime=time()
strarticaldate=date()
我试验过的没错,
一楼用的是Java不是VB

以上是关于VB怎么获得与程序标题对应的进程名的主要内容,如果未能解决你的问题,请参考以下文章

linux中如何根据PID获得进程?

vb 检测某个进程是不是运行

如何根据Android 运行时的进程名找到对应APK包路径

用VB实现隐藏进程

vb如何同时读取多个进程名相同的进程

Linux中怎么通过PID号找到对应的进程名及所在目录