windows-nt/Source/XPSP1/NT/admin/activec/designer/samples/comdetect/comdetect.dsr
2020-09-26 16:20:57 +08:00

401 lines
16 KiB
Plaintext

VERSION 5.00
Begin {B3E55942-FFD8-11D1-9788-44A620524153} ComDetect
ClientHeight = 10020
ClientLeft = 0
ClientTop = 0
ClientWidth = 11775
_ExtentX = 20770
_ExtentY = 17674
m_iNextNodeNumber= 0
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
BeginProperty ImageLists {FFF9A8F6-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
BeginProperty Menus {11517450-27FE-11D3-AA41-00104B880587}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 1
KeysOnly = 0
BeginProperty Item1 {91CC37D5-CE2B-11D1-B44D-7E92AF000000}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Caption = "Menu1"
Visible = -1
Checked = 0
Enabled = -1
Grayed = 0
MenuBreak = 0
MenuBarBreak = 0
Default = 0
Index = 1
Name = "mnuDetect"
Tag = 0
StatusBarText = ""
BeginProperty Children {11517450-27FE-11D3-AA41-00104B880587}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 1
KeysOnly = 0
BeginProperty Item1 {91CC37D5-CE2B-11D1-B44D-7E92AF000000}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Caption = "Is this file a COM server?"
Visible = -1
Checked = 0
Enabled = -1
Grayed = 0
MenuBreak = 0
MenuBarBreak = 0
Default = 0
Index = 1
Name = "IsCOMServer"
Tag = 0
StatusBarText = "Examine the DLL to determine if it is a COM server"
BeginProperty Children {11517450-27FE-11D3-AA41-00104B880587}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
Key = "1"
DISPID = 1001
EndProperty
EndProperty
Key = "1"
DISPID = 1000
EndProperty
EndProperty
BeginProperty Toolbars {FFF9A8FA-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
BeginProperty ViewDefs {FFF9A8E1-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
BeginProperty ListViews {FFF9A8FC-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
BeginProperty OCXViews {FFF9A8FF-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
BeginProperty URLViews {FFF9A902-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
BeginProperty TaskpadViews {FFF9A904-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
EndProperty
BeginProperty DataFormats {91FE14C5-7370-11D2-97D8-00104B880587}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
BeginProperty SnapInDef {FFF9A8E4-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Name = "ComDetect"
NodeTypeName = "SnapIn1"
NodeTypeGUID = "{D42F4544-CD95-11d2-97ED-00104B880587}"
DisplayName = "ComDetect"
Type = 1
HelpFile = ""
LinkedTopics = ""
Description = "Detects whether a DLL is also a COM server"
Provider = "Microsoft Corporation"
Version = "1.0"
SmallFolders = ""
SmallFoldersOpen= ""
LargeFolders = ""
Icon = "ComDetect.dsx":0000
Watermark = "ComDetect.dsx":005E
Header = "ComDetect.dsx":00BC
Palette = "ComDetect.dsx":011A
StretchWatermark= 0
StaticFolder = 0
DefaultView = ""
Extensible = 0
BeginProperty ViewDefs {FFF9A8E1-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
BeginProperty ListViews {FFF9A8FC-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 1
EndProperty
BeginProperty OCXViews {FFF9A8FF-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 1
EndProperty
BeginProperty URLViews {FFF9A902-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 1
EndProperty
BeginProperty TaskpadViews {FFF9A904-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 1
EndProperty
EndProperty
BeginProperty Children {FFF9A8F4-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
IID = "{23F18716-2FB0-4E93-94D5-B50CFDC311B4}"
Preload = 0
EndProperty
BeginProperty ExtensionDefs {FFF9A8E6-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
ExtendsNewMenu = 0
ExtendsTaskMenu = 0
ExtendsTopMenu = 0
ExtendsViewMenu = 0
ExtendsPropertyPages= 0
ExtendsToolbar = 0
ExtendsNameSpace= 0
BeginProperty ExtendedSnapIns {BDA4B9D1-0872-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 1
KeysOnly = 0
BeginProperty Item1 {FFF9A8E8-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Name = ""
Index = 1
Key = "{D2B294B2-9F64-11d2-97E1-00104B880587}"
CLSID = "{D2B294B2-9F64-11d2-97E1-00104B880587}"
DisplayName = "lvExporerFiles"
Dynamic = -1
ExtendsNameSpace= 0
ExtendsNewMenu = 0
ExtendsTaskMenu = -1
ExtendsPropertyPages= 0
ExtendsToolbar = 0
ExtendsTaskpad = 0
EndProperty
EndProperty
EndProperty
BeginProperty AutoCreateNodes {FFF9A8F4-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
BeginProperty OtherNodes {FFF9A8F4-06CB-11D2-9791-50C320524153}
Persistence.MajorVersion= 0
Persistence.MinorVersion= 12
Count = 0
KeysOnly = 0
EndProperty
TypeinfoCookie = 8
ProjectName = "ComDetectProj"
End
Attribute VB_Name = "ComDetect"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit
' ===========================================================================
' | THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF |
' | ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO |
' | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A |
' | PARTICULAR PURPOSE. |
' | Copyright (c) 1998-1999 Microsoft Corporation |
' ===========================================================================
' =============================================================================
' File: ComDetect.dsr
' Project: ComDetectProj
' Type: SnapIn Designer
' =============================================================================
' Declare Windows API functions needed to check for DllRegisterServer export
Private Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" (ByVal Path As String) As Long
Private Declare Function GetProcAddress Lib "kernel32.dll" (ByVal hModule As Long, ByVal ProcName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32.dll" (ByVal hModule As Long)
' =============================================================================
' Method: ExtensionSnapIn_AddTaskMenuItems
' Type: Event
' Description: Fired when a context menu is about to be displayed to give the
' extension snap-in the opportunity to add items to MMC's "Task"
' sub-menu.
'
' Parameters: DataObjects An MMCDataObject collection that contains the
' current selection. The extension snap-in must
' interpret the data exported by the extended
' snap-ins (in this case FileExplorer exports the
' data)
' ContextMenu A ContextMenu object that allows adding the
' snap-in's menus.
' Output: None
' Notes: Adds mnuDetect containing the "Is this file a COM server..."
' item.
' =============================================================================
'
Private Sub ExtensionSnapIn_AddTaskMenuItems(ByVal DataObjects As SnapInLib.IMMCDataObjects, _
ByVal ContextMenu As SnapInLib.IContextMenu)
On Error GoTo ErrTrap_ExtensionSnapIn_AddTaskMenuItems
Dim strPath As String
Dim varPath As Variant
' If there is anything other than a single data object then we ignore it
' as FileExplorer exports one MMCDataObject with the format "Path" when the
' selected item is a single file.
If DataObjects.Count <> 1 Then
Exit Sub
End If
' Extract the file's path from the data object. Note that we cannot
' just assign the Variant returned from MMCDataObject.GetData to a string
' because it will contain an array of bytes terminated by multiple zero
' bytes. This is due to the way the runtime must convert the exported string
' from FileExplorer to a raw memory block of bytes that can be imported by
' other snap-ins. If we did the straight assignment and then concatenated
' another string to the path, certain functions (e.g.MsgBox) would truncate
' the concatenated string due to the embedded zero bytes.
' To solve this problem we use the designer's FormatData method that can
' convert from a byte array to different data types.
varPath = DataObjects(1).GetData("Path")
strPath = FormatData(varPath, 1, siString)
' Set the IsComServer menu item's tag to the DLL's path. If the menu item
' is clicked, the event handler will get the path from the tag.
IsCOMServer.Tag = strPath
' Add mnuDetect containing the "Is this file a COM server..." item.
ContextMenu.AddMenu mnuDetect
Exit Sub
' Error Handler for this method
ErrTrap_ExtensionSnapIn_AddTaskMenuItems:
DisplayError "ExtensionSnapIn_AddTaskMenuItems"
End Sub
' =============================================================================
' Method: IsCOMServer_Click
' Type: Event
' Description: Fired when the "Is this file a COM server..." context menu item
' is selected.
'
' Parameters: Index This will always be 1 as we are directly handling
' the event on the individual menu item rather than
' the event on its parent.
' Selection A reference to an MMCClipboard object that is
' holding a reference to the currently selected
' item(s). Note that even though the selection is
' held in an MMCClipboard object, its ScopeItems and
' ListItems collection will always be empty in an
' extension snap-in because the selected items(s)
' belong to the extended snap-in (FileExplorer in
' this case). The extension snap-in must interpret
' the exported data in MMCClipboard.DataObjects.
' Output: None
' Notes: Gets the path from the MMCMenu object's Tag property and uses
' Win32 API calls to determine if the file exports
' "DllRegisterServer".
' =============================================================================
'
Private Sub IsCOMServer_Click(ByVal Index As Long, ByVal Selection As SnapInLib.IMMCClipboard)
On Error GoTo ErrTrap_ExtensionSnapIn_IsCOMServer_Click
Dim hModule As Long
Dim ProcAddr As Long
Dim IsOrNot As String
hModule = LoadLibrary(IsCOMServer.Tag)
If hModule <> 0 Then
ProcAddr = GetProcAddress(hModule, "DllRegisterServer")
If ProcAddr <> 0 Then
IsOrNot = " is "
Else
IsOrNot = " is not "
End If
MsgBox IsCOMServer.Tag & IsOrNot & "a COM server.", _
vbOKOnly, "ComDetect Extension"
FreeLibrary hModule
Else
MsgBox "Error loading " & IsCOMServer.Tag, vbOKOnly, "ComDetect"
End If
Exit Sub
' Error Handler for this method
ErrTrap_ExtensionSnapIn_IsCOMServer_Click:
DisplayError "ExtensionSnapIn_IsCOMServer_Click"
End Sub
' =============================================================================
' Method: DisplayError
' Type: Subroutine
' Description: A method to format and display a runtime error
' Parameters: szLocation A string identifying the source location
' (i.e. method name) where the error occurred
' Output: None
' Notes: The error will be displayed in a messagebox formatted as the
' following sample:
'
' Method: SomeMethodName
' Source: MMCListSubItems
' Error: 2527h (9511)
' Description: There is already an item in the collection that has the specified key
'
' =============================================================================
'
Private Sub DisplayError(szLocation As String)
' Note that as an extension snap-in we do not have access to the
' ConsoleMsgBox method so we need to use a VB message box.
MsgBox "Method:" & vbTab & vbTab & szLocation & vbCrLf _
& "Source:" & vbTab & vbTab & Err.Source & vbCrLf _
& "Error:" & vbTab & vbTab & Hex(Err.Number) & "h (" & CStr(Err.Number) & ")" & vbCrLf _
& "Description:" & vbTab & Err.Description, _
vbCritical, "ComDetect Runtime Error"
End Sub