RE: [aus-dotnet] Printing out modified VS2005 Keyboard Reference chart, where for art thou utility?


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
    • From: Dave Apelt
    • Subject: RE: [aus-dotnet] Printing out modified VS2005 Keyboard Reference chart, where for art thou utility?
    • Date: Tue, 12 Jun 2007 18:47:05 -0700

    I have blogged about this before but it looks like Google hasn’t sniffed it out.

     

    http://dotnetcoalface.blogspot.com/2006/12/lock-ness-monster-lost-city-of-atlantis.html (scroll down -- a long long way)

     

    I was able to do it by downloading http://www.microsoft.com/downloads/details.aspx?familyid=79C7E038-8768-4E1E-87AE-5BBBE3886DE8&displaylang=en and looking at the Keybindings Table program.  I then had to hack it to do what I wanted.  The file that I changed is attached too.  It simply creates the output file in c:\temp\keyboard.txt (attached).

     

    I hope that helps.

     

    Regards

    Dave A

     

    From: peter@xxxxxxxxxxx [mailto:peter@xxxxxxxxxxx] On Behalf Of Jason Finch
    Sent: Wednesday, 13 June 2007 9:39 AM
    To: dotnet@xxxxxxxxxxx
    Subject: [aus-dotnet] Printing out modified VS2005 Keyboard Reference chart, where for art thou utility?

     

    Is anyone in the know of some sort of gizmo that will print out all the currently defined keyboard shortcuts in VS2005?  Either from within the IDE, externally or via interpretting the exported settings xml file?

     

    I customize the keyboard quite heavily (due to addon products assignment etc) therefore 'off the shelf' PDF's of keyboard shortcuts are next to useless.

     

    Thanks,

    Jason

     

    This correspondence is for the named persons only.
    It may contain confidential or privileged information or both.
    No confidentiality or privilege is waived or lost by any mis transmission.
    If you receive this correspondence in error please delete it from your system immediately and notify the sender.
    You must not disclose, copy or relay on any part of this correspondence, if you are not the intended recipient.
    Any opinions expressed in this message are those of the individual sender except where the sender expressly,
    and with the authority, states them to be the opinions of the Department of Emergency Services, Queensland.

     

    Edit.RemoveRow	M	Ctrl+Del
    Edit.RemoveRow	S	Ctrl+Del
    Edit.EditCell	M	F2
    Edit.EditCell	S	F2
    View.ForwardBrowseContext	G	Ctrl+Shift+7
    Edit.DeleteBackwards	T	Shift+Bkspce
    Edit.DeleteBackwards	T	Bkspce
    Edit.DeleteBackwards	D	Shift+Bkspce
    Edit.DeleteBackwards	D	Bkspce
    Edit.BreakLine	W	Enter
    Edit.BreakLine	T	Shift+Enter
    Edit.BreakLine	T	Enter
    Edit.BreakLine	R	Enter
    Edit.BreakLine	D	Shift+Enter
    Edit.BreakLine	D	Enter
    Edit.BreakLine	S	Enter
    Edit.InsertTab	W	Tab
    Edit.InsertTab	T	Tab
    Edit.InsertTab	R	Tab
    Edit.InsertTab	D	Tab
    Edit.InsertTab	S	Tab
    Edit.TabLeft	W	Shift+Tab
    Edit.TabLeft	T	Shift+Tab
    Edit.TabLeft	R	Shift+Tab
    Edit.TabLeft	D	Shift+Tab
    Edit.TabLeft	S	Shift+Tab
    Edit.CharLeft	W	Left Arrow
    Edit.CharLeft	T	Left Arrow
    Edit.CharLeft	R	Left Arrow
    Edit.CharLeft	D	Left Arrow
    Edit.CharLeft	S	Left Arrow
    Edit.CharLeftExtend	W	Shift+Left Arrow
    Edit.CharLeftExtend	T	Shift+Left Arrow
    Edit.CharLeftExtend	R	Shift+Left Arrow
    Edit.CharLeftExtend	D	Shift+Left Arrow
    Edit.CharLeftExtend	S	Shift+Left Arrow
    Edit.CharRight	W	Right Arrow
    Edit.CharRight	T	Right Arrow
    Edit.CharRight	R	Right Arrow
    Edit.CharRight	D	Right Arrow
    Edit.CharRight	S	Right Arrow
    Edit.CharRightExtend	W	Shift+Right Arrow
    Edit.CharRightExtend	T	Shift+Right Arrow
    Edit.CharRightExtend	R	Shift+Right Arrow
    Edit.CharRightExtend	D	Shift+Right Arrow
    Edit.CharRightExtend	S	Shift+Right Arrow
    Edit.LineUp	W	Up Arrow
    Edit.LineUp	T	Up Arrow
    Edit.LineUp	R	Up Arrow
    Edit.LineUp	D	Up Arrow
    Edit.LineUp	S	Up Arrow
    Edit.LineUpExtend	W	Shift+Down Arrow
    Edit.LineUpExtend	T	Shift+Up Arrow
    Edit.LineUpExtend	R	Shift+Up Arrow
    Edit.LineUpExtend	D	Shift+Up Arrow
    Edit.LineUpExtend	S	Shift+Up Arrow
    Edit.LineDown	W	Down Arrow
    Edit.LineDown	T	Down Arrow
    Edit.LineDown	R	Down Arrow
    Edit.LineDown	D	Down Arrow
    Edit.LineDown	S	Down Arrow
    Edit.LineDownExtend	W	Shift+Up Arrow
    Edit.LineDownExtend	T	Shift+Down Arrow
    Edit.LineDownExtend	R	Shift+Down Arrow
    Edit.LineDownExtend	D	Shift+Down Arrow
    Edit.LineDownExtend	S	Shift+Down Arrow
    Edit.DocumentStart	W	Home
    Edit.DocumentStart	T	Ctrl+Home
    Edit.DocumentStart	D	Ctrl+Home
    Edit.DocumentStartExtend	W	Shift+Home
    Edit.DocumentStartExtend	T	Ctrl+Shift+Home
    Edit.DocumentStartExtend	D	Ctrl+Shift+Home
    Edit.DocumentEnd	W	End
    Edit.DocumentEnd	T	Ctrl+End
    Edit.DocumentEnd	D	Ctrl+End
    Edit.DocumentEndExtend	W	Shift+End
    Edit.DocumentEndExtend	T	Ctrl+Shift+End
    Edit.DocumentEndExtend	D	Ctrl+Shift+End
    Edit.LineStart	T	Home
    Edit.LineStart	D	Home
    Edit.LineStartExtend	T	Shift+Home
    Edit.LineStartExtend	D	Shift+Home
    Edit.LineEnd	T	End
    Edit.LineEnd	D	End
    Edit.LineEndExtend	T	Shift+End
    Edit.LineEndExtend	D	Shift+End
    Edit.PageUp	T	PgUp
    Edit.PageUp	D	PgUp
    Edit.PageUpExtend	T	Shift+PgUp
    Edit.PageUpExtend	D	Shift+PgUp
    Edit.PageDown	T	PgDn
    Edit.PageDown	D	PgDn
    Edit.PageDownExtend	T	Shift+PgDn
    Edit.PageDownExtend	D	Shift+PgDn
    Edit.ViewTop	T	Ctrl+PgUp
    Edit.ViewTop	D	Ctrl+PgUp
    Edit.ViewTopExtend	T	Ctrl+Shift+PgUp
    Edit.ViewTopExtend	D	Ctrl+Shift+PgUp
    Edit.ViewBottom	T	Ctrl+PgDn
    Edit.ViewBottom	D	Ctrl+PgDn
    Edit.ViewBottomExtend	T	Ctrl+Shift+PgDn
    Edit.ViewBottomExtend	D	Ctrl+Shift+PgDn
    Edit.ScrollLineUp	V	Ctrl+Up Arrow
    Edit.ScrollLineUp	T	Ctrl+Up Arrow
    Edit.ScrollLineUp	D	Ctrl+Up Arrow
    Edit.ScrollLineDown	V	Ctrl+Down Arrow
    Edit.ScrollLineDown	T	Ctrl+Down Arrow
    Edit.ScrollLineDown	D	Ctrl+Down Arrow
    Edit.ScrollColumnLeft	V	Ctrl+Left Arrow
    Edit.ScrollColumnRight	V	Ctrl+Right Arrow
    Edit.MakeLowercase	T	Ctrl+U
    Edit.MakeLowercase	D	Ctrl+U
    Edit.MakeUppercase	T	Ctrl+Shift+U
    Edit.MakeUppercase	D	Ctrl+Shift+U
    Edit.SwapAnchor	T	Ctrl+K, Ctrl+A
    Edit.SwapAnchor	D	Ctrl+R, Ctrl+P
    Edit.SwapAnchor	T	Ctrl+E, A
    Edit.SwapAnchor	T	Ctrl+E, Ctrl+A
    Edit.GotoBrace	T	Ctrl+]
    Edit.GotoBrace	D	Ctrl+]
    Edit.GotoBraceExtend	T	Ctrl+Shift+]
    Edit.GotoBraceExtend	D	Ctrl+Shift+]
    Edit.OvertypeMode	T	Ins
    Edit.OvertypeMode	D	Ins
    Edit.LineCut	T	Ctrl+L
    Edit.LineCut	D	Ctrl+L
    Edit.LineDelete	T	Ctrl+Shift+L
    Edit.LineDelete	D	Ctrl+Shift+L
    Edit.DeleteHorizontalWhiteSpace	T	Ctrl+K, Ctrl+\
    Edit.DeleteHorizontalWhiteSpace	D	Ctrl+K, Ctrl+\
    Edit.DeleteHorizontalWhiteSpace	T	Ctrl+E, \
    Edit.DeleteHorizontalWhiteSpace	T	Ctrl+E, Ctrl+\
    Edit.LineOpenAbove	T	Ctrl+Enter
    Edit.LineOpenAbove	D	Ctrl+Enter
    Edit.LineOpenBelow	T	Ctrl+Shift+Enter
    Edit.LineOpenBelow	D	Ctrl+Shift+Enter
    Edit.ClearBookmarks	D	Ctrl+K, Ctrl+L
    Edit.ClearBookmarks	T	Ctrl+B, C
    Edit.ClearBookmarks	T	Ctrl+B, Ctrl+C
    Edit.ToggleBookmark	T	Ctrl+K, Ctrl+K
    Edit.ToggleBookmark	D	Ctrl+K, Ctrl+K
    Edit.ToggleBookmark	T	Ctrl+B, T
    Edit.ToggleBookmark	T	Ctrl+B, Ctrl+T
    Edit.NextBookmark	G	Ctrl+K, Ctrl+N
    Edit.NextBookmark	D	Ctrl+K, Ctrl+N
    Edit.NextBookmark	T	Ctrl+B, N
    Edit.NextBookmark	T	Ctrl+B, Ctrl+N
    Edit.PreviousBookmark	G	Ctrl+K, Ctrl+P
    Edit.PreviousBookmark	D	Ctrl+K, Ctrl+P
    Edit.PreviousBookmark	T	Ctrl+B, P
    Edit.PreviousBookmark	T	Ctrl+B, Ctrl+P
    Edit.CharTranspose	T	Ctrl+T
    Edit.CharTranspose	D	Ctrl+T
    Edit.WordTranspose	T	Ctrl+Shift+T
    Edit.WordTranspose	D	Ctrl+Shift+T
    Edit.LineTranspose	T	Shift+Alt+T
    Edit.LineTranspose	D	Shift+Alt+T
    Edit.SelectCurrentWord	D	Ctrl+W
    Edit.SelectCurrentWord	G	Ctrl+Shift+W
    Edit.WordDeleteToEnd	T	Ctrl+Del
    Edit.WordDeleteToEnd	D	Ctrl+Del
    Edit.WordDeleteToStart	T	Ctrl+Bkspce
    Edit.WordDeleteToStart	D	Ctrl+Bkspce
    Edit.WordPrevious	T	Ctrl+Left Arrow
    Edit.WordPrevious	D	Ctrl+Left Arrow
    Edit.WordPreviousExtend	T	Ctrl+Shift+Left Arrow
    Edit.WordPreviousExtend	D	Ctrl+Shift+Left Arrow
    Edit.WordNext	T	Ctrl+Right Arrow
    Edit.WordNext	D	Ctrl+Right Arrow
    Edit.WordNextExtend	T	Ctrl+Shift+Right Arrow
    Edit.WordNextExtend	D	Ctrl+Shift+Right Arrow
    Edit.SelectionCancel	W	Esc
    Edit.SelectionCancel	T	Esc
    Edit.SelectionCancel	R	Esc
    Edit.SelectionCancel	M	Esc
    Edit.SelectionCancel	S	Esc
    Edit.SelectionCancel	D	Esc
    Edit.SelectionCancel	S	Esc
    Edit.ParameterInfo	T	Ctrl+Shift+Space
    Edit.ParameterInfo	D	Ctrl+Shift+Space
    Edit.ParameterInfo	T	Ctrl+K, P
    Edit.ParameterInfo	T	Ctrl+K, Ctrl+P
    Edit.ViewWhiteSpace	T	Ctrl+R, Ctrl+W
    Edit.ViewWhiteSpace	D	Ctrl+R, Ctrl+W
    Edit.ViewWhiteSpace	T	Ctrl+E, S
    Edit.ViewWhiteSpace	T	Ctrl+E, Ctrl+S
    Edit.CompleteWord	T	Alt+Right Arrow
    Edit.CompleteWord	T	Ctrl+Space
    Edit.CompleteWord	D	Alt+Right Arrow
    Edit.CompleteWord	D	Ctrl+Space
    Edit.CompleteWord	T	Ctrl+K, W
    Edit.CompleteWord	T	Ctrl+K, Ctrl+W
    Edit.ListMembers	T	Ctrl+J
    Edit.ListMembers	D	Ctrl+J
    Edit.ListMembers	T	Ctrl+K, L
    Edit.ListMembers	T	Ctrl+K, Ctrl+L
    Edit.FormatSelection	T	Ctrl+K, Ctrl+F
    Edit.FormatSelection	D	Ctrl+K, Ctrl+F
    Edit.FormatSelection	T	Ctrl+E, F
    Edit.FormatSelection	T	Ctrl+E, Ctrl+F
    Edit.ToggleTaskListShortcut	T	Ctrl+K, Ctrl+H
    Edit.ToggleTaskListShortcut	D	Ctrl+K, Ctrl+H
    Edit.ToggleTaskListShortcut	T	Ctrl+E, T
    Edit.ToggleTaskListShortcut	T	Ctrl+E, Ctrl+T
    Edit.QuickInfo	T	Ctrl+K, Ctrl+I
    Edit.QuickInfo	D	Ctrl+K, Ctrl+I
    Edit.QuickInfo	T	Ctrl+K, I
    Edit.CharLeftExtendColumn	T	Shift+Alt+Left Arrow
    Edit.CharLeftExtendColumn	D	Shift+Alt+Left Arrow
    Edit.CharRightExtendColumn	T	Shift+Alt+Right Arrow
    Edit.CharRightExtendColumn	D	Shift+Alt+Right Arrow
    Edit.LineUpExtendColumn	T	Shift+Alt+Up Arrow
    Edit.LineUpExtendColumn	D	Shift+Alt+Up Arrow
    Edit.LineDownExtendColumn	T	Shift+Alt+Down Arrow
    Edit.LineDownExtendColumn	D	Shift+Alt+Down Arrow
    Edit.ToggleWordWrap	T	Ctrl+E, Ctrl+W
    Edit.ToggleWordWrap	D	Ctrl+R, Ctrl+R
    Edit.ToggleWordWrap	T	Ctrl+E, W
    Edit.IncrementalSearch	T	Ctrl+I
    Edit.IncrementalSearch	D	Ctrl+I
    Edit.ReverseIncrementalSearch	T	Ctrl+Shift+I
    Edit.ReverseIncrementalSearch	D	Ctrl+Shift+I
    Edit.LineStartExtendColumn	T	Shift+Alt+Home
    Edit.LineStartExtendColumn	D	Shift+Alt+Home
    Edit.LineEndExtendColumn	T	Shift+Alt+End
    Edit.LineEndExtendColumn	D	Shift+Alt+End
    Edit.WordPreviousExtendColumn	T	Ctrl+Shift+Alt+Left Arrow
    Edit.WordPreviousExtendColumn	D	Ctrl+Shift+Alt+Left Arrow
    Edit.WordNextExtendColumn	T	Ctrl+Shift+Alt+Right Arrow
    Edit.WordNextExtendColumn	D	Ctrl+Shift+Alt+Right Arrow
    Edit.HideSelection	T	Ctrl+M, Ctrl+H
    Edit.HideSelection	D	Ctrl+M, Ctrl+H
    Edit.ToggleOutliningExpansion	T	Ctrl+M, Ctrl+M
    Edit.ToggleOutliningExpansion	D	Ctrl+M, Ctrl+M
    Edit.ToggleOutliningExpansion	T	Ctrl+M, M
    Edit.ToggleAllOutlining	T	Ctrl+M, Ctrl+L
    Edit.ToggleAllOutlining	D	Ctrl+M, Ctrl+L
    Edit.ToggleAllOutlining	T	Ctrl+M, L
    Edit.StopOutlining	T	Ctrl+M, Ctrl+P
    Edit.StopOutlining	D	Ctrl+M, Ctrl+P
    Edit.StopOutlining	T	Ctrl+M, P
    Edit.StopHidingCurrent	T	Ctrl+M, Ctrl+U
    Edit.StopHidingCurrent	D	Ctrl+M, Ctrl+U
    Edit.CollapsetoDefinitions	T	Ctrl+M, Ctrl+O
    Edit.CollapsetoDefinitions	D	Ctrl+M, Ctrl+O
    Edit.CollapsetoDefinitions	T	Ctrl+M, O
    Edit.CommentSelection	T	Ctrl+K, Ctrl+C
    Edit.CommentSelection	D	Ctrl+K, Ctrl+C
    Edit.CommentSelection	T	Ctrl+E, C
    Edit.CommentSelection	T	Ctrl+E, Ctrl+C
    Edit.UncommentSelection	T	Ctrl+K, Ctrl+U
    Edit.UncommentSelection	D	Ctrl+K, Ctrl+U
    Edit.UncommentSelection	T	Ctrl+E, U
    Edit.UncommentSelection	T	Ctrl+E, Ctrl+U
    Edit.OpenFile	G	Ctrl+Shift+G
    Edit.SelectToLastGoBack	T	Ctrl+=
    Edit.SelectToLastGoBack	D	Ctrl+=
    Edit.FormatDocument	T	Ctrl+K, Ctrl+D
    Edit.FormatDocument	D	Ctrl+K, Ctrl+D
    Edit.FormatDocument	T	Ctrl+E, D
    Edit.FormatDocument	T	Ctrl+E, Ctrl+D
    Edit.IncreaseFilterLevel	T	Alt+.
    Edit.DecreaseFilterLevel	T	Alt+,
    View.ShowSmartTag	G	Shift+Alt+F10
    View.ShowSmartTag	H	Shift+Alt+F10
    View.ShowSmartTag	G	Ctrl+.
    Edit.CopyParameterTip	T	Ctrl+Shift+Alt+C
    Edit.PasteParameterTip	T	Ctrl+Shift+Alt+P
    View.VisibleBorders	H	Ctrl+Q
    View.Details	H	Ctrl+Shift+Q
    Layout.InsertColumntotheLeft	H	Ctrl+Alt+Left Arrow
    Layout.InsertColumntotheRight	H	Ctrl+Alt+Right Arrow
    Layout.InsertRowAbove	H	Ctrl+Alt+Up Arrow
    Layout.InsertRowBelow	H	Ctrl+Alt+Down Arrow
    Format.InsertBookmark	H	Ctrl+Shift+L
    Format.ConverttoHyperlink	H	Ctrl+L
    View.AutoCloseTagOverride	H	Ctrl+Shift+.
    Schema.Expand	X	Ctrl+=
    Schema.Collapse	X	Ctrl+-
    View.EditMaster	H	Ctrl+M, Ctrl+M
    Edit.InsertSnippet	G	Ctrl+K, Ctrl+X
    Edit.InsertSnippet	G	Ctrl+K, X
    Edit.CollapseTag	T	Ctrl+M, Ctrl+T
    View.NonVisualControls	H	Ctrl+Alt+Q
    Build.Compile	G	Ctrl+F7
    Project.AddContentPage	H	Ctrl+M, Ctrl+C
    View.ViewMarkup	H	Shift+F7
    Edit.EnableBookmark	T	Ctrl+B, E
    Edit.EnableBookmark	T	Ctrl+B, Ctrl+E
    NewFolder	G	Ctrl+K, Ctrl+F
    Format.TestDialog	V	Ctrl+T
    Format.SpaceAcross	V	Alt+Left Arrow
    Format.SpaceAcross	V	Alt+Right Arrow
    Format.SpaceDown	V	Alt+Down Arrow
    Format.SpaceDown	V	Alt+Up Arrow
    Format.ToggleGuides	V	Ctrl+G
    Format.SizetoContent	V	Shift+F7
    Format.CenterVertical	V	Ctrl+F9
    Format.CenterHorizontal	V	Ctrl+Shift+F9
    Format.TabOrder	V	Ctrl+D
    Format.ButtonRight	V	Ctrl+R
    Format.ButtonBottom	V	Ctrl+B
    Edit.MoveControlLeft	G	Ctrl+Left Arrow
    Edit.MoveControlLeft	V	Left Arrow
    Edit.MoveControlLeft	W	Ctrl+Left Arrow
    Edit.MoveControlLeft	R	Ctrl+Left Arrow
    Edit.MoveControlLeft	S	Ctrl+Left Arrow
    Edit.MoveControlDown	G	Ctrl+Down Arrow
    Edit.MoveControlDown	V	Down Arrow
    Edit.MoveControlDown	W	Ctrl+Down Arrow
    Edit.MoveControlDown	R	Ctrl+Down Arrow
    Edit.MoveControlDown	S	Ctrl+Down Arrow
    Edit.MoveControlRight	G	Ctrl+Right Arrow
    Edit.MoveControlRight	V	Right Arrow
    Edit.MoveControlRight	W	Ctrl+Right Arrow
    Edit.MoveControlRight	R	Ctrl+Right Arrow
    Edit.MoveControlRight	S	Ctrl+Right Arrow
    Edit.MoveControlUp	G	Ctrl+Up Arrow
    Edit.MoveControlUp	V	Up Arrow
    Edit.MoveControlUp	W	Ctrl+Up Arrow
    Edit.MoveControlUp	R	Ctrl+Up Arrow
    Edit.MoveControlUp	S	Ctrl+Up Arrow
    Edit.SizeControlDown	G	Ctrl+Shift+Down Arrow
    Edit.SizeControlDown	V	Shift+Down Arrow
    Edit.SizeControlDown	W	Ctrl+Shift+Down Arrow
    Edit.SizeControlDown	R	Ctrl+Shift+Down Arrow
    Edit.SizeControlDown	D	Ctrl+Shift+Down Arrow
    Edit.SizeControlDown	S	Ctrl+Shift+Down Arrow
    Edit.SizeControlUp	G	Ctrl+Shift+Up Arrow
    Edit.SizeControlUp	V	Shift+Up Arrow
    Edit.SizeControlUp	W	Ctrl+Shift+Up Arrow
    Edit.SizeControlUp	R	Ctrl+Shift+Up Arrow
    Edit.SizeControlUp	D	Ctrl+Shift+Up Arrow
    Edit.SizeControlUp	S	Ctrl+Shift+Up Arrow
    Edit.SizeControlLeft	G	Ctrl+Shift+Left Arrow
    Edit.SizeControlLeft	V	Shift+Left Arrow
    Edit.SizeControlLeft	W	Ctrl+Shift+Left Arrow
    Edit.SizeControlLeft	R	Ctrl+Shift+Left Arrow
    Edit.SizeControlLeft	S	Ctrl+Shift+Left Arrow
    Edit.SizeControlRight	G	Ctrl+Shift+Right Arrow
    Edit.SizeControlRight	V	Shift+Right Arrow
    Edit.SizeControlRight	W	Ctrl+Shift+Right Arrow
    Edit.SizeControlRight	R	Ctrl+Shift+Right Arrow
    Edit.SizeControlRight	S	Ctrl+Shift+Right Arrow
    Edit.NewAccelerator	V	Ins
    Edit.NextKeyTyped	V	Ctrl+W
    Image.FlipHorizontal	V	Ctrl+H
    Image.FlipVertical	V	Shift+Alt+H
    Image.Rotate90Degrees	V	Ctrl+Shift+H
    Edit.NewString	V	Ins
    Format.CheckMnemonics	V	Ctrl+M
    Image.DrawOpaque	V	Ctrl+J
    Image.NewImageType	V	Ins
    Image.ShowGrid	V	Ctrl+Alt+S
    Image.ShowTileGrid	V	Ctrl+Shift+Alt+S
    Image.Magnify	V	Ctrl+Shift+M
    Image.RectangleSelectionTool	V	Shift+Alt+S
    Image.EraseTool	V	Ctrl+Shift+I
    Image.FillTool	V	Ctrl+F
    Image.PencilTool	V	Ctrl+I
    Image.BrushTool	V	Ctrl+B
    Image.AirbrushTool	V	Ctrl+A
    Image.LineTool	V	Ctrl+L
    Image.TextTool	V	Ctrl+T
    Image.RectangleTool	V	Alt+R
    Image.OutlinedRectangleTool	V	Shift+Alt+R
    Image.FilledRectangleTool	V	Ctrl+Shift+Alt+R
    Image.RoundedRectangleTool	V	Alt+W
    Image.OutlinedRoundedRectangleTool	V	Shift+Alt+W
    Image.FilledRoundedRectangleTool	V	Ctrl+Shift+Alt+W
    Image.EllipseTool	V	Alt+P
    Image.OutlinedEllipseTool	V	Shift+Alt+P
    Image.FilledEllipseTool	V	Ctrl+Shift+Alt+P
    Image.MagnificationTool	V	Ctrl+M
    Image.LargerBrush	V	Ctrl+=
    Image.SmallBrush	V	Ctrl+.
    Image.SmallerBrush	V	Ctrl+-
    Image.ZoomIn	V	Ctrl+Up Arrow
    Image.ZoomIn	V	Ctrl+Shift+.
    Image.ZoomOut	V	Ctrl+Down Arrow
    Image.ZoomOut	V	Ctrl+Shift+,
    Image.PreviousColor	V	Ctrl+Left Arrow
    Image.PreviousColor	V	Ctrl+[
    Image.PreviousRightColor	V	Ctrl+Shift+Left Arrow
    Image.PreviousRightColor	V	Ctrl+Shift+[
    Image.NextColor	V	Ctrl+Right Arrow
    Image.NextColor	V	Ctrl+]
    Image.NextRightColor	V	Ctrl+Shift+Right Arrow
    Image.NextRightColor	V	Ctrl+Shift+]
    Edit.ShowTileGrid	G	Enter
    Edit.MoveControlUpGrid	G	Up Arrow
    Edit.MoveControlDownGrid	G	Down Arrow
    Edit.MoveControlLeftGrid	G	Left Arrow
    Edit.MoveControlRightGrid	G	Right Arrow
    Edit.SizeControlRightGrid	G	Shift+Right Arrow
    Edit.SizeControlUpGrid	G	Shift+Up Arrow
    Edit.SizeControlLeftGrid	G	Shift+Left Arrow
    Edit.SizeControlDownGrid	G	Shift+Down Arrow
    Edit.SelectNextControl	G	Tab
    Edit.SelectPreviousControl	G	Shift+Tab
    Refactor.Rename	G	Ctrl+R, Ctrl+R
    Refactor.Rename	G	Ctrl+R, R
    Refactor.Rename	T	F2
    Refactor.ExtractMethod	G	Ctrl+R, Ctrl+M
    Refactor.ExtractMethod	G	Ctrl+R, M
    Refactor.EncapsulateField	G	Ctrl+R, Ctrl+E
    Refactor.EncapsulateField	G	Ctrl+R, E
    Refactor.ExtractInterface	G	Ctrl+R, Ctrl+I
    Refactor.ExtractInterface	G	Ctrl+R, I
    Refactor.PromoteLocalVariable	G	Ctrl+R, Ctrl+P
    Refactor.PromoteLocalVariable	G	Ctrl+R, P
    Refactor.RemoveParameters	G	Ctrl+R, Ctrl+V
    Refactor.RemoveParameters	G	Ctrl+R, V
    Refactor.ReorderParameters	G	Ctrl+R, Ctrl+O
    Refactor.ReorderParameters	G	Ctrl+R, O
    Edit.GenerateMethodStub	G	Ctrl+K, M
    Edit.GenerateMethodStub	G	Ctrl+K, Ctrl+M
    Edit.SurroundWith	G	Ctrl+K, Ctrl+S
    Edit.SurroundWith	G	Ctrl+K, S
    Window.ShowEzMDIFileList	G	Ctrl+Alt+Down Arrow
    Window.NextToolWindowNav	G	Alt+F7
    Window.PreviousToolWindowNav	G	Shift+Alt+F7
    View.ClassViewGoToSearchCombo	G	Ctrl+K, Ctrl+V
    View.Backward	G	Alt+Left Arrow
    View.Forward	G	Alt+Right Arrow
    View.CodeDefinitionWindow	G	Ctrl+\, Ctrl+D
    View.CodeDefinitionWindow	G	Ctrl+\, D
    View.CodeDefinitionWindow	G	Ctrl+W, D
    View.CodeDefinitionWindow	G	Ctrl+W, Ctrl+D
    View.ServerExplorer	G	Ctrl+Alt+S
    View.ServerExplorer	G	Ctrl+W, L
    View.ServerExplorer	G	Ctrl+W, Ctrl+L
    Format.AlignBottoms	V	Ctrl+Shift+Down Arrow
    Format.AlignMiddles	V	F9
    Format.AlignLefts	V	Ctrl+Shift+Left Arrow
    Format.AlignRights	V	Ctrl+Shift+Right Arrow
    Format.AlignTops	V	Ctrl+Shift+Up Arrow
    Format.AlignCenters	V	Shift+F9
    Edit.Copy	G	Ctrl+C
    Edit.Copy	G	Ctrl+Ins
    Edit.Cut	G	Ctrl+X
    Edit.Cut	G	Shift+Del
    Edit.Delete	G	Del
    Edit.Delete	C	Ctrl+Del
    Edit.Paste	G	Ctrl+V
    Edit.Paste	G	Shift+Ins
    File.Print	G	Ctrl+P
    Edit.Redo	G	Ctrl+Y
    Edit.Redo	G	Shift+Alt+Bkspce
    Edit.Redo	G	Ctrl+Shift+Z
    Edit.SelectAll	G	Ctrl+A
    View.Toolbox	G	Ctrl+Alt+X
    View.Toolbox	G	Ctrl+W, X
    View.Toolbox	G	Ctrl+W, Ctrl+X
    Edit.Undo	G	Ctrl+Z
    Edit.Undo	G	Alt+Bkspce
    Format.Bold	H	Ctrl+B
    Format.Italic	H	Ctrl+I
    Format.Underline	H	Ctrl+U
    Edit.Find	G	Ctrl+F
    QueryDesigner.SQL	Q	Ctrl+3
    QueryDesigner.SQL	V	Ctrl+3
    QueryDesigner.Diagram	Q	Ctrl+1
    QueryDesigner.Diagram	V	Ctrl+1
    QueryDesigner.Results	Q	Ctrl+4
    QueryDesigner.Results	V	Ctrl+4
    QueryDesigner.Criteria	Q	Ctrl+2
    QueryDesigner.Criteria	V	Ctrl+2
    Edit.Remove	M	Del
    Debug.StopDebugging	G	Shift+F5
    Debug.BreakAll	G	Ctrl+Alt+Break
    QueryDesigner.ExecuteSQL	Q	Ctrl+R
    QueryDesigner.ExecuteSQL	V	Ctrl+R
    QueryDesigner.GotoRow	Q	Ctrl+G
    QueryDesigner.GotoRow	V	Ctrl+G
    Debug.ScriptExplorer	G	Ctrl+Alt+N
    Debug.Threads	G	Ctrl+Alt+H
    Debug.Threads	G	Ctrl+D, T
    Debug.Threads	G	Ctrl+D, Ctrl+T
    File.NewProject	G	Ctrl+Shift+N
    File.OpenProject	G	Ctrl+Shift+O
    Project.AddNewItem	G	Ctrl+Shift+A
    File.NewFile	G	Ctrl+N
    File.OpenFile	G	Ctrl+O
    File.SaveAll	G	Ctrl+Shift+S
    Edit.Replace	G	Ctrl+H
    Edit.GoTo	G	Ctrl+G
    View.PropertyPages	G	Shift+F4
    View.FullScreen	G	Shift+Alt+Enter
    View.SolutionExplorer	G	Ctrl+Alt+L
    View.SolutionExplorer	G	Ctrl+W, S
    View.SolutionExplorer	G	Ctrl+W, Ctrl+S
    View.PropertiesWindow	G	F4
    View.PropertiesWindow	G	Ctrl+W, P
    View.PropertiesWindow	G	Ctrl+W, Ctrl+P
    View.TaskList	G	Ctrl+\, Ctrl+T
    View.TaskList	G	Ctrl+\, T
    View.TaskList	G	Ctrl+W, T
    View.TaskList	G	Ctrl+W, Ctrl+T
    View.Output	G	Ctrl+Alt+O
    View.Output	G	Ctrl+W, O
    View.Output	G	Ctrl+W, Ctrl+O
    View.ObjectBrowser	G	Ctrl+Alt+J
    View.ObjectBrowser	G	Ctrl+W, J
    View.ObjectBrowser	G	Ctrl+W, Ctrl+J
    View.DocumentOutline	G	Ctrl+Alt+T
    View.DocumentOutline	G	Ctrl+W, U
    View.DocumentOutline	G	Ctrl+W, Ctrl+U
    Debug.Immediate	G	Ctrl+Alt+I
    Debug.Immediate	G	Ctrl+D, I
    Debug.Immediate	G	Ctrl+D, Ctrl+I
    Debug.Locals	G	Ctrl+Alt+V, L
    Debug.Locals	G	Ctrl+D, L
    Debug.Locals	G	Ctrl+D, Ctrl+L
    Debug.CallStack	G	Ctrl+Alt+C
    Debug.CallStack	G	Ctrl+D, C
    Debug.CallStack	G	Ctrl+D, Ctrl+C
    Project.AddExistingItem	G	Shift+Alt+A
    Debug.StepInto	G	F11
    Debug.StepOver	G	F10
    Debug.StepOut	G	Shift+F11
    Debug.RunToCursor	G	Ctrl+F10
    Debug.QuickWatch	G	Ctrl+Alt+Q
    Debug.QuickWatch	G	Shift+F9
    Debug.QuickWatch	G	Ctrl+D, Q
    Debug.QuickWatch	G	Ctrl+D, Ctrl+Q
    Debug.ToggleBreakpoint	G	F9
    Debug.DeleteAllBreakpoints	G	Ctrl+Shift+F9
    Debug.SetNextStatement	G	Ctrl+Shift+F10
    Debug.ShowNextStatement	G	Alt+Num *
    Edit.FindinFiles	G	Ctrl+Shift+F
    Edit.ReplaceinFiles	G	Ctrl+Shift+H
    Edit.GoToNextLocation	G	F8
    Edit.GoToPrevLocation	G	Shift+F8
    Window.NextTab	G	Ctrl+PgDn
    Window.PreviousTab	G	Ctrl+PgUp
    Window.PreviousTab	H	Ctrl+PgUp
    Window.PreviousTab	H	Ctrl+PgUp
    Window.CloseToolWindow	G	Shift+Esc
    Window.ActivateDocumentWindow	G	Esc
    Window.MovetoNavigationBar	G	Ctrl+F2
    Debug.Start	G	F5
    Debug.Restart	G	Ctrl+Shift+F5
    Window.NextPane	G	Alt+F6
    Window.PreviousPane	G	Shift+Alt+F6
    View.ErrorList	G	Ctrl+\, Ctrl+E
    View.ErrorList	G	Ctrl+\, E
    View.ErrorList	G	Ctrl+W, E
    View.ErrorList	G	Ctrl+W, Ctrl+E
    File.SaveSelectedItems	G	Ctrl+S
    View.ViewDesigner	H	Shift+F7
    View.ViewDesigner	G	Shift+F7
    View.ViewCode	C	Enter
    View.ViewCode	G	F7
    View.EditLabel	G	F2
    Debug.Exceptions	G	Ctrl+Alt+E
    Debug.Exceptions	G	Ctrl+D, E
    Debug.Exceptions	G	Ctrl+D, Ctrl+E
    Edit.StopSearch	G	Alt+F3, S
    Debug.StartWithoutDebugging	G	Ctrl+F5
    Edit.FindNext	G	F3
    Edit.FindPrevious	G	Shift+F3
    Edit.FindNextSelected	G	Ctrl+F3
    Edit.FindPreviousSelected	G	Ctrl+Shift+F3
    Debug.EnableBreakpoint	G	Ctrl+F9
    Help.F1Help	G	F1
    ClassViewContextMenus.ClassViewProject.Properties	G	Alt+Enter
    View.ClassView	G	Ctrl+Shift+C
    View.ClassView	G	Ctrl+W, C
    View.ClassView	G	Ctrl+W, Ctrl+C
    Window.NextDocumentWindow	G	Ctrl+F6
    Window.PreviousDocumentWindow	G	Ctrl+Shift+F6
    Edit.CycleClipboardRing	G	Ctrl+Shift+V
    Edit.CycleClipboardRing	G	Ctrl+Shift+Ins
    Window.CloseDocumentWindow	G	Ctrl+F4
    View.CommandWindow	G	Ctrl+Alt+A
    View.CommandWindow	G	Ctrl+W, A
    View.CommandWindow	G	Ctrl+W, Ctrl+A
    Debug.Autos	G	Ctrl+Alt+V, A
    Debug.Autos	G	Ctrl+D, A
    Debug.Autos	G	Ctrl+D, Ctrl+A
    View.NavigateBackward	G	Ctrl+-
    View.NavigateForward	G	Ctrl+Shift+-
    Build.BuildSolution	G	Ctrl+Shift+B
    Build.BuildSolution	G	F6
    Build.BuildSelection	G	Shift+F6
    Build.Cancel	G	Ctrl+Break
    Edit.GoToDefinition	G	F12
    Edit.GoToDeclaration	G	Ctrl+F12
    Project.AddClass	G	Shift+Alt+C
    Project.Override	G	Ctrl+Alt+Ins
    Edit.FindSymbol	G	Alt+F12
    View.FindSymbolResults	G	Ctrl+Alt+F12
    View.FindSymbolResults	G	Ctrl+W, Q
    View.FindSymbolResults	G	Ctrl+W, Ctrl+Q
    View.ResourceView	G	Ctrl+Shift+E
    View.ResourceView	G	Ctrl+W, R
    View.ResourceView	G	Ctrl+W, Ctrl+R
    Help.WindowHelp	G	Shift+F1
    View.NextView	H	Ctrl+PgDn
    View.NextView	H	Ctrl+PgDn
    Tools.AttachtoProcess	G	Ctrl+Alt+P
    View.PopBrowseContext	G	Ctrl+Shift+8
    View.BrowseNext	G	Ctrl+Shift+1
    View.BrowsePrevious	G	Ctrl+Shift+2
    Edit.QuickFindSymbol	G	Shift+Alt+F12
    View.BookmarkWindow	G	Ctrl+K, Ctrl+W
    View.BookmarkWindow	G	Ctrl+W, B
    View.BookmarkWindow	G	Ctrl+W, Ctrl+B
    Tools.CodeSnippetsManager	G	Ctrl+K, Ctrl+B
    Window.NextDocumentWindowNav	G	Ctrl+Tab
    Window.PreviousDocumentWindowNav	G	Ctrl+Shift+Tab
    Edit.FindAllReferences	G	Ctrl+K, R
    Edit.FindAllReferences	G	Ctrl+K, Ctrl+R
    Edit.FindAllReferences	G	Shift+F12
    Image.CopyandOutlineSelection	V	Ctrl+Shift+U
    Image.UseSelectionasBrush	V	Ctrl+U
    Debug.Breakpoints	G	Ctrl+Alt+B
    Debug.Breakpoints	G	Ctrl+D, B
    Debug.Breakpoints	G	Ctrl+D, Ctrl+B
    Debug.Disassembly	G	Ctrl+Alt+D
    Debug.Registers	G	Ctrl+Alt+G
    Debug.Registers	G	Ctrl+D, R
    Debug.Registers	G	Ctrl+D, Ctrl+R
    Debug.Modules	G	Ctrl+Alt+U
    Debug.Modules	G	Ctrl+D, M
    Debug.Modules	G	Ctrl+D, Ctrl+M
    Debug.ApplyCodeChanges	G	Alt+F10
    Debug.Processes	G	Ctrl+Alt+Z
    Debug.Processes	G	Ctrl+D, P
    Debug.Processes	G	Ctrl+D, Ctrl+P
    Debug.BreakatFunction	G	Ctrl+B
    Debug.BreakatFunction	G	Ctrl+D, N
    Debug.BreakatFunction	G	Ctrl+D, Ctrl+N
    Debug.StepIntoCurrentProcess	G	Ctrl+Alt+F11
    Debug.StepOverCurrentProcess	G	Ctrl+Alt+F10
    Debug.StepOutCurrentProcess	G	Ctrl+Shift+Alt+F11
    DebuggerContextMenus.BreakpointsWindow.Delete	G	Alt+F9, D
    DebuggerContextMenus.BreakpointsWindow.GoToSourceCode	G	Alt+F9, S
    DebuggerContextMenus.BreakpointsWindow.GoToDisassembly	G	Alt+F9, A
    Debug.ToggleDisassembly	G	Ctrl+F11
    Debug.ToggleDisassembly	G	Ctrl+D, D
    Debug.ToggleDisassembly	G	Ctrl+D, Ctrl+D
    Debug.Memory1	G	Ctrl+Alt+M, 1
    Debug.Memory1	G	Ctrl+D, Y
    Debug.Memory1	G	Ctrl+D, Ctrl+Y
    Debug.Watch	G	Ctrl+Alt+W, 1
    Debug.Watch	G	Ctrl+D, W
    Debug.Watch	G	Ctrl+D, Ctrl+W
    Debug.Memory2	G	Ctrl+Alt+M, 2
    Debug.Watch2	G	Ctrl+Alt+W, 2
    Debug.Memory3	G	Ctrl+Alt+M, 3
    Debug.Watch3	G	Ctrl+Alt+W, 3
    Debug.Memory4	G	Ctrl+Alt+M, 4
    Debug.Watch4	G	Ctrl+Alt+W, 4
    View.NextError	G	Ctrl+Shift+F12
    Help.DynamicHelp	G	Ctrl+F1, D
    Help.DynamicHelp	G	Ctrl+F1, Ctrl+D
    Help.Nexttopic	W	Alt+Down Arrow
    Help.Previoustopic	W	Alt+Up Arrow
    View.WebBrowser	G	Ctrl+Alt+R
    View.WebBrowser	G	Ctrl+W, W
    View.WebBrowser	G	Ctrl+W, Ctrl+W
    Help.Contents	G	Ctrl+Alt+F1
    Help.Contents	G	Ctrl+F1, C
    Help.Contents	G	Ctrl+F1, Ctrl+C
    Help.Index	G	Ctrl+Alt+F2
    Help.Index	G	Ctrl+F1, I
    Help.Index	G	Ctrl+F1, Ctrl+I
    Help.Search	G	Ctrl+Alt+F3
    Help.Search	G	Ctrl+F1, S
    Help.Search	G	Ctrl+F1, Ctrl+S
    Help.HowDoI	G	Ctrl+F1, H
    Help.HowDoI	G	Ctrl+F1, Ctrl+H
    Help.SearchResults	G	Shift+Alt+F3
    Help.SearchResults	G	Ctrl+F1, R
    Help.SearchResults	G	Ctrl+F1, Ctrl+R
    Help.IndexResults	G	Ctrl+F1, T
    Help.IndexResults	G	Ctrl+F1, Ctrl+T
    Help.HelpFavorites	G	Ctrl+F1, F
    Help.HelpFavorites	G	Ctrl+F1, Ctrl+F
    Data.StepInto	G	Alt+F5
    Data.Execute	G	Ctrl+Alt+F5
    Data.RunSelection	G	Ctrl+Q
    Data.Column	D	Ctrl+L
    Data.InsertColumn	D	Ins
    View.PendingCheckins	G	Ctrl+W, G
    View.PendingCheckins	G	Ctrl+W, Ctrl+G
    Edit.ExpandCollapseBaseTypeList	C	Shift+Alt+B
    Edit.NavigateToLollipop	C	Shift+Alt+L
    ClassDiagram.Collapse	C	Num -
    ClassDiagram.Expand	C	Num +
    Edit.RemovefromDiagram	C	Del
    Tools.RunTemporaryMacro	G	Ctrl+Shift+P
    Tools.RecordTemporaryMacro	G	Ctrl+Shift+R
    View.MacroExplorer	G	Alt+F8
    Tools.MacrosIDE	G	Alt+F11
    View.Datasets	R	Ctrl+Alt+D
    Data.ShowDataSources	G	Shift+Alt+D
    QueryDesigner.JoinMode	Q	Ctrl+Shift+J
    QueryDesigner.JoinMode	V	Ctrl+Shift+J
    QueryDesigner.CancelRetrievingData	Q	Ctrl+T
    QueryDesigner.CancelRetrievingData	V	Ctrl+T
    Resources.Strings	M	Ctrl+1
    Resources.Images	M	Ctrl+2
    Resources.Icons	M	Ctrl+3
    Resources.Audio	M	Ctrl+4
    Resources.Files	M	Ctrl+5
    Resources.Other	M	Ctrl+6
    View.Datasets	S	Ctrl+Alt+D
    Edit.GoToFindCombo	G	Ctrl+/
    
    //Copyright (c) Microsoft Corporation.  All rights reserved.
    
    // KeyMapDlg.cpp : Implementation of CKeyMapDlg
    
    #include "stdafx.h"
    #include "KeyMapDlg.h"
    #include "commctrl.h"
    
    #define CBI_BOUNDCOMMANDS 0
    #define CBI_ALLCOMMANDS 1
    #define CBI_UNBOUNDCOMMANDS 2
    #define CBI_STARTOFSCOPES 3
    
    // CKeyMapDlg
    
    void ShowDialog(IUnknown *pUnk)
    {
    	CKeyMapDlg KeyMapDlg;
    	CComQIPtr<EnvDTE::_DTE> pDTE(pUnk);
    	KeyMapDlg.SetDTE(pDTE);
    	KeyMapDlg.DoModal();
    }
    
    class CWaitCursor
    {
    public:
    	CWaitCursor()
    	{
    		SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_WAIT)));
    	}
    	~CWaitCursor()
    	{
    		SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
    	}
    };
    
    class CStatBarProgress
    {
    public:
    	CComPtr<EnvDTE::StatusBar> pStatBar;
    
    	CStatBarProgress(EnvDTE::_DTE *pDTE)
    	{
    		HRESULT hr;
    		IfFailGo(pDTE->get_StatusBar(&pStatBar));
    		pStatBar->Progress(VARIANT_TRUE, CComBSTR(L"Generating List..."), 0, 1);
    		pStatBar->put_Text(CComBSTR(L"Generating List..."));
    Error:
    		hr;
    	}
    
    	~CStatBarProgress()
    	{
    		HRESULT hr;
    		IfFailGo(pStatBar->Progress(VARIANT_FALSE, CComBSTR(L"Generating List..."), 0, 1));
    		IfFailGo(pStatBar->Clear());
    Error:
    		hr;
    	}
    
    	HRESULT SetStatBarProgress(long lDone, long lNumberItems)
    	{
    		HRESULT hr;
    		IfFailGo(pStatBar->Progress(VARIANT_TRUE, CComBSTR(L"Generating List..."), lDone, lNumberItems));
    		pStatBar->put_Text(CComBSTR(L"Generating List..."));
    Error:
    		return hr;
    	}
    };
    
    HRESULT CKeyMapDlg::GenerateListOfScopes()
    {
    	USES_CONVERSION;
    	HRESULT hr = S_OK;
    	long lCommandCount, i;
    	CComPtr<EnvDTE::Commands> pCommands;
    
    	CWaitCursor WaitCursor;
    	CStatBarProgress StatBarProgress(m_pDTE);
    
    	ListView_DeleteAllItems(GetDlgItem(IDC_KEYSLIST));
    	IfFailGo(m_pDTE->get_Commands(&pCommands));
    	IfFailGo(pCommands->get_Count(&lCommandCount));
    	for(i = 0 ; i < lCommandCount ; i++)
    	{
    		CComPtr<EnvDTE::Command> pCommand;
    		CComVariant varBindings;
    		CComBSTR bstrName;
    		StatBarProgress.SetStatBarProgress(i+1, lCommandCount+1);
    		IfFailGo(pCommands->Item(CComVariant(i+1), 0, &pCommand));
    		IfFailGo(pCommand->get_Name(&bstrName));
    		if(bstrName.Length() > 0)
    		{
    			IfFailGo(pCommand->get_Bindings(&varBindings));
    			for(ULONG j = 0 ; j < varBindings.parray->rgsabound[0].cElements ; j++)
    			{
    				bool fFound = false;
    				long lFirstIndex = j;
    				CComVariant varBinding;
    				WCHAR *pszString;
    				WCHAR *pszTemp;
    
    				IfFailGo(SafeArrayGetElement(varBindings.parray, &lFirstIndex, (LPVOID)&varBinding));
    				pszString = new WCHAR[SysStringLen(varBinding.bstrVal) + 1];
    				wcscpy(pszString, varBinding.bstrVal);
    				pszTemp = wcschr(pszString, ':');
    				*pszTemp = 0;
    
    				//loop through the known scopes, and see if it exists...
    				for (int k = 0 ; k < nCurrentScope ; k++)
    				{
    					if(!wcscmp(pszString, m_pszScopes[k]))
    					{
    						fFound = true;
    						break;
    					}
    				}
    				if(fFound == false)
    				{
    					m_pszScopes[nCurrentScope] = new WCHAR[wcslen(pszString) + 1];
    					wcscpy(m_pszScopes[nCurrentScope], pszString);
    					SendDlgItemMessage(IDC_FILTERCB, CB_INSERTSTRING, CBI_STARTOFSCOPES+nCurrentScope, (LPARAM)W2T(pszString));
    					nCurrentScope++;
    				}
    			} 
    		}
    	}
    Error:
    	return hr;
    }
    
    HRESULT CKeyMapDlg::FillWithBoundCommands()
    {
    	
    	USES_CONVERSION;
    	HRESULT hr = S_OK;
    	long lCommandCount, i;
    	LVITEM lvi;
    	CComPtr<EnvDTE::Commands> pCommands;
    
    	CWaitCursor WaitCursor;
    	CStatBarProgress StatBarProgress(m_pDTE);
    
    	lvi.mask = LVIF_TEXT;
    	ListView_DeleteAllItems(GetDlgItem(IDC_KEYSLIST));
    	IfFailGo(m_pDTE->get_Commands(&pCommands));
    
    	IfFailGo(pCommands->get_Count(&lCommandCount));
    
    	FILE* fp;
    	fp = fopen("C:\\temp\\keyboard.txt", "w");
    
    	for(i = 0 ; i < lCommandCount ; i++)
    	{
    		CComPtr<EnvDTE::Command> pCommand;
    		CComVariant varBindings;
    		CComBSTR bstrName;
    		StatBarProgress.SetStatBarProgress(i+1, lCommandCount+1);
    		IfFailGo(pCommands->Item(CComVariant(i+1), 0, &pCommand));
    		IfFailGo(pCommand->get_Name(&bstrName));
    		if(bstrName.Length() > 0)
    		{
    			IfFailGo(pCommand->get_Bindings(&varBindings));
    			for(ULONG j = 0 ; j < varBindings.parray->rgsabound[0].cElements ; j++)
    			{
    				long lFirstIndex = j;
    				CComVariant varBinding;
    				WCHAR *pszString;
    				WCHAR *pszTemp, *pszTemp2;
    				lvi.mask = LVIF_TEXT;
    				lvi.iItem	 = ListView_GetItemCount(GetDlgItem(IDC_KEYSLIST));
    				lvi.iSubItem = 0;
    				lvi.pszText = W2T(bstrName);
    				int nItem = ListView_InsertItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    				fprintf(fp, "%s\t", lvi.pszText);
    
    				IfFailGo(SafeArrayGetElement(varBindings.parray, &lFirstIndex, (LPVOID)&varBinding));
    				pszString = new WCHAR[SysStringLen(varBinding.bstrVal) + 1];
    				wcscpy(pszString, varBinding.bstrVal);
    				pszTemp2 = pszTemp = wcschr(pszString, ':');
    				pszTemp2 = CharNextW(pszTemp2);
    				pszTemp2 = CharNextW(pszTemp2);
    				*pszTemp = 0;
    
    				fprintf(fp, "%s\t", pszString);
    
    				lvi.iSubItem = 1;
    				lvi.iItem = nItem;
    				lvi.pszText = W2T(pszString);
    				ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    				lvi.iSubItem = 2;
    				lvi.iItem = nItem;
    				lvi.pszText = W2T(pszTemp2);
    				ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    				fprintf(fp, "%s\n", lvi.pszText);
    
    #ifdef _DEBUG
    				{
    					CComBSTR bstrGUID;
    					long lID;
    					TCHAR szID[10];
    					pCommand->get_Guid(&bstrGUID);
    					pCommand->get_ID(&lID);
    					wsprintf(szID, _T("%d"), lID);
    
    					lvi.iSubItem = 3;
    					lvi.iItem = nItem;
    					lvi.pszText = W2T(bstrGUID);
    					ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    					lvi.iSubItem = 4;
    					lvi.iItem = nItem;
    					lvi.pszText = szID;
    					ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    				}
    #endif
    
    				delete []pszString;
    			} 
    		}
    	}
    
    
    	fclose(fp);
    
    Error:
    	return hr;
    }
    
    HRESULT CKeyMapDlg::FillWithScope(WCHAR *pszScope)
    {
    	USES_CONVERSION;
    	HRESULT hr = S_OK;
    	long lCommandCount, i;
    	LVITEM lvi;
    	CComPtr<EnvDTE::Commands> pCommands;
    
    	CWaitCursor WaitCursor;
    	CStatBarProgress StatBarProgress(m_pDTE);
    
    	lvi.mask = LVIF_TEXT;
    	ListView_DeleteAllItems(GetDlgItem(IDC_KEYSLIST));
    	IfFailGo(m_pDTE->get_Commands(&pCommands));
    	IfFailGo(pCommands->get_Count(&lCommandCount));
    	for(i = 0 ; i < lCommandCount ; i++)
    	{
    		CComPtr<EnvDTE::Command> pCommand;
    		CComVariant varBindings;
    		CComBSTR bstrName;
    		StatBarProgress.SetStatBarProgress(i+1, lCommandCount+1);
    		IfFailGo(pCommands->Item(CComVariant(i+1), 0, &pCommand));
    		IfFailGo(pCommand->get_Name(&bstrName));
    		if(bstrName.Length() > 0)
    		{
    			IfFailGo(pCommand->get_Bindings(&varBindings));
    			for(ULONG j = 0 ; j < varBindings.parray->rgsabound[0].cElements ; j++)
    			{
    				long lFirstIndex = j;
    				CComVariant varBinding;
    				WCHAR *pszString;
    				WCHAR *pszTemp, *pszTemp2;
    
    
    				IfFailGo(SafeArrayGetElement(varBindings.parray, &lFirstIndex, (LPVOID)&varBinding));
    				pszString = new WCHAR[SysStringLen(varBinding.bstrVal) + 1];
    				wcscpy(pszString, varBinding.bstrVal);
    				pszTemp2 = pszTemp = wcschr(pszString, ':');
    				pszTemp2 = CharNextW(pszTemp2);
    				pszTemp2 = CharNextW(pszTemp2);
    				*pszTemp = 0;
    
    				if(!wcscmp(pszString, pszScope))
    				{        
    					lvi.mask = LVIF_TEXT;
    					lvi.iItem	 = ListView_GetItemCount(GetDlgItem(IDC_KEYSLIST));
    					lvi.iSubItem = 0;
    					lvi.pszText = W2T(bstrName);
    					int nItem = ListView_InsertItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    					lvi.iSubItem = 1;
    					lvi.iItem = nItem;
    					lvi.pszText = W2T(pszString);
    					ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    					lvi.iSubItem = 2;
    					lvi.iItem = nItem;
    					lvi.pszText = W2T(pszTemp2);
    					ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    #ifdef _DEBUG
    					{
    						CComBSTR bstrGUID;
    						long lID;
    						TCHAR szID[10];
    						pCommand->get_Guid(&bstrGUID);
    						pCommand->get_ID(&lID);
    						wsprintf(szID, _T("%d"), lID);
    
    						lvi.iSubItem = 3;
    						lvi.iItem = nItem;
    						lvi.pszText = W2T(bstrGUID);
    						ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    						lvi.iSubItem = 4;
    						lvi.iItem = nItem;
    						lvi.pszText = szID;
    						ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    					}
    #endif
    				}
    
    				delete []pszString;
    			} 
    		}
    	}
    Error:
    	return hr;
    }
    
    
    HRESULT CKeyMapDlg::FillWithUnboundCommands()
    {
    	USES_CONVERSION;
    	HRESULT hr = S_OK;
    	long lCommandCount, i;
    	LVITEM lvi;
    	CComPtr<EnvDTE::Commands> pCommands;
    
    	lvi.mask = LVIF_TEXT;
    
    	CWaitCursor WaitCursor;
    	CStatBarProgress StatBarProgress(m_pDTE);
    
    	ListView_DeleteAllItems(GetDlgItem(IDC_KEYSLIST));
    	IfFailGo(m_pDTE->get_Commands(&pCommands));
    	IfFailGo(pCommands->get_Count(&lCommandCount));
    	for(i = 0 ; i < lCommandCount ; i++)
    	{
    		CComPtr<EnvDTE::Command> pCommand;
    		CComVariant varBindings;
    		CComBSTR bstrName;
    		StatBarProgress.SetStatBarProgress(i+1, lCommandCount+1);
    		IfFailGo(pCommands->Item(CComVariant(i+1), 0, &pCommand));
    		IfFailGo(pCommand->get_Name(&bstrName));
    		if(bstrName.Length() > 0)
    		{
    			IfFailGo(pCommand->get_Bindings(&varBindings));
    			if(varBindings.parray->rgsabound[0].cElements == 0)
    			{
    				lvi.mask = LVIF_TEXT;
    				lvi.iItem	 = ListView_GetItemCount(GetDlgItem(IDC_KEYSLIST));
    				lvi.iSubItem = 0;
    				lvi.pszText = W2T(bstrName);
    				int nItem = ListView_InsertItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    			}
    		}
    	}
    Error:
    	return hr;
    }
    
    HRESULT CKeyMapDlg::FillWithAllCommands()
    {
    	USES_CONVERSION;
    	HRESULT hr = S_OK;
    	long lCommandCount, i;
    	LVITEM lvi;
    	CComPtr<EnvDTE::Commands> pCommands;
    
    	lvi.mask = LVIF_TEXT;
    
    	CWaitCursor WaitCursor;
    	CStatBarProgress StatBarProgress(m_pDTE);
    
    	ListView_DeleteAllItems(GetDlgItem(IDC_KEYSLIST));
    	IfFailGo(m_pDTE->get_Commands(&pCommands));
    	IfFailGo(pCommands->get_Count(&lCommandCount));
    	for(i = 0 ; i < lCommandCount ; i++)
    	{
    		CComPtr<EnvDTE::Command> pCommand;
    		CComVariant varBindings;
    		CComBSTR bstrName;
    		StatBarProgress.SetStatBarProgress(i+1, lCommandCount+1);
    		IfFailGo(pCommands->Item(CComVariant(i+1), 0, &pCommand));
    		IfFailGo(pCommand->get_Name(&bstrName));
    		if(bstrName.Length() > 0)
    		{
    			IfFailGo(pCommand->get_Bindings(&varBindings));
    			if(varBindings.parray->rgsabound[0].cElements > 0)
    			{
    				for(ULONG j = 0 ; j < varBindings.parray->rgsabound[0].cElements ; j++)
    				{
    					long lFirstIndex = j;
    					CComVariant varBinding;
    					WCHAR *pszString;
    					WCHAR *pszTemp, *pszTemp2;
    					lvi.mask = LVIF_TEXT;
    					lvi.iItem	 = ListView_GetItemCount(GetDlgItem(IDC_KEYSLIST));
    					lvi.iSubItem = 0;
    					lvi.pszText = W2T(bstrName);
    					int nItem = ListView_InsertItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    					IfFailGo(SafeArrayGetElement(varBindings.parray, &lFirstIndex, (LPVOID)&varBinding));
    					pszString = new WCHAR[SysStringLen(varBinding.bstrVal) + 1];
    					wcscpy(pszString, varBinding.bstrVal);
    					pszTemp2 = pszTemp = wcschr(pszString, ':');
    					pszTemp2 = CharNextW(pszTemp2);
    					pszTemp2 = CharNextW(pszTemp2);
    					*pszTemp = 0;
    
    					lvi.iSubItem = 1;
    					lvi.iItem = nItem;
    					lvi.pszText = W2T(pszString);
    					ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    					lvi.iSubItem = 2;
    					lvi.iItem = nItem;
    					lvi.pszText = W2T(pszTemp2);
    					ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi); 
    #ifdef _DEBUG
    					{
    						CComBSTR bstrGUID;
    						long lID;
    						TCHAR szID[10];
    						pCommand->get_Guid(&bstrGUID);
    						pCommand->get_ID(&lID);
    						wsprintf(szID, _T("%d"), lID);
    
    						lvi.iSubItem = 3;
    						lvi.iItem = nItem;
    						lvi.pszText = W2T(bstrGUID);
    						ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    
    						lvi.iSubItem = 4;
    						lvi.iItem = nItem;
    						lvi.pszText = szID;
    						ListView_SetItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    					}
    #endif
    
    					delete []pszString;
    				} 
    			}
    			else  //No bindings for this item, just insert the command name...
    			{
    				lvi.mask = LVIF_TEXT;
    				lvi.iItem	 = ListView_GetItemCount(GetDlgItem(IDC_KEYSLIST));
    				lvi.iSubItem = 0;
    				lvi.pszText = W2T(bstrName);
    				int nItem = ListView_InsertItem(GetDlgItem(IDC_KEYSLIST), &lvi);
    			}
    		}
    	}
    Error:
    	return hr;
    }
    
    LRESULT CKeyMapDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
    	CAxDialogImpl<CKeyMapDlg>::OnInitDialog(uMsg, wParam, lParam, bHandled);
    
    	long lCountColumns = 0;
    	LVCOLUMN lvc;
    
    	DWORD dwStyleEx = (DWORD)SendMessage(GetDlgItem(IDC_KEYSLIST), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
    	dwStyleEx |= LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT;
    	SendMessage(GetDlgItem(IDC_KEYSLIST), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyleEx);
    
    	SendDlgItemMessage(IDC_FILTERCB, CB_INSERTSTRING, CBI_BOUNDCOMMANDS, (LPARAM)_T("Bound Commands"));
    	SendDlgItemMessage(IDC_FILTERCB, CB_INSERTSTRING, CBI_ALLCOMMANDS, (LPARAM)_T("All Commands"));
    	SendDlgItemMessage(IDC_FILTERCB, CB_INSERTSTRING, CBI_UNBOUNDCOMMANDS, (LPARAM)_T("Unbound Commands"));
    
    	GenerateListOfScopes();
    
    	SendDlgItemMessage(IDC_FILTERCB, CB_SETCURSEL, 0, 0);
    
    	SetIcon(LoadIcon(_AtlModule.GetResourceInstance(), MAKEINTRESOURCE(IDI_ICON1)));
    
    	lvc.mask = LVCF_TEXT|LVCF_WIDTH;
    	lvc.pszText = _T("Command Name");
    	lvc.cx = 150;
    	ListView_InsertColumn(GetDlgItem(IDC_KEYSLIST), 0, &lvc);
    
    	lvc.mask = LVCF_TEXT|LVCF_WIDTH;
    	lvc.pszText = _T("Scope");
    	lvc.cx = 150;
    	ListView_InsertColumn(GetDlgItem(IDC_KEYSLIST), 1, &lvc);
    
    	lvc.mask = LVCF_TEXT|LVCF_WIDTH;
    	lvc.pszText = _T("Key Binding");
    	lvc.cx = 150;
    	ListView_InsertColumn(GetDlgItem(IDC_KEYSLIST), 2, &lvc);
    
    #ifdef _DEBUG
    	lvc.mask = LVCF_TEXT|LVCF_WIDTH;
    	lvc.pszText = _T("GUID");
    	lvc.cx = 150;
    	ListView_InsertColumn(GetDlgItem(IDC_KEYSLIST), 3, &lvc);
    
    	lvc.mask = LVCF_TEXT|LVCF_WIDTH;
    	lvc.pszText = _T("ID");
    	lvc.cx = 150;
    	ListView_InsertColumn(GetDlgItem(IDC_KEYSLIST), 4, &lvc);
    #endif
    
    	FillWithBoundCommands();
    
    	bHandled = TRUE;
    	return 1;  // Let the system set the focus
    }
    LRESULT CKeyMapDlg::OnBnClickedCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    	// TODO: Add your control notification handler code here
    
    	return 0;
    }
    



    (Click here for more information on the aus-dotnet mailling list)