Click here to Skip to main content
Click here to Skip to main content

A Utility for Browsing Directly to a Microsoft Knowledge Base Article

, 3 Apr 2001
Rate this:
Please Sign up or sign in to vote.
A utility that lets you browse to a MS Knowledge Base article right from the Run dialog
<!-- Link to demo file download --> <!-- Add the rest of your HTML here -->

Introduction

If you've ever had to look up a Knowledge Base article using its number, you know that the process it a bit tedious. First browse to msdn.microsoft.com, enter the article number in the tiny search edit box, wait for the search results to come back, and then finally click the link to the article. There isn't a quick way to jump right to an article, until now!

KBLaunch is a shell extension that extends the Run dialog. Simply enter ?q followed by the article number, as pictured here:

 [Example Run dialog - 6K]

When you hit Enter, KBLaunch runs your default browser and points it right at the web page for the article.

How It Works

KBLaunch registers itself as a shell execute hook. Shell execute hooks are called in two cases:

  1. Whenever a program is run with ShellExecute() or ShellExecuteEx(). This includes double-clicking on a file in Explorer.
  2. Whenever the user enters something in the Run dialog.

What's interesting about hooking the Run dialog is that we can let the user enter something that isn't a program name, but which instructs our extension to do something. Internet Explorer is a good example of this - if you enter a URL (starting with http, ftp, www, or other common prefixes), the shell execute hook provided by IE interprets that and launches the browser.

KBLaunch looks for the prefix ?q, and then reads the rest of the command line. If it is a positive number, KBLaunch constructs the URL for the article and runs your default browser with ShellExecute(), passing it that URL. Note that this makes use of IE's own shell execute hook (described above) to launch the web browser, so you'll need IE 3 or later installed.

A shell execute hook extension is almost trivial - there's only one interface to implement, and that interface only has one method. The method is IShellExecuteHook::Execute(), and it receives a pointer to a SHELLEXECUTEINFO struct which holds a bunch of info about the program being run. Execute() handles parsing the command line and running the browser, as described above. The code for this is in the KBLaunchShlExt.cpp file in the sample project.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Michael Dunn
Software Developer (Senior) VMware
United States United States
Michael lives in sunny Mountain View, California. He started programming with an Apple //e in 4th grade, graduated from UCLA with a math degree in 1994, and immediately landed a job as a QA engineer at Symantec, working on the Norton AntiVirus team. He pretty much taught himself Windows and MFC programming, and in 1999 he designed and coded a new interface for Norton AntiVirus 2000.
Mike has been a a developer at Napster and at his own lil' startup, Zabersoft, a development company he co-founded with offices in Los Angeles and Odense, Denmark. Mike is now a senior engineer at VMware.

He also enjoys his hobbies of playing pinball, bike riding, photography, and Domion on Friday nights (current favorite combo: Village + double Pirate Ship). He would get his own snooker table too if they weren't so darn big! He is also sad that he's forgotten the languages he's studied: French, Mandarin Chinese, and Japanese.
 
Mike was a VC MVP from 2005 to 2009.

Comments and Discussions

 
GeneralVisual C++ .NET compile error Pinmemberribico24-Mar-06 7:01 
GeneralRe: Visual C++ .NET compile error PinsitebuilderMichael Dunn24-Mar-06 8:07 
Generaldoes not work Pinmemberakulkarni17-Aug-04 7:20 
GeneralRe: does not work PinsitebuilderMichael Dunn17-Aug-04 7:27 
Generaldownload manger PinmemberAlexander M.27-Oct-03 9:13 
GeneralRe: download manger PinsitebuilderMichael Dunn30-Mar-04 12:15 
QuestionHow to debug? PinmemberAnonymous5-Mar-02 14:16 
AnswerRe: How to debug? Pinmemberpeterchen19-Sep-02 6:10 
You can do the following (assuming you have a debug build, of course):
 
start your DevStudio
on Win9x, open a console window*
terminate the Internet Explorer Process:
- click Start/Shutdown
- in the Shutdown dialog, Hold Ctrl-Alt-Shift, and click "Cancel"
 
this will terminate the Internet Explorer process
 
In DevStudio:
Set explorer.exe as executable for your debug session (Project/Settings/Debug)
Set a breakpoint in the DLL sources
Hit F5
 
Explorer will start in "Theather Mode" (providing the Windows shell again), and load plugin DLL's. Go to start/Run, type the KB thingie, and your breakpoint should be hit.
 
-----
*On Win9x, you need the cnsole window so you can start explorer.exe manually, in case "it gets lost".
 
Peter
 

Auch den Schatten will ich lieben weil ich manchmal lieber frier'  Rosenstolz   [sighist]
GeneralKnowledge Base Tracking PinmemberNick Parker1-Mar-02 7:41 
GeneralEffort vs Result PinmemberFotis Xomeritakis29-Mar-01 21:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150327.1 | Last Updated 4 Apr 2001
Article Copyright 2001 by Michael Dunn
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid