test page 5 - Dave's Blog

Search
My timeline on Mastodon

Notes on Creating Internet Explorer Extensions in C++ and COM

2009 Mar 20, 4:51

Working on Internet Explorer extensions in C++ & COM, I had to relearn or rediscover how to do several totally basic and important things. To save myself and possibly others trouble in the future, here's some pertinent links and tips.

First you must choose your IE extensibility point. Here's a very short list of the few I've used:

Once you've created your COM object that implements IObjectWithSite and whatever other interfaces your extensibility point requires as described in the above links you'll see your SetSite method get called by IE. You might want to know how to get the top level browser object from the IUnknown site object passed in via that method.

After that you may also want to listen for some events from the browser. To do this you'll need to:

  1. Implement the dispinterface that has the event you want. For instance DWebBrowserEvents2, or HTMLDocumentEvents, or HTMLWindowEvents2. You'll have to search around in that area of the documentation to find the event you're looking for.
  2. Register for events using AtlAdvise. The object you need to subscribe to depends on the events you want. For example, DWebBrowserEvents2 come from the webbrowser object, HTMLDocumentEvents come from the document object assuming its an HTML document (I obtained via get_Document method on the webbrowser), and HTMLWindowEvents2 come from the window object (which oddly I obtained via calling the get_script method on the document object). Note that depending on when your SetSite method is called the document may not exist yet. For my extension I signed up for browser events immediately and then listened for events like NavigateComplete before signing up for document and window events.
  3. Implement IDispatch. The Invoke method will get called with event notifications from the dispinterfaces you sign up for in AtlAdvise. Implementing Invoke manually is a slight pain as all the parameters come in as VARIANTs and are in reverse order. There's some ATL macros that may make this easier but I didn't bother.
  4. Call AtlUnadvise at some point -- at the latest when SetSite is called again and your site object changes.

If you want to check if an IHTMLElement is not visible on screen due how the page is scrolled, try comparing the Body or Document Element's client height and width, which appears to be the dimensions of the visible document area, to the element's bounding client rect which appears to be its position relative to the upper left corner of the visible document area. I've found this to be working for me so far, but I'm not positive that frames, iframes, zooming, editable document areas, etc won't mess this up.

Be sure to use pointers you get from the IWebBrowser/IHTMLDocument/etc. only on the thread on which you obtained the pointer or correctly marshal the pointers to other threads to avoid weird crashes and hangs.

Obtaining the HTML document of a subframe is slightly more complicated then you might hope. On the other hand this might be resolved by the new to IE8 method IHTMLFrameElement3::get_contentDocument

Check out Eric's IE blog post on IE extensibility which has some great links on this topic as well.

PermalinkCommentstechnical boring internet explorer com c++ ihtmlelement extension

The Super Mario Bros. drag and drop LUA hack - Offworld

2009 Mar 17, 6:02"With LUA scripting included in the latest version of NES emulator FCEUX, Rusted Logic blogger Xkeeper has woven some black magic into Super Mario that gives you full keyboard/mouse control over your surroundings."PermalinkCommentsvideo youtube videogames videogame hack mario

The Sizzling Sound of Music - O'Reilly Radar

2009 Mar 10, 9:42Music professor tests students and finds 'they seemed to prefer "sizzle sounds" that MP3s bring to music. It is a sound they are familiar with.' Then told the students to get off his lawn and to turn down their sizzling music.PermalinkCommentsmp3 music via:swannman audio article

The 'Is It UTF-8?' Quick and Dirty Test

2009 Mar 6, 5:16

I've found while debugging networking in IE its often useful to quickly tell if a string is encoded in UTF-8. You can check for the Byte Order Mark (EF BB BF in UTF-8) but, I rarely see the BOM on UTF-8 strings. Instead I apply a quick and dirty UTF-8 test that takes advantage of the well-formed UTF-8 restrictions.

Unlike other multibyte character encoding forms (see Windows supported character sets or IANA's list of character sets), for example Big5, where sticking together any two bytes is more likely than not to give a valid byte sequence, UTF-8 is more restrictive. And unlike other multibyte character encodings, UTF-8 bytes may be taken out of context and one can still know that its a single byte character, the starting byte of a three byte sequence, etc.

The full rules for well-formed UTF-8 are a little too complicated for me to commit to memory. Instead I've got my own simpler (this is the quick part) set of rules that will be mostly correct (this is the dirty part). For as many bytes in the string as you care to examine, check the most significant digit of the byte:

F:
This is byte 1 of a 4 byte encoded codepoint and must be followed by 3 trail bytes.
E:
This is byte 1 of a 3 byte encoded codepoint and must be followed by 2 trail bytes.
C..D:
This is byte 1 of a 2 byte encoded codepoint and must be followed by 1 trail byte.
8..B:
This is a trail byte.
0..7:
This is a single byte encoded codepoint.
The simpler rules can produce false positives in some cases: that is, they'll say a string is UTF-8 when in fact it might not be. But it won't produce false negatives. The following is table from the Unicode spec. that actually describes well-formed UTF-8.
Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
U+0000..U+007F 00..7F
U+0080..U+07FF C2..DF 80..BF
U+0800..U+0FFF E0 A0..BF 80..BF
U+1000..U+CFFF E1..EC 80..BF 80..BF
U+D000..U+D7FF ED 80..9F 80..BF
U+E000..U+FFFF EE..EF 80..BF 80..BF
U+10000..U+3FFFF F0 90..BF 80..BF 80..BF
U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
U+100000..U+10FFFF F4 80..8F 80..BF 80..BF

PermalinkCommentstest technical unicode boring charset utf8 encoding

The world's shortest escalator - Boing Boing Gadgets

2009 Feb 27, 11:31"World's Shortest Escalator - certified by the Guinness Book of Records"PermalinkCommentshumor video escalator

Meteorology Law of the People's Republic of China -- china.org.cn

2009 Feb 4, 4:16From Sorting it all Out wrt the weather gadget in Vista's sidebar, this link to China's laws on weather forecast: "Article 22 The State applies a unified system for the issue of public meteorological forecast and severe weather warning... No other organizations or individuals may issue to the community such forecast or warning." "Article 25 When the media, including radio, television, newspaper and telecommunication, issue to the community public meteorological forecast or severe weather warning, they shall use the latest meteorological information provided by a meteorological office... Part of the revenues from the distribution of meteorological information shall be drawn to support the development of meteorological service." Whether an application is legally allowed to provide a weather forecast is not an attribute I would have imagined necessary for a localization API.PermalinkCommentsvia:michael-kaplan china law legal politics weather forecast localization

Chessboxing

2009 Feb 2, 11:52"Chessboxing: Created in 2003 by Dutch artist Iepe Rubingh, chess boxing has 11 rounds of alternated boxing and chess. In first round, which lasts four minutes, contestants initiate the chess match. A two-minute boxing round follows. Rounds alternate until one of the players gets a checkmate or a knockout."PermalinkCommentshumor art chess boxing sport via:boingboing video youtube

DIY Pepsi Challenge

2009 Jan 25, 5:39

Deutsches MuseumMicrosoft isn't completely shielded from our economies issues but I still have a job and still get free soda. While that's all still the case, I decided to test Sarah's claimed ability to differentiate between Pepsi, Coke, and their diet counterparts by taste alone. I poured the four sodas into marked cups and Sarah and I each took two runs through the cups with the following guesses.

Soda Identification Challenge Results
Drink Sarah Dave
Guess 1 Guess 2 Guess 1 Guess 2
Coke Coke Coke Pepsi Diet Pepsi
Diet Coke Diet Coke Diet Pepsi Diet Coke Diet Coke
Pepsi Pepsi Pepsi Coke Coke
Diet Pepsi Diet Pepsi Diet Coke Diet Pepsi Pepsi
Total (out of 8) 6 3

As you can see from the results, Sarah's claimed ability to identify Coke and Pepsi by taste is confirmed. The first run through she got completely correct and on the second run only mistook Diet Pepsi for Diet Coke. Her excuse for the error on the second run was a tainted palate from the first run. I on the other hand was mostly incorrect. Surprisingly though my incorrect answers were mostly consistent between run one and two. For instance I thought Pepsi was Coke in both runs.

PermalinkCommentscoke microsoft waste of soda pepsi waste of time soda

Best Esquire Magazine Stories - Top Articles in History of Journalism - Esquire

2008 Nov 22, 5:59"Five years ago, we named 'Frank Sinatra Has a Cold,' by Gay Talese, the greatest story Esquire ever published. Here, as we close out our 75th anniversary celebration, are the top seven, with several republished online in their entirety for the first time ever."PermalinkCommentsvia:swannman esquire article essay humor

Wallace & Gromit - Forum - Latest News - A Matter of Loaf and Death Comes to BBC One This Christmas

2008 Nov 20, 11:01Woo! "I love making films for the cinema but the production of Chicken Run and Curse of the Were-Rabbit were virtually back to back and each film took five years to complete. A Matter of Loaf and Death will be so much quicker to make. I'm delighted to be back into production and back with BBC One with Wallace and Gromit. Over the years the BBC has been incredibly supportive of Wallace and Gromit, this film feels like their homecoming."PermalinkCommentswallace gromit wallace-grommit bbc animation clay claymation via:kris.kowal humor

Testing Tools

2008 Oct 31, 2:37"The Microsoft Active Accessibility SDK provides several utilities that can be used by both clients and servers as testing tools."PermalinkCommentsmsdn microsoft accessibility tool free download

Investigation of a Few Application Protocols (Updated)

2008 Oct 25, 6:51

Windows allows for application protocols in which, through the registry, you specify a URL scheme and a command line to have that URL passed to your application. Its an easy way to hook a webbrowser up to your application. Anyone can read the doc above and then walk through the registry and pick out the application protocols but just from that info you can't tell what the application expects these URLs to look like. I did a bit of research on some of the application protocols I've seen which is listed below. Good places to look for information on URI schemes: Wikipedia URI scheme, and ESW Wiki UriSchemes.

Some Application Protocols and associated documentation.
Scheme Name Notes
search-ms Windows Search Protocol The search-ms application protocol is a convention for querying the Windows Search index. The protocol enables applications, like Microsoft Windows Explorer, to query the index with parameter-value arguments, including property arguments, previously saved searches, Advanced Query Syntax, Natural Query Syntax, and language code identifiers (LCIDs) for both the Indexer and the query itself. See the MSDN docs for search-ms for more info.
Example: search-ms:query=food
Explorer.AssocProtocol.search-ms
OneNote OneNote Protocol From the OneNote help: /hyperlink "pagetarget" - Starts OneNote and opens the page specified by the pagetarget parameter. To obtain the hyperlink for any page in a OneNote notebook, right-click its page tab and then click Copy Hyperlink to this Page.
Example: onenote:///\\GUMMO\Users\davris\Documents\OneNote%20Notebooks\OneNote%202007%20Guide\Getting%20Started%20with%20OneNote.one#section-id={692F45F5-A42A-415B-8C0D-39A10E88A30F}&end
callto Callto Protocol ESW Wiki Info on callto
Skype callto info
NetMeeting callto info
Example: callto://+12125551234
itpc iTunes Podcast Tells iTunes to subscribe to an indicated podcast. iTunes documentation.
C:\Program Files\iTunes\iTunes.exe /url "%1"
Example: itpc:http://www.npr.org/rss/podcast.php?id=35
iTunes.AssocProtocol.itpc
pcast
iTunes.AssocProtocol.pcast
Magnet Magnet URI Magnet URL scheme described by Wikipedia. Magnet URLs identify a resource by a hash of that resource so that when used in P2P scenarios no central authority is necessary to create URIs for a resource.
mailto Mail Protocol RFC 2368 - Mailto URL Scheme.
Mailto Syntax
Opens mail programs with new message with some parameters filled in, such as the to, from, subject, and body.
Example: mailto:?to=david.risney@gmail.com&subject=test&body=Test of mailto syntax
WindowsMail.Url.Mailto
MMS mms Protocol MSDN describes associated protocols.
Wikipedia describes MMS.
"C:\Program Files\Windows Media Player\wmplayer.exe" "%L"
Also appears to be related to MMS cellphone messages: MMS IETF Draft.
WMP11.AssocProtocol.MMS
secondlife [SecondLife] Opens SecondLife to the specified location, user, etc.
SecondLife Wiki description of the URL scheme.
"C:\Program Files\SecondLife\SecondLife.exe" -set SystemLanguage en-us -url "%1"
Example: secondlife://ahern/128/128/128
skype Skype Protocol Open Skype to call a user or phone number.
Skype's documentation
Wikipedia summary of skype URL scheme
"C:\Program Files\Skype\Phone\Skype.exe" "/uri:%l"
Example: skype:+14035551111?call
skype-plugin Skype Plugin Protocol Handler Something to do with adding plugins to skype? Maybe.
"C:\Program Files\Skype\Plugin Manager\skypePM.exe" "/uri:%1"
svn SVN Protocol Opens TortoiseSVN to browse the repository URL specified in the URL.
C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe /command:repobrowser /path:"%1"
svn+ssh
tsvn
webcal Webcal Protocol Wikipedia describes webcal URL scheme.
Webcal URL scheme description.
A URL that starts with webcal:// points to an Internet location that contains a calendar in iCalendar format.
"C:\Program Files\Windows Calendar\wincal.exe" /webcal "%1"
Example: webcal://www.lightstalkers.org/LS.ics
WindowsCalendar.UrlWebcal.1
zune Zune Protocol Provides access to some Zune operations such as podcast subscription (via Zune Insider).
"c:\Program Files\Zune\Zune.exe" -link:"%1"
Example: zune://subscribe/?name=http://feeds.feedburner.com/wallstrip.
feed Outlook Add RSS Feed Identify a resource that is a feed such as Atom or RSS. Implemented by Outlook to add the indicated feed to Outlook.
Feed URI scheme pre-draft document
"C:\PROGRA~2\MICROS~1\Office12\OUTLOOK.EXE" /share "%1"
im IM Protocol RFC 3860 IM URI scheme description
Like mailto but for instant messaging clients.
Registered by Office Communicator but I was unable to get it to work as described in RFC 3860.
"C:\Program Files (x86)\Microsoft Office Communicator\Communicator.exe" "%1"
tel Tel Protocol RFC 5341 - tel URI scheme IANA assignment
RFC 3966 - tel URI scheme description
Call phone numbers via the tel URI scheme. Implemented by Office Communicator.
"C:\Program Files (x86)\Microsoft Office Communicator\Communicator.exe" "%1"
(Updated 2008-10-27: Added feed, im, and tel from Office Communicator)PermalinkCommentstechnical application protocol shell url windows

Mail Games: Testing the System | PSFK - Trends, Ideas & Inspiration

2008 Oct 15, 10:47The artist Harriet Russell encodes the destination postal address of her letters with anagrams, crosswords, and other puzzles: "Despite fears of a Royal Mail backlash, Russell found the system more than willing to play her game. The crossword edition was returned completed with the comment "Solved by the Glasgow Mail Centre". Only 10 of the 130 letters posted lost their way through the system, some held particularly testing anagrams, others were without a postal code."PermalinkCommentshumor puzzle crossword art mail postal-system harriet-russell book

The Future of Driving, Part I: Robots and Grand Challenges: Page 1

2008 Oct 13, 2:35"The robotics community outdid itself once again at DARPA's 2007 Urban Challenge. This contest featured all the challenges of the original Grand Challenge, along with a few new ones: the vehicles navigated a simulated urban environment and were required to interact with human-driven vehicles while obeying all traffic laws. Six teams successfully completed the course, with Boss, a car developed at Carnegie Mellon, claiming the prize." Sure, sure but when will they fly?PermalinkCommentsarticle robot car science technology transportation ai

Presidential Election 2008 FAQ

2008 Oct 13, 10:53"This is an FAQ (Frequently Asked Questions list) for the 2008 United States Presidential Election. I need to disclose up front that I am an Obama supporter. However, with the exception of the very last question, this FAQ is designed as a collection of factual information (such as the latest poll results) and of analysis that is as objective as possible."PermalinkCommentsvia:kris.kowal politics election obama mccain

Yahoo! Search Blog: Yahoo! Chats with Semantic Web Expert, Ben Adida

2008 Sep 16, 3:57Interview with Ben Adida on RDFa: "...RDFa is ready. It has just been approved by the W3C as a Candidate Recommendation, with the specific text of the specification and a brand new Primer published on June 20th. Y!: What can I do with RDFa? BA: You can tell the world what various components on your web page mean by marking up things like: The title of a photo Your name and contact information The license under which you're distributing your latest MP3 The ingredients of a cooking recipe The price of an item A gene on which you recently wrote a paper ... Anything that you want to make more machine-readable"PermalinkCommentsrdf microformats yahoo semantic interview ben-adida semanticweb via:felix42

Radiohead Extends Remix Voting as Entrants Bellyache | Listening Post from Wired.com

2008 Sep 15, 1:50This just in: people on the Internet are complaining. Also Radiohead has a remix contest. Neat. "No good deed goes unpunished. After letting fans pay whatever they wanted for In Rainbows and releasing stem tracks via iTunes so that one of the songs on the record could be remixed, Radiohead is facing accusations that its "Nude" remix contest is unfair."PermalinkCommentsmusic wired radiohead remix contest

Studio Walljump Announces Liight For WiiWare - WiiWare World

2008 Sep 5, 1:56This is the game from the same person I linked to previously who has a son named Link: "I'm very excited to finally announce our first game, Liight, for WiiWare! So... what is it? Liight is a puzzle solving game where the pieces are colored lights and the goal is to make cool music! Anyone can play! Just illuminate all the targets in each puzzle with light of the matching color... but it's not always so easy! You'll have to mix colors, cast shadows and make the most of your limited resources to solve these brain teasers. Solve 100 challenging puzzles! Create your own puzzles, and Share them with your friends via WiiConnect24. Host a Contest to see who can solve your puzzle the fastest. If you're ready, take on Nonstop mode, a whole new way to play where arcade-style scoring meets split-second strategy!"PermalinkCommentsliight game videogame nintendo wii wiiware

Birthday Weekend

2008 Sep 4, 11:30

A photo of the Seattle skyline in the distance over water.This past weekend Sarah and I went to Salty's on Alki. I had never been down to the Alki area so that was fun and I took a few photos while we were there. It turns out they were the last few photos I'll be taking with that camera as it turned itself on in my pocket and the lens extension mechanism broke for the inner most lens. So now I'm looking for a new camera, preferably one that has a lock mechanism so I can't accidentally turn it on in my pocket. The dinner was good and Salty's has a great view. On an unrelated note, the next day we went to an Audi dealership and test-drove the new 2009 A4 which was fun. I'm happy with my car but Sarah's feeling antsy.

PermalinkCommentsalki rambling camera weekend birthday nontechnical

Microsoft launches 3D wonder Photosynth for consumers | Webware : Cool Web apps for everyone - CNET

2008 Aug 22, 5:35Photosynth now available and easy to use: "Photosynth, a technology demo from Microsoft Live Labs, has graduated from its "ooh, that's pretty" status to being a viable Web service for consumers. The technology, which takes a grouping of photographs and stitches them into a faux 3D environment, can now be implemented with photos you've taken on your digital camera or mobile phone, and converted right on your computer. Previously, the process of stitching these photos together took weeks of processing on specially configured server arrays. With its latest version, Microsoft has managed to shrink that into around the time it takes to upload your photos."PermalinkCommentsvia:felix42 photosynth photos photography 3d microsoft free tool
Older EntriesNewer Entries Creative Commons License Some rights reserved.