用VB将自己的程序加进Windows右键菜单的三种方法
- 下载提示
- 文本预览
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用VB将自己的程序加进Windows右键菜单的三种方法
引言:当我们在资源管理器中右键点击某个(或某些)文件时,Windows会调出对这些文件进行的相应操作,这就是Windows右键菜单,将自己的程序加进右键菜单,就可以很方便的进行我的相应操作了。这里给出加进右键菜单的三种方法。
方法一、通过对注册表相应键新建项并赋值实现
首先介绍一下要执行的目标程序CopyPathToClipboard的作用,该程序的界面见图一,实现将选中的文件(或目录)的路径复制到剪切板供其它程序使用的功能。
要实现单个文件(或目录)进行右键操作,只需对注册表如下键添加相应键值就可以了。
点击系统【开始】-【运行】-输入Regedit,打开注册表。展开【HKEY_CLASSES_ROOT】,继续打开【*】-【shell】-新建项【CopyPathToClipboard】-【Command】,在【Command】建默认值:E:\Program Files\XZB\CopyPathToClipboard.exe “%1”,“E:\Program Files\XZB\”是程序CopyPathToClipboard.exe的文件路径,见图二。
如果还需对目录进行操作,定位到注册表项:【HKEY_CLASSES_ROOT\Directory\shell\】进行同样添加项【CopyPathToClipboard】-【Command】,在【Command】建默认值:E:\Program Files\XZB\CopyPathToClipboard.exe “%1”。
这样当你右击一个文件(或目录)时,就会在右键菜单中显示:CopyPathToClipboard,点击【CopyPathToClipboard】,就会调出主程序即可进行相应操作了,见图三。
1
主程序CopyPathToClipboard在Private Sub Form_load()中有如下关键代码:
Private Sub Form_load()
If Command$ <> "" Then
If Left$(Command$, 1) = Chr(34) And Right$(Command$, 1) = Chr(34) Then
Combo1.Text = Mid$(Command$, 2, Len(Command$) - 2) ' 去除前后两个引号
Else
Combo1.Text = Command$
End If
End If
'...
End Sub
这样就实现了将参数传递进Combo1(CopyPathToClipboard的顶端组合框即为Combo1)中供后续程序代码调用处理。
要说明的是:如果选择了多个文件,右键菜单中也有CopyPathToClipboard,如果此时点击执行CopyPathToClipboard将会打开多个CopyPathToClipboard主程序窗口。
2
方法二、利用Windows右键菜单的【发送到】功能实现
这里以另一个程序SendToSelect.exe为例说明,该程序运行界面见图四:
实现将选中的文件【含结构复制】、【含结构移动】、【合并】、【批量命名】等功能。主程序窗体中上半部为RichTextBox1,供接收传递过来的参数。
只要在Windows用户的SendTo文件夹下建一个要出现在右键菜单程序(如E:\Program Files\XZB\SendToSelect.exe)的快捷方式,比如用户名称为XZB,则该文件夹路径一般为:E:\Program Files\XZB\SendTo,然后在右键菜单的【发送到】中就会出现你的程序,见图五。
3
只要在主程序SendToSelect.exe的VB源代码中处理传递过来的参数就可以了,通过这种方式传递给主程序的参数(即文件路径集)格式为:每个文件名路径间用空格分隔,如果某个文件名路径中含有空格,该文件名路径就用引号引起来,通过一个函数GetCanShuNum对传递过来的文件路径集参数进行处理。
Private Sub Form_Load()
If Command$ <> "" Then
Dim MyCanShu() As String, I As Integer, xPosition As Integer
XX$ = Command$
GetCanShuNum XX$, " ", MyCanShu
FenGeFu$ = Chr$(13) & Chr$(10)
RichTextBox1.Text = Join(MyCanShu, Chr$(13) & Chr$(10))
If Left$(RichTextBox1.Text, Len(FenGeFu$)) = FenGeFu$ Then
RichTextBox1.Text = Mid$(RichTextBox1.Text, Len(FenGeFu$) + 1) ' 去掉Join产生的第一个分隔符End If
End If
End Sub
调用的过程GetCanShuNum
Function GetCanShuNum(ByVal s As String, FenGeFu$, CanShu() As String) As Long
If s <> "" Then
Dim I As Long, T As String
Dim Si As Long, Ei As Long
Dim F1 As Byte
Dim Num As Long
F1 = 0
Num = 0
s = FenGeFu$ & Replace(Replace(Trim$(s), Chr(10), ""), Chr(13), "") & FenGeFu$
For I = 1 To Len(s)
T = Mid(s, I, 1)
Select Case F1
Case 0 ' 开始分隔符
If T = FenGeFu$ Then ' "号
If Mid(s, I = 1, 1) = Chr(34) Then '判断分隔符后参数开始是否引号
F1 = 2 ' 下次 For循环到Case引号段
I = I + 1: Si = I + 1
Else
F1 = 1: Si = I + 1
End If
End If
Case 1 ' 结束分隔符
Do Until T = FenGeFu$ ' 程序优化段
I = I + 1
T = Mid(s, I, 1)
Loop
'If T =FenGeFu$ Then
F1 = 0
Ei = I
Num = Num + 1
4