如何从vb.net中的浏览文件名中获取进程名称? [英] How to get process name from browse file name in vb.net ?
问题描述
Hai
如何从vb.net中的浏览文件名中获取进程名称。
ex.if我使用文件浏览文件opendialogbox和文件名是money.txt,我需要得到像notepad.exe这样的进程名称
如果我浏览zip文件它将显示进程名称为 winRaR.exe
问候
Aravind
如何使用GetRegisteredApplication的示例
Dim strProgramName As String =
Dim strShellAppName 作为 字符串 =
Dim strTestFileNameAs String = C:\windows\CSPU.txt
如果 GetRegisteredApplication(strTestFileName,_
Path。 GetExtension(strTestFileName),_
strProgramName,strShellAppName)然后
MsgBox( 程序名称:& strProgramName& vbNewLine& _
Shell应用程序名称:& strShellAppName)
Else
MsgBox( 找不到& strTestFileName& 的关联。)
结束 如果
GetRegisteredApplication函数
公共 功能 GetRegisteredApplication( ByVal ParamFileName As 字符串,_
ByVal FileExtension As 字符串,_
ByRef AppName As 字符串, ByR ef ShellAppName As String ) As 布尔
'
' 按文件扩展名返回已注册的申请
'
Dim StrExt 作为 字符串
Dim StrProgID 作为 字符串
Dim StrExe 作为 字符串
Dim oHKCR 作为 RegistryKey ' HKEY_CLASSES_ROOT
Dim oProgID As RegistryKey
Dim oOpenCmd As RegistryKey
Dim TempPos 作为 整数
尝试
' 将扩展点添加到扩展
如果 FileExtension.StartsWith( 。 )然后
StrExt = FileExtension
否则
StrExt = 。& FileExtension
结束 如果
' 获取此扩展程序的编程标识符
尝试
oHKCR =注册表.ClassesRoot
oProgID = oHKCR.OpenSubKey(StrExt)
StrProgID = oProgID.GetValue( Nothing )。ToString
oProgID.Close( )
Catch
' 否ProgID,返回false
返回 错误
结束 尝试
' 获取关联的应用程序
尝试
oOpenCmd = oHKCR.OpenSubKey(StrProgID& \ shell * \\ openn \ command)
StrExe = oOpenCmd.GetValue( Nothing )。ToString
oOpenCmd.Close()
Catch
' 缺少默认申请
返回 错误
结束 尝试
TempPos = StrExe.IndexOf( %1)
如果 TempPos> 0 然后
' < span class =code-comment>用ParamFileName替换%1占位符
StrExe = StrExe.Substring( 0 ,TempPos)
AppName = StrExe
StrExe = StrExe& & Convert.ToChar( 34 )& _
ParamFileName& Convert.ToChar( 34 )
ShellAppName = StrExe
Else
' 找不到%1占位符,追加ParamFileName
AppName = StrExe
ShellAppName = StrExe& & Convert.ToChar( 34 )& _
ParamFileName& Convert.ToChar( 34 )
结束 如果
返回 True
Catch ex As 异常
返回 错误
结束 尝试
结束 功能
测试输出
消息框包含:
Quote:程序名称:C:\ Windows \ system32 \ NOTEPAD.EXE
应用程序名称:C:\ Windows \ system32 \ NOTEPAD.EXEC :\windows\CSPU.txt
Hai
How to get process name from browsed file name in vb.net.
ex.if i browse file using file opendialogbox and file name is money.txt, and i need to get process name like "notepad.exe"
if i browse zip file it will show process name as "winRaR.exe"
regards
Aravind
Example of how to use GetRegisteredApplication
Dim strProgramName As String = "" Dim strShellAppName As String = "" Dim strTestFileName As String = "C:\windows\CSPU.txt" If GetRegisteredApplication(strTestFileName, _ Path.GetExtension(strTestFileName), _ strProgramName, strShellAppName) Then MsgBox("Program Name: " & strProgramName & vbNewLine & _ "Shell Application Name: " & strShellAppName) Else MsgBox("Association for " & strTestFileName & " was not found.") End If
GetRegisteredApplication Function
Public Function GetRegisteredApplication(ByVal ParamFileName As String, _ ByVal FileExtension As String, _ ByRef AppName As String, ByRef ShellAppName As String) As Boolean ' ' Return registered application by file's extension ' Dim StrExt As String Dim StrProgID As String Dim StrExe As String Dim oHKCR As RegistryKey ' HKEY_CLASSES_ROOT Dim oProgID As RegistryKey Dim oOpenCmd As RegistryKey Dim TempPos As Integer Try ' Add starting dot to extension If FileExtension.StartsWith(".") Then StrExt = FileExtension Else StrExt = "." & FileExtension End If ' Get Programmatic Identifier for this extension Try oHKCR = Registry.ClassesRoot oProgID = oHKCR.OpenSubKey(StrExt) StrProgID = oProgID.GetValue(Nothing).ToString oProgID.Close() Catch ' No ProgID, return false Return False End Try ' Get associated application Try oOpenCmd = oHKCR.OpenSubKey(StrProgID & "\shell\open\command") StrExe = oOpenCmd.GetValue(Nothing).ToString oOpenCmd.Close() Catch ' Missing default application Return False End Try TempPos = StrExe.IndexOf(" %1") If TempPos > 0 Then ' Replace %1 placeholder with ParamFileName StrExe = StrExe.Substring(0, TempPos) AppName = StrExe StrExe = StrExe & " " & Convert.ToChar(34) & _ ParamFileName & Convert.ToChar(34) ShellAppName = StrExe Else ' No %1 placeholder found, append ParamFileName AppName = StrExe ShellAppName = StrExe & " " & Convert.ToChar(34) & _ ParamFileName & Convert.ToChar(34) End If Return True Catch ex As Exception Return False End Try End Function
Test output
The messagebox contains:
Quote:Program Name: C:\Windows\system32\NOTEPAD.EXE
Application Name: C:\Windows\system32\NOTEPAD.EXE "C:\windows\CSPU.txt"
这篇关于如何从vb.net中的浏览文件名中获取进程名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!