如何从vb.net中的浏览文件名中获取进程名称? [英] How to get process name from browse file name in vb.net ?

查看:105
本文介绍了如何从vb.net中的浏览文件名中获取进程名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hai

如何从vb.net中的浏览文件名中获取进程名称。



ex.if我使用文件浏览文件opendialogbox和文件名是money.txt,我需要得到像notepad.exe这样的进程名称



如果我浏览zip文件它将显示进程名称为 winRaR.exe









问候

Aravind

解决方案

如何使用GetRegisteredApplication的示例

  Dim  strProgramName  As   String  =   
Dim strShellAppName 作为 字符串 =
Dim strTestFileName As 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆