VB05编写外接程序的有用函数(COM系列)

上一篇 / 下一篇  2006-10-19 13:22:28 / 天气: 晴朗 / 心情: 高兴 / 个人分类:VB技术难点

以下代码对于外接程序的制作非常有用,
G5dHF+m C$@0注意:在DTE80下处理项目需要使用DTE7中的类,而不是DTE80。
Q{j ~Mpd2f0
%?Y%i i(|R0Imports System
+n4HECO-IF0Imports Microsoft.VisualStudio.CommandBars精英博客f]?&jPe:]
Imports Extensibility
h3Q3mIM/Z"]\0Imports EnvDTE
*Pa _2j(`"@.|0Imports EnvDTE80
2Fs6N,v1i'm WZ0Module modFuns

    ''' <summary>精英博客0P1Ay/B5WW:w*~]
    ''' 获取当前语言版本的菜单标题字符串.
!XU{8Z}*Y5M0    ''' </summary>精英博客Hi"M3z[td8y#e Y
    ''' <param name="resKey">标准字符串名称.</param>精英博客f*J4|(|h/~YR [Tl
    ''' <returns></returns>
%]CXK*cZ0    ''' <remarks></remarks>
T,q.v,m&jX z6h0    Public Function GetDTEMenuName(ByVal resKey As String) As String精英博客j-Q,mV#L{+}?
        '    功能:该代码实现从资源文件中读取DTE的菜单标题精英博客&W N/F:h/OXnD
        '完成日期:2006-01-13精英博客-n/RsX}D
        Dim ResMg As System.Resources.ResourceManager = New System.Resources.ResourceManager("CoderHelper.CommandBar", System.Reflection.Assembly.GetExecutingAssembly())精英博客I;H UbFE3_
        Dim CultureInfo As System.Globalization.CultureInfo = New System.Globalization.CultureInfo(chDTE.LocaleID)精英博客'A-x9Y"B0U0c
        Dim chMenuName As String = ResMg.GetString(String.Concat( _
'EK$lZTZ#b0                                    CultureInfo.TwoLetterISOLanguageName _精英博客m h!D)X pa1W1G
                                    & IIf(CultureInfo.TwoLetterISOLanguageName = "zh", _
'D(o;tA2k9W C0                                    "-" & CultureInfo.ThreeLetterWindowsLanguageName.ToString, _精英博客2M*~S^@ _
                                    "").ToString, resKey))精英博客 ]"^(D P:],S6Q
        '根据CommandBar.resx的资源分析,该资源中仅仅包含了中文的多类别,既简体和繁体两种,对这两种 精英博客|NZ,u3|Hdb'W
        '语言而言, 需要指定 CultureInfo.ThreeLetterWindowsLanguageName是'CHS'还是'CHT',然后与zh
*_C%g? _i0        '之间需要 '-'隔开故.判断如果为'zh'则追加加字符串CultureInfo.ThreeLetterWindowsLanguageName
&z JX)JO#n0        '然后与Concat 的第二个参数连接出一字符串给GetString()
(rB`1[7Sxg0        '该方法仅仅用于该语言资源包.且,该资源包完全能够胜任开发任何一种语言的外接程序
o"T5To \bX:j0        Return chMenuName
d,[*sn T-P [ ME0    End Function
"@)Y.S{8C:\4Z?yk0    ''' <summary>精英博客3By+}J$snYUx|
    ''' 添加命令.精英博客`6pw)j:Pf
    ''' </summary>精英博客^"R9qs3q
    ''' <param name="CmdName">工具条名称</param>精英博客M(~ Yo4IG H+dd
    ''' <param name="SubItemName">工具条子项目名称</param>精英博客8[UQ3ojI5@d2O
    ''' <param name="Name">要添加的项目名称,</param>精英博客j2S!o@4p n%X pbu
    ''' <param name="Caption"> 要添加的项目标题.该标题还用于删除该按钮/项</param>精英博客#YOK{!iR
    ''' <param name="Position">在SubItemName 项目中的位置</param>精英博客2QutT ~t ]%dLh
    ''' <param name="Tooltip">按钮的提示条</param>精英博客+^&S)i ~`(WH D W
    ''' <param name="IconID">按钮的图标代码,该代码未Office表情代码,如果要自定义,请设置MsoButton为假</param>
a Myg$z$Tt:m0    ''' <param name="MsoButton">真时使用Office中的表情图标,假时使用附属资源DLL中的图片</param>
J3]7pGX~)b0    ''' <param name="AtAfterItem">设定按钮的位置是否在一个按钮项的后面.</param>
V Q'K8O5YR0^ dP}0    ''' <param name="AIID">参照项ID 如果AtAfterItem 为真,则按钮位置将是SubItemName 项中第 AIID +Position 项.</param>精英博客]"N4U A0y\u|hbb
    ''' <param name="NeedRegAlias">决定是不是需要为该命令注册别名,以便在命令窗口执行.</param>精英博客u#\x+J HzC \8[9zdp
    ''' <param name="DontAddToCmdBar"> 不要添加到按钮或工具条中或菜单项中.</param>
Tx(Og;rn N ] FB!n0    ''' <returns></returns>
BH d \'ta0    ''' <remarks>注意:该函数建议采用于菜单的添加操作</remarks>精英博客]fnWkh
    Public Function AddCommand(ByVal CmdName As String, _
Q K%itb |0                                ByVal SubItemName As String, _
1W'~7c2~@n9l0                                ByVal Name As String, _精英博客.Y.dSXfUm
                                ByVal Caption As String, _精英博客\^_La4Lsk'?O
                                Optional ByVal Position As Integer = 1, _
-A @T\f5]0                                Optional ByVal Tooltip As String = vbNullChar, _精英博客 W Tp Z$?G{
                                Optional ByVal IconID As object = Nothing, _精英博客TN_9m_K;u
                                Optional ByVal MsoButton As Boolean = True, _
Y0QU8B%kzK0                                Optional ByVal AtAfterItem As Boolean = False, _精英博客D&EU*w1PyV9s"vHK
                                Optional ByVal AIID As Integer = 0, _精英博客,h^D0u\-hid5?
                                Optional ByVal NeedRegAlias As Boolean = True, _
8_k?3{(x}'H*z0                                Optional ByVal DontAddToCmdBar As Boolean = False) As Exception

        Dim Cmds As Commands2 = CType(chDTE.Commands, Commands2)精英博客qasWiz%z
        Dim CmdBars As CommandBars = CType(chDTE.CommandBars, CommandBars)精英博客:Taz`8]l,])q
        Dim mnuBarCmdBar As CommandBar = CmdBars.Item(CmdName) '菜单精英博客$Zi5D/hVq;\y
        Dim CmdCtrl As CommandBarControl = mnuBarCmdBar.Controls.Item(SubItemName)
f h!@r j6V u"b_ h0        Dim CmdPopup As CommandBarPopup = CType(CmdCtrl, CommandBarPopup)
a/epv u(p n-F0        Try
:wI2eZL!K0            Dim chCmdConfig As Command = Cmds.AddNamedCommand2( _精英博客3I(Q&dvB9j$}!U
                                            chAddIN, Name, Caption, Tooltip, _
Ol#y4hCu%o!}CSv0                                              MsoButton, _精英博客D0g,M t.Yk U_
                                             IconID, _
&S'E$ytJnwI0                                             Nothing, _精英博客'Aq.p-@dhpa
                                            CType(vsCommandStatus.vsCommandStatusSupported, Integer) + CType(vsCommandStatus.vsCommandStatusEnabled, Integer), _
&l,`'I8S.`\}0                                            vsCommandStyle.vsCommandStylePictAndText, _
2J+N2g"f8V A#GDic0                                            vsCommandControlType.vsCommandControlTypeButton)精英博客rV-J o L,\
            If DontAddToCmdBar = False Then精英博客5Fm8~L&~ p L0iw
                Try
t.sb6J0FJu0                    If AIID <> 0 Then
;He6h8dO K/NB0                        chCmdConfig.AddControl(CmdPopup.CommandBar, _精英博客^F3nu7n@ {+h~
                                             CInt(IIf(AtAfterItem, _
wU.YiG.C `0                                                      CmdPopup.CommandBar.FindControl(Id:=AIID).Index + Position, _
?s9K2Yd`"F0                                                      Position)))精英博客jd7Y7x!~"J:mrQ
                    Else精英博客`]hB}:d5a4y r ]-Ld
                        chCmdConfig.AddControl(CmdPopup.CommandBar, Position)
;]^M m ^0                    End If

                Catch ex As Exception精英博客4^G|o*F b1z
                    chOutText("向" & CmdPopup.Caption & "中添加" & chCmdConfig.Name & "不成功!")精英博客-Q X`3d Mp5t$o,E
                End Try
~-Y9|(I:X R KT0            End If精英博客x?i-J9` |
            If NeedRegAlias Then精英博客+? [e1Yk5wi
                RegAlias(chAddIN.Name & ".Connect." & Name, "ch" & Name.ToLower)
/s7k;z)y0w.e0                '外接程序的命令总是以外接程序名称和Connect 类的名称为前缀的.精英博客)mRGD;O]F
                '同时本程序为了方便使用由本程序提供的外接,在别名前加 "ch" ,精英博客6@ FQ+^0A0?#o.~
                '程序以小写为基准.
IjMw:}&H6J3},x0            End If
r:o.ta?!N0            Return (Nothing)

        Catch ex As Exception
k6u cS {e0            chOutText("向[" & SubItemName & "]中添加[" & Caption & "]项和命令'" & Name & "'失败!")
VA e@0ZD0            Return ex精英博客"f5O ^6l+N
        End Try
%qm4M!?9^}t P0    End Function精英博客N'O{$kuB/c0l2VgQ
    ''' <summary>精英博客2r4F5eZ vU5C
    ''' 精英博客Ll$tzfn%`:]2P&iF
    ''' </summary>
$|h(g,X:E@(H;OT$~ r0    ''' <param name="Owner">拥有该命令和项的菜单或工具条</param>
[O3`/w!mR0    ''' <param name="Name">命令名称.</param>精英博客bAp jeT5`#L
    ''' <param name="Caption">要添加的项目标题.该标题还用于删除该按钮/项</param>精英博客eZ&D%^A0N
    ''' <param name="Position">在SubItemName 项目中的位置</param>精英博客%?w/XoH$r
    ''' <param name="Tooltip">按钮的提示条</param>
q?)]2G!H0    ''' <param name="IconID"> 按钮的图标代码,该代码未Office表情代码,如果要自定义,请设置MsoButton为假</param>
:A{o JBl&v0    ''' <param name="MsoButton">真时使用Office中的表情图标,假时使用附属资源DLL中的图片</param>精英博客|mf J:y\ b([
    ''' <param name="AtAfterItem">设定按钮的位置是否在一个按钮项的后面.</param>精英博客w~^,xNU
    ''' <param name="AIID"> 参照项ID 如果AtAfterItem 为真,则按钮位置将是SubItemName 项中第 AIID +Position 项.</param>
/Mm1lXJV6zR|;j0    ''' <param name="NeedRegAlias">决定是不是需要为该命令注册别名,以便在命令窗口执行.</param>精英博客j,mgA%O
    ''' <param name="DontAddToCmdBar">不要添加到按钮或工具条中或菜单项中.</param>精英博客A(kZpxG"s
    ''' <returns></returns>
qm+Rd!@0    ''' <remarks>注意:该函数建议采用于菜单的添加操作</remarks>精英博客0l/hDe'd I D
    Public Function AddCommand(ByVal Owner As CommandBarControl, _精英博客 oc(qeL0v
                                   ByVal Name As String, _
$PP^nc S0                                   ByVal Caption As String, _精英博客FV5c:|I:A
                                   Optional ByVal Position As Integer = 1, _
8[/Pf%? rb6H0                                   Optional ByVal Tooltip As String = vbNullChar, _
} ~Xq)f/_T0                                   Optional ByVal IconID As object = Nothing, _
g-\)V8d%}Ob,h%?)[0                                   Optional ByVal MsoButton As Boolean = True, _精英博客_};u\*oS:N
                                   Optional ByVal AtAfterItem As Boolean = False, _精英博客9`-p'n}'N)k d
                                   Optional ByVal AIID As Integer = 0, _
mA9x\KB0PR"?'H0                                   Optional ByVal NeedRegAlias As Boolean = True, _
NI!w} {#N2H;l0                                   Optional ByVal DontAddToCmdBar As Boolean = False) As Exception
}'U)lw,|wF4?0  精英博客KW/^!]e2r\TN
        '
` oJs"I\bSl0        Dim Cmds As Commands2 = CType(chDTE.Commands, Commands2)精英博客[9CZGzb
        Dim CmdBars As CommandBars = CType(chDTE.CommandBars, CommandBars)精英博客!@ Z%}.X0Q0Z$Lc[
        Dim mnuBarCmdBar As CommandBar = CmdBars.Item("MenuBar") '菜单
[Vb.[a0        Dim CmdPopup As CommandBarPopup = CType(Owner, CommandBarPopup)精英博客PNd CQ[PVu4K.i
        Dim ctl As CommandBarControl = Nothing
0_:zAD!F2aIq0        Try
Rg n8A6@T0            Dim chCmdConfig As Command = Cmds.AddNamedCommand2( _
H*k AG {0                                            chAddIN, Name, Caption, Tooltip, _
*c5D:P^o!O|0                                              MsoButton, _精英博客)|;mPKt@e3i2]
                                             IconID, _精英博客wzJ"Y/}6g
                                             Nothing, _
4G ?'a,\"|@ e[w3U0                                            CType(vsCommandStatus.vsCommandStatusSupported, Integer) + CType(vsCommandStatus.vsCommandStatusEnabled, Integer), _精英博客,x;N(rXT8x
                                            vsCommandStyle.vsCommandStylePictAndText, _精英博客7xC;O3` bm\
                                            vsCommandControlType.vsCommandControlTypeButton)
)i!| r+JI0            If DontAddToCmdBar = False Then
/A0C u7w\|i0                Try
I6a2K{[+`}0                    If AIID <> 0 Then精英博客u }.Ue~ l&Lh%E'PiQ+P
                        chCmdConfig.AddControl(CmdPopup.CommandBar, _
!W+_'Q7y"p%z/L0                                             CInt(IIf(AtAfterItem, _
i&y2F9~F"td7U2q0                                                      CmdPopup.CommandBar.FindControl(Id:=AIID).Index + Position, _精英博客yaAu+m3k.os~.\4e"G
                                                      Position)))精英博客G`+T0l%o9oH!X
                    Else精英博客.t\i6A1X4u_
                        chCmdConfig.AddControl(CmdPopup.CommandBar, Position)
2J&p+v@H^/|M E0                    End If

                Catch ex As Exception精英博客0O?Nn(?#h W
                    chOutText("向" & CmdPopup.Caption & "中添加" & chCmdConfig.Name & "不成功!")
3{'l$mE%q@w0                End Try精英博客 ^j*ln!l.NMp7k%r
            End If精英博客xq,wW r&j*b-s,?i
            If NeedRegAlias Then
| S\3V;qh0td:g0                RegAlias(chAddIN.Name & ".Connect." & Name, "ch" & Name.ToLower)
h(g@ @)B:Si0                '外接程序的命令总是以外接程序名称和Connect 类的名称为前缀的.
(A\X"USj:?,i0                '同时本程序为了方便使用由本程序提供的外接,在别名前加 "ch" ,
\/Y"|,`U)R7H0                '程序以小写为基准.
X {nM6z2~'zuGO0            End If精英博客8p@`*U+{*P
            Return Nothing

        Catch ex As Exception精英博客3OW"M2z;d
            chOutText("向[" & CType(Owner, CommandBarControl).Caption & "]中添加[" & Caption & "]项和命令'" & Name & "'失败!")精英博客6G+w rrEVjN W-~4F
            Return ex
Stk)]E0        End Try
:x'bkT P9}S0    End Function

    ''' <summary>
'K[h3zf0    ''' 简单的添加命令精英博客 \,Y1A:]W
    ''' </summary>
g0YuP,bO8o0    ''' <param name="cName">命令名称</param>
"H6e2T\~r9zo*l0    ''' <param name="cAlias">别名</param>
8fm ^nc"J^0    ''' <remarks>用于添加命令行直接执行的命令.</remarks>
`D V D4NPk%m+TW0    Public Sub AddCmd(ByVal cName As String, Optional ByVal cAlias As String = "")
%D U*W*K$c1^F9tD d)C0        Try
,WA9T T:^I y.^k'T0            Dim cmds As Commands2 = CType(chDTE.Commands, Commands2)
|K7J2k9l0            cmds.AddNamedCommand2(chAddIN, cName, cName, cName, True)
3Fa^2\)Q#i'AE*r0        Catch ex As Exception精英博客P*q:b2@"K_.{9F3C:m-J
            chOutText("添加命令[" & cName & "]失败!")精英博客E#[\2UOS4jS
        End Try精英博客p&v7R$pT)I:a@(v
        Try精英博客M&@t(dX2h+s A5M
            If cAlias.Trim <> "" Then精英博客l ?-IyV9r1e)So
                RegAlias(chAddIN.Name & ".Connect." & cName, "ch" & cAlias.ToLower)精英博客!cm0^0]O7z(ujm.F
            End If精英博客p3y{+^ IfBF
        Catch ex As Exception精英博客fjrLV&O
        End Try精英博客1G6c?X'L+D*e9f
    End Sub

精英博客+I2W6C0t9L`]{p
    ''' <summary>
8|Sq!nY~.UiBfD-A0    ''' 删除一个命令.
!ty t#C%c,ISbE0    ''' </summary>精英博客~{z^9L0i
    ''' <param name="cName">名称.</param>精英博客m0T;^%_ xz5h
    ''' <param name="cAlias">别名</param>
gBs;sV-kf3u0K h0    ''' <remarks></remarks>
8}/Bb Jc8^O)`K0    Public Sub DelCmd(ByVal cName As String, Optional ByVal cAlias As String = "")精英博客,a Waq*q`
        Try精英博客!rxzO UWr:Ds+A}
            Dim cmds As Commands2 = CType(chDTE.Commands, Commands2)
ag;E7{q&U/z0            cmds.Item(cName).Delete()

        Catch ex As Exception
#N Z8F!J ]!J9eD0            chOutText("删除命令[" & cName & "]失败!")精英博客:QYt N i(B$q@G
        End Try精英博客7O lLc tgeD
        Try
sgo&V2KikB0            RegAlias("", "ch" & cAlias.ToLower, True)
(@7W?Y'@` f1~K3i0        Catch ex As Exception

        End Try
o[2k)F j%],T*_(M/OF0    End Sub

精英博客1v:V-r4o4`E{m
    ''' <summary>
*s/x7h"b6I7u#Ge0qB0    ''' 从菜单或工具条中删除指定的命令精英博客-RaV0f gFvy0Z{~
    ''' </summary>
H0x&Q.OF^a`0    ''' <param name="CmdName"></param>
#My6mH|?0    ''' <param name="SubItemName"></param>精英博客*bW6l,c2T l'A1O8zO r
    ''' <param name="Name"></param>精英博客j_m}Tm6{
    ''' <param name="Caption"></param>
:a3L { sJ+B `0    ''' <returns></returns>
%{:@:f kXL_B~0    ''' <remarks></remarks>精英博客SW.\:X'RxS-C)Vl
    Public Function DeleteCommand(ByVal CmdName As String, ByVal SubItemName As String, ByVal Name As String, ByVal Caption As String) As Exception精英博客*t:fQ)M5xz^ {
        'CmdName 工具条名称, SubItemName 工具条子项目名称,Name 要添加的项目名称,精英博客f|!XV*C E~
        'Caption 要添加的项目标题.此方法内用于删除该按钮/项精英博客 `6v(D {t4K^^7R;v
        Dim e As Exception = Nothing精英博客!DP9k2KsX:_Yr
        Dim Cmds As Commands2 = CType(chDTE.Commands, Commands2)
p_%V6?M;`0C7en(F0        Dim CmdBars As CommandBars = CType(chDTE.CommandBars, CommandBars)
:y4w](mdCJRn e0        Dim mnuBarCmdBar As CommandBar = CmdBars.Item(CmdName) '菜单
!K Z \Fyw+t4x0        Dim CmdCtrl As CommandBarControl = mnuBarCmdBar.Controls.Item(SubItemName)精英博客Tk:y'q[9Mz
        Dim CmdPopup As CommandBarPopup = CType(CmdCtrl, CommandBarPopup)精英博客6y0QQ kd.}
        Try
x`N0j"xI0            Cmds.Item(chAddIN.Name & ".Connect." & Name).Delete()精英博客5| on1GBC ~5T%C
            RegAlias(chAddIN.Name & ".Connect." & Name, "ch" & Name.ToLower, True)精英博客Fk6UL3P(?
        Catch ex As Exception
In4jV0@0            e = ex
/f hCF\&eK*j0        End Try精英博客)X$X;l#s%\'R&c ~
        Try
E6~)|Koc,T0            Dim chCmdConfig As CommandBarControl = CmdPopup.Controls(Caption)精英博客&[/Zgk:R/RyR
            chCmdConfig.Delete()精英博客s{z3Lq+e0NL_*y
        Catch ex As Exception
k?vLC @Z5^x U0            e = ex
oU2Kc&h$GBu!it0        End Try
RruZ3O)@"}tO0        Return e
M| _z{a_x0    End Function

    ''' <summary>精英博客J'BzKh~
    ''' 删除指定菜单或工具条中的命令.
)L"g"? k K0    ''' </summary>
'Z)iPLP8}%@t0    ''' <param name="Owner">所有者</param>
,rp }^*j%Z/rv&?0    ''' <param name="Name">名称.</param>
_+B8nV ?!Xp0    ''' <param name="Caption">标题</param>
8D@2LY,ijaw0    ''' <returns></returns>
Z-c-n`qb3?Tv ~0    ''' <remarks></remarks>精英博客+Z(| p4L$O"N#}
    Public Function DeleteCommand(ByVal Owner As CommandBarControl, ByVal Name As String, ByVal Caption As String) As Exception
?(^7nY+M S n0        'CmdName 工具条名称, SubItemName 工具条子项目名称,Name 要添加的项目名称,精英博客6m+Ir)wo4_
        'Caption 要添加的项目标题.此方法内用于删除该按钮/项
[M ]$BklaDh0        Dim e As Exception = Nothing精英博客$U(g O,eW
        Dim Cmds As Commands2 = CType(chDTE.Commands, Commands2)
Ww#ji0k7b M.k q0        Dim CmdBars As CommandBars = CType(chDTE.CommandBars, CommandBars)精英博客(\N T5iv*p-^/OZ
        Dim mnuBarCmdBar As CommandBar = CmdBars.Item("MenuBar") '菜单精英博客 P+tU3{LmDG
        Dim CmdCtrl As CommandBarControl = Owner
g0x mOu!V:geU&j0        Dim CmdPopup As CommandBarPopup = CType(CmdCtrl, CommandBarPopup)
r(r-JL Mx0        Try精英博客 i:i KH"E\jm fb
            Cmds.Item(chAddIN.Name & ".Connect." & Name).Delete()
*f!OFuxks:\0            RegAlias(chAddIN.Name & ".Connect." & Name, "ch" & Name.ToLower, True)精英博客qDYxE)t
        Catch ex As Exception精英博客mqu k2C [^d
            e = ex
e.v T s7y y]S0        End Try
o&S XJ\jea0        Try精英博客J!V9eu:fy
            Dim chCmdConfig As CommandBarControl = CmdPopup.Controls(Caption)
S$y!_:Ir"Y W\3{2B0            chCmdConfig.Delete()精英博客{+z/?F*W~
        Catch ex As Exception精英博客 \3L4af!I:VU
            e = ex精英博客C.f Rb7{xd
        End Try
7o;dA8~(B?0        Return e精英博客"A/b@qx?3iV
    End Function精英博客e"~s!?;H Ea
    ''' <summary>精英博客VJ2m3?b,[t"I"O!PC
    ''' 注册别名.精英博客$a#^{Ep/A
    ''' </summary>精英博客2C]6f*J2lW
    ''' <param name="cCmd">完整命令</param>
h3H:G"W g0    ''' <param name="cAlias">别名</param>
`SW7x%H^ @4qo(D'X/T0    ''' <param name="bDelete">是删除还是注册.T.删除.</param>
#NT9y oR@G0    ''' <remarks></remarks>
HK]-g3j0    Public Sub RegAlias(ByVal cCmd As String, ByVal cAlias As String, Optional ByVal bDelete As Boolean = False)精英博客$kVZuw6}4e2c:u
    
4Zpm;||9B#u'z0        Try
.M6D q"Dc0            chDTE.ExecuteCommand("Tools.Alias ", cAlias & "    " & IIf(bDelete, "  /delete", cCmd).ToString)精英博客4\.E.GM ~1|
            My.Settings.chAliasList = IIf(bDelete, _精英博客V6Y+p+^B P
                                          Replace(My.Settings.chAliasList, cAlias & Space(4) & cCmd & vbCrLf, ""), _精英博客#sD;_2{&w
                                          My.Settings.chAliasList & cAlias & Space(4) & cCmd & vbCrLf).ToString精英博客uY,]+\x dQ
            chOutText(IIf(bDelete, "删除", "注册").ToString & "别名'" & cAlias & "'成功!", bMustOut:=False)精英博客6U8T!^ v^&M/z!q0I%x
        Catch ex As Exception精英博客H6ZO'O{,H&p9UghJ
            chOutText(IIf(bDelete, "删除", "注册").ToString & "别名" & cAlias & "失败!")
5Gh.Q4w(T:V"Xn+ro0        End Try

    End Sub


[ J,oA{*r-B:n:v_$o0    ''' <summary>
9y GCJ-ts0    ''' 在输出窗口和状态条中显示文本精英博客A;Z.CSE-y
    ''' </summary>
fMP4C wf&_0    ''' <param name="Text">为要输出的文本内容</param>
2k4Hq7M.s)y!Lr0    ''' <param name="cCrlf">决定是不是要换行,默认为换行</param>
R/B)a~(Z eH0    ''' <param name="bMustOut">决定该输出是不是必须输出的.</param>精英博客|MZ^g1w6{
    ''' <remarks>如果不是重要的信息, 用户的不显示详细信息设置将过滤该输出信息</remarks>
8koF8g4V%\0    Public Sub chOutText(ByVal Text As String, Optional ByVal cCrlf As Boolean = True, Optional ByVal bMustOut As Boolean = True)

精英博客(`X:n b)t
        Try
&`'G0jgK/{.X? Ep0            If bMustOut Or My.Settings.modFuns_OutAllInf = True Then精英博客qCk5i.gc_
                '如果该字符串要求必须输出或不要求必须输出但是用户要求显示所有输出信息时执行下面的操作
oC:u } y\f0                chOutWin.OutputString(Text & IIf(My.Settings.modFuns_NeedTime, Now.TimeOfDay.ToString, "").ToString & IIf(cCrlf, vbCrLf, Nothing).ToString)
"k"j(}n#{0                chDTE.StatusBar.Text = "CoderHelper::" & Text
\P;yH6@r8t-|0            End If
C)]V}|T'ys2v d0k0        Catch ex As Exception

        End Try
m3A6{HK!F8q3w0    End Sub
,a kpFc` p5pP0    ''' <summary>
s;l p+]:e9tf0    ''' 这执行DTE中的命令.精英博客ZR0AR9p;E
    ''' </summary>精英博客sq)S v]u/t
    ''' <param name="Cmd">命令名称.</param>
mh.|D,^1@0    ''' <param name="cParam">参数.</param>
Q+b6H'K$\X(f0    ''' <remarks>显示执行了何种命令..</remarks>
\] W^y1w5z`0    Public Sub chExcCmd(ByVal Cmd As String, Optional ByVal cParam As String = "")精英博客7u"@oxwp
        Try精英博客pFp\6Za
            chDTE.ExecuteCommand(Cmd, cParam)
DBiKH {3QV&\0            chOutText("调用:" & Cmd & "(" & cParam & ")成功!", bMustOut:=False)
*K)o,k4o0_QrX!|-r6`"y0        Catch ex As Exception
0w y wUuZ"{0            chOutText("调用开发环境命令:" & Cmd & "(" & cParam & ") 时出错:" & ex.Message)
D0qcs]-YxJ0        End Try精英博客T/w XP4M
    End Sub精英博客#I4w$?n? ~~
    ''' <summary>
4U(Etb Q"U3[P[0    ''' 内部调用DTE命令.精英博客h ~ _sQE"A+Va-xqR
    ''' </summary>
!{L PC:j'q?M0    ''' <param name="cmd">命令名称.</param>精英博客s$^b Rev
    ''' <param name="cparam">参数</param>精英博客.r7Y}9[f qd6B
    ''' <remarks>内部调用.由本程序使用</remarks>精英博客S [s?5?V F
    Public Sub chExc(ByVal cmd As String, Optional ByVal cparam As String = "")精英博客Ax9h v(}m.cor1\4^e
        Try
Hsd'C.\0t3Q&j0            chDTE.ExecuteCommand(cmd, cparam)精英博客)m&Lo fK$_
        Catch ex As Exception

        End Try
OFfF t&[-egZ0    End Sub精英博客'SDhC6U!o
    ''' <summary>
~"h!ESW{0    ''' 如果执行了命令行,向命令行当前位置输出文本信息.精英博客?/{9AF&^b
    ''' </summary>精英博客$\&_cX"B2lL
    ''' <param name="Text"></param>
Jlr c4xdaU0    ''' <remarks></remarks>精英博客&{:n4wF5`7q
    Public Sub chOutRet(ByVal Text As String)精英博客 g9Z6v+WExAj:D
        Try精英博客"H k+F3Wq| F"a
            chDTE.ToolWindows.CommandWindow.OutputString(Text & vbCrLf)精英博客 SX }}_
        Catch ex As Exception

        End Try精英博客A,yBB3xY^)A B
    End Sub精英博客0x"N A0xR
    ''' <summary>精英博客g%~~p]8vdk/b
    ''' 在命令行运行命令.
1cMFG)k0    ''' </summary>
p/dj h@6H8m?F0    ''' <param name="cmd">命令</param>
H5AK'}CI{7Ek:~0    ''' <param name="Exc">是不是立刻执行.</param>
5|eOV&y%g Y}0    ''' <remarks></remarks>精英博客 u-?Q&E?d
    Public Sub chCmdExc(ByVal cmd As String, Optional ByVal Exc As Boolean = True)精英博客Bp"WM7}_(s1n9K
        Try精英博客J)R)@aB)ES
            chDTE.ToolWindows.CommandWindow.SendInput(cmd, Exc)
Rrg#R1Eh0        Catch ex As Exception

        End Try精英博客;TW m9w$Sv8I
    End Sub

    ''' <summary>
(s |hMZ ]:H0    ''' 添加一个工具条
*YqZ!bl7F_~5JL n0    ''' </summary>精英博客;Q'y ~M0S"`y |
    ''' <param name="Name">工具条名称</param>
vP7?#GP0n)j0    ''' <returns>返回工具条名称</returns>精英博客'T\/o)Dq U!k
    ''' <remarks></remarks>精英博客QTFp%c!i?
    Public Function SetToolBar(ByVal Name As String) As CommandBar
/c!Y6J'G\U JB%~0        Dim tm1 As CommandBars = CType(chDTE.CommandBars, CommandBars)精英博客7`[&R6gb*@
        Dim cmd As CommandBar精英博客#Au r,MT g+U"D;^Vc
        If IsNothing(tm1.Item(Name)) Then精英博客2PDMU.VQ+a
            cmd = tm1.Add(Name)精英博客t8m%[3O4l7m(u
        Else精英博客1b v8D v5G$Kg
            cmd = tm1.Item(Name)精英博客Y%U9dl!Y
        End If
`*tv-_0G0        Return cmd精英博客3xGd]!m r(U
    End Function精英博客D1ds1E2g ]A)K
    ''' <summary>精英博客9g:b7V2@OL7YoW
    ''' 获取一个工具条名称.精英博客z4yX+]+u
    ''' </summary>
+s2R1GN9cRX0    ''' <param name="Name">存在的工具条名称.</param>
#y$P{tKZ&Q0    ''' <returns></returns>
D2l5ku:v:z"X&KTy/K)[0    ''' <remarks></remarks>精英博客 }jf4lL.Rm
    Public Function SetMenuBar(ByVal Name As String) As CommandBarControl
;|Hx:Y)o9pK0        Dim Cmds As Commands2 = CType(chDTE.Commands, Commands2)精英博客 }Q[`jAK
        Dim CmdBars As CommandBars = CType(chDTE.CommandBars, CommandBars)
:{Z_VKF0        Dim mnu As CommandBar = CmdBars.Item("MenuBar") '菜单精英博客utv(T(r#o(k0S D V#P
        Try精英博客 p Q5Uf6A&M
            Dim ctl As CommandBarControl = mnu.Controls.Add(10, Before:=21)精英博客1n8`T}}~M,ps
            '添加在工具菜单后面.工具菜单的INDEX为20精英博客H+N M%Z M$t
            ctl.Caption = Name精英博客a,?^k/||7B0~*J
            ctl.Tag = Name
5M6IM%Ur:A0            Return ctl精英博客"d y]B-WqKS
        Catch ex As Exception
#E'nm-w;d0            Return Nothing
^z)|'U g8e0        End Try
A/K_OB*gA0    End Function
-k)U/k6[B^0    ''' <summary>
1BTS#qo!i.w'sw0    ''' 获取一个指定名称的菜单项或工具条项对象.精英博客.CBV9~LZSz
    ''' </summary>精英博客 LYIk l-|
    ''' <param name="Name">名称.</param>精英博客!M(lOo J
    ''' <param name="AIID"> </param>
xM(x,iq0    ''' <param name="OwnerName"></param>精英博客|0s5m%|9k9gg0`0y
    ''' <returns></returns>
6oV*C+?)YY9AR0    ''' <remarks></remarks>
hUt%J d6mt0    Public Function SetMenuItem(ByVal Name As String, Optional ByVal AIID As Long = 943, Optional ByVal OwnerName As String = "Tools") As CommandBarControl精英博客Zil^Wv@A%xy
        Dim Cmds As Commands2 = CType(chDTE.Commands, Commands2)精英博客6D#b4Ar!Q%qRp
        Dim CmdBars As CommandBars = CType(chDTE.CommandBars, CommandBars)精英博客QLs8sOy7I
        Dim mnuBarCmdBar As CommandBar = CmdBars.Item("MenuBar") '菜单
j8W C@ yg0        Dim CmdCtrl As CommandBarControl = mnuBarCmdBar.Controls.Item(GetDTEMenuName(OwnerName))精英博客7F.S)F!tl
        Dim CmdPopup As CommandBarPopup = CType(CmdCtrl, CommandBarPopup)
\b wg Zc m:K m0        Dim ret As CommandBarControl

        ' Cmds.AddCommandBar("fads", vsCommandBarType.vsCommandBarTypePopup)

        If AIID > 0 Then

            ret = CmdPopup.Controls.Add(10, Before:=CmdPopup.CommandBar.FindControl(Id:=AIID).Index + 1)精英博客6X:F4ujN{-W
        Else
5?U8f TR];H0            ret = CmdPopup.Controls.Add(10, 1)精英博客n,Va$B"L*FxN
        End If精英博客pi7ZNeYv"a9Q1z
        ret.Caption = Name
N Z&a }ec3r0        Return ret精英博客.S+KS'Lqn
    End Function
E Hq/{sn(K{+q0End Module精英博客1\6y+HpQ-x![?R


TAG: VB VB技术难点

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar