在日常工作中,经常需要管理Outlook的个人文件夹文件(PST)。有时,用户可能需要备份自己的PST文件,但往往因为不熟悉隐藏的AppData目录而遗漏了重要的文件。此外,PST文件的命名可能与Outlook中的文件夹名不一致,给文件管理带来困扰。更糟糕的是,一些用户仍在使用旧版的Outlook PST格式,这可能导致PST文件在接近满容时发生损坏。为了解决这些问题,开发了一款小工具,它可以回答以下问题:用户的用户名是什么?Outlook配置文件名称是什么?PST文件的路径和名称是什么?PST文件的版本(新/旧)是什么?在Outlook中显示为什么?PST文件的大小是多少?PST文件是何时创建的?此外,用户还可以将结果复制到剪贴板。
在更换用户的计算机时,需要记录每个用户正在使用的PST文件。这看起来是一个简单的任务,但需要研究数据存储的位置(注册表)以及如何以可读的格式提取这些数据。
首先,需要读取注册表。以下是一个使用VB.NET读取注册表的示例代码:
Dim ProfilesRoot As String = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"
Dim DefaultProfileString As String = "DefaultProfile"
Dim reg As RegistryKey = Nothing
Try
reg = Registry.CurrentUser.OpenSubKey(ProfilesRoot)
Dim DefaultProfile_Name = reg.GetValue(DefaultProfileString, 0).ToString
RichTextBox1.Text = "User Name: " & GetUserName() & vbCrLf
RichTextBox1.Text = RichTextBox1.Text & "Default Outlook Profile Name: " & DefaultProfile_Name & vbCrLf & vbCrLf
GetPSTsForProfile(DefaultProfile_Name)
Catch ex As Exception
' Outlook Profile registry keys do not exist
Me.Visible = True
MessageBox.Show("This user does not have an Outlook profile", "", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Application.Exit()
End Try
接下来,获取用户的名称:
Function GetUserName() As String
If TypeOf My.User.CurrentPrincipal Is Security.Principal.WindowsPrincipal Then
' The application is using Windows authentication.
' The name format is DOMAIN\USERNAME.
Dim parts() As String = Split(My.User.Name, "\")
Dim username As String = parts(1)
Return username
Else
' The application is using custom authentication.
Return My.User.Name
End If
End Function
获取PST文件的详细信息(参见完整源代码)。
在RichTextBox中添加文本颜色(数据输入后):
Dim Find As Integer
Dim BeginHere As Integer = 0
Dim SLength As Integer
BeginHere = 0
Dim SearchText1 As String = "User Name:"
SLength = SearchText1.Length
Do
Find = RichTextBox1.Find(SearchText1, BeginHere, RichTextBoxFinds.MatchCase)
If Find > -1 Then
RichTextBox1.SelectionColor = Color.Blue
BeginHere = BeginHere + SLength
If BeginHere > Len(RichTextBox1.Text) Then
Exit Do
End If
End If
Loop While Find > -1
RichTextBox1.Select(Len(RichTextBox1.Text) + 1, 0)
RichTextBox1.SelectionColor = Color.Black
将RichTextBox文本复制到剪贴板(通过按钮颜色闪烁显示数据已复制):
Clipboard.Clear()
Clipboard.SetText(RichTextBox1.Text, TextDataFormat.Text)
Button1.BackColor = Color.LightSalmon
Me.Update()
' wait .5 second
System.Threading.Thread.Sleep(500)
Button1.BackColor = Color.Snow
Me.Update()
尽管可以引导用户使用Outlook,但无法强迫他们将所有PST文件保存在同一个目录下。开发这个工具的原因是,花费了大量时间修复Outlook PST文件,而这个工具可以帮助用户记录他们正在使用的PST文件。
在执行之前,请务必验证文件的完整性,或者重新编译以确保安全。以下是编译后的pst_info.exe应用程序的校验和: