2003–2005
1,039 posts
2005 400
December 2005
- On the “Days without a pony” web page
- Why do up-down controls have the arrows backwards?
- The office disco party
- “Pro forma” was so 1990’s
- Why does Windows setup lay down a new boot sector?
- Music to slip into a playlist to see if anybody is listening
- Beware the Image File Execution Options key
- When hyperthreading is enabled, all the processors are virtual
- The Dead Sea Scrolls are coming to Seattle
- A note to headhunters: Check your links
- You probably don’t want to run programs directly off your USB memory drive
- Whole lotta cranking going on
- On the ambiguity of uniqueness
- We Microsoft bloggers do talk to each other occasionally, y’know
- Experiencing the world from flight level 210
- Your debugging code can be a security hole
- On the inability to support hardware that nobody makes any more
- The not-entirely-unwitting victims of the Daily Show interview
- Using a physical object as a reminder
- Rory Blyth explains the difference between 720p and 1080i
- Whimsical embarrassment as a gentle form of reprimand
- Humanity’s greatest invention, according to seventh grade students
- When a token changes its meaning mid-stream
- It’s always a good idea to check your sources
- Using floppy disks as semaphore tokens
- Derren Brown’s tips on being a psychic
- Psychic debugging: Why your CPU usage is hovering at 50%
- What one Windows XP feature am I most proud of?
November 2005
- The Airline Screening Playset
- Sometimes the fault is not in our stars but in ourselves
- The craft of UI design: flow|state
- Taxes: Geopolitics
- Where does an IT guy from a major hotel chain stay at the PDC?
- Taxes: Hierarchical Storage Management
- How to get Raymond to stop being interested in talking with you
- This video universally gets one of two reactions
- What causes a program to be marked as “new” on the Start menu?
- Semaphores don’t have owners
- Why is a drive letter permitted in front of UNC paths (sometimes)?
- The world’s worst celebrity recasting of the American version of Harry Potter
- What’s the difference between HWND_TOP and HWND_TOPMOST?
- Mini-conversations at the stoplight during the bicycle commute
- What does the word “supported” mean?
- I didn’t see Stephen Hawking in Seattle yesterday
- Force-feeding the dogfood
- Another Schadenfreude-filled look back at the dot-com zaniness
- Sampling every flavor of dogfood in the store
- In real life, nobody upgrades their server
- Raymond’s review of Pride and Prejudice (Keira Knightley version)
- What was Dr. Watson’s original name?
- I just have a plain standard-issue guest chair
- The etymology of the word “traffic light”
- When was the last time you formatted a floppy disk?
- Content owners need to review the designer art, too
- The psychology of naming your internal distribution lists
- Hiding from the police? Try knitting a sweater
- Why was GlobalWire called GlobalWire?
- Take it easy on the automatic retries
- It’s not a book, but it’s slightly closer
- Why is there a special PostQuitMessage function?
- Look what the hurricanes blew into Lafayette, LA
- To be a leader you must know when to follow
- Found blog: The Piehole
- Blog design as a form of reality programming
- Why is inline autocomplete disabled by default?
- Bicycling from Mercer Island to Microsoft main campus
- Välkommen till Saerige?
- The COM interface contract rules exist for a reason
October 2005
- Night of the Knitting Dead
- The Hallowe’en-themed lobby
- Even in the enlightened year of 2005, we have programs that don’t handle long file names
- How to recognize different types of sentinel timestamps from quite a long way away
- Without a doubt, the world’s worst online Swedish lessons
- Why is the OEM code page often called ANSI?
- PC Magazine interviews “the team behind Windows” on its twentieth birthday
- When programs assume that the system will never change, episode 1
- Seattle Twenty-Five for $25 November 2005 restaurant list is available
- It’s like being at the PDC, but without the lines or the tote bag
- One person’s discoverable feature is another person’s annoyance
- New device detected: Boeing 747
- Fair Isle: Knitters Wanted
- Why is it even possible to disable the desktop anyway?
- The things in the PDC 2005 introductory video
- Quick and dirty buzzword bingo cards in Excel
- Follow-up: Portsmouth Spinnaker Tower now open, but maybe you should take the stairs
- There’s something about Rat Poker
- Be careful what you name your product group
- Answering the phone, a classic rookie mistake
- The undeletable Outlook folder
- The history of the path separator in Japanese and Korean Windows
- Thread affinity of user interface objects, part 5: Object clean-up
- Make money working at home in your pajamas, and it’s completely legal!
- Thread affinity of user interface objects, part 4: GDI objects and other notes on affinity
- Newark Liberty International Airport Terminal A travel tips
- Thread affinity of user interface objects, part 3: Menus, icons, cursors, and accelerator tables
- New blog on integrating Groove with Office
- Thread affinity of user interface objects, part 2: Device contexts
- Thread affinity of user interface objects, part 1: Window handles
- The difficult balancing act between customization and supportability
- Your profiling tools can manufacture performance issues where there were none
- On the dangers of sharing your apartment
- Jensen Harris joins the 7am club
- The unfortunate interaction between LOAD_LIBRARY_AS_DATAFILE and DialogBox
- Running old programs in a virtual machine doesn’t necessarily create a good user experience
- My history of time is briefer than yours
- Katamari Damacy: The most screwed-up video game ever
- Consequences of the scheduling algorithm: Sleeping doesn’t always help
- Perhaps I like the phrase “withered hand” a bit too much
- Consequences of the scheduling algorithm: Low priority threads can run even when higher priority threads are running
September 2005
- The reverse-engineering of PDC 2005 pass colors
- But I have Visual Basic Professional
- English Cut: Bringing bespoke tailoring into the general consciousness
- The DHS television show was all a scam, it appears
- On objects with a reference count of zero
- Avoiding double-destruction when an object is released
- COM object destructors are very sensitive functions
- Raymond’s 2005 MVP Global Summit event diary
- Kurt would have wanted it that way
- This is an unsupported ride, so if you stop, you will fall over
- The Double-E Half Hour of Pain
- Ten things I noticed at the 2005 PDC
- Contradictory feedback from my 2005 PDC talk
- Coming to the completely opposite conclusion on Windows versions
- Black(out) humor at the 2005 PDC
- Giving fair warning before plugging in your computer
- Things to do at Microsoft when the power goes out
- Please disconnect all cell phones, signal watches, and pagers
- Corrections to the answers I gave at the end of my PDC talk
- Why doesn’t Microsoft give every employee a UPS?
- Fiddling with the fonts, part 2: Keeping the English font small
- Fiddling with the fonts, part 1: Making the Chinese characters larger
- Typo patrol at the PDC
- Like an invention out of Harry Potter, except that Harry’s would use a quill
- The double-Ctrl+Alt+Del feature is really a kludge
- Sorry I missed you all this morning
- Why is there no all-encompassing superset version of Windows?
- Annoying renditions of the songs of Elvis
- Richard E. Grant as Dr. Who
- Understanding the consequences of WAIT_ABANDONED
- Reading the output of a command from batch
- I won’t be signing books but don’t let that stop you
- Why does the function WSASetLastError exist?
- Why aren’t low-level hooks injected?
- Declared unsuitable for minors in Australia! Sort of.
- Windows Server 2003 can take you back in time
- Spider Solitaire unseats the reigning champion
- Precision is not the same as accuracy
- More undocumented behavior and the people who rely on it: Output buffers
August 2005
- Hoping the worst-case scenario doesn’t come to pass
- Understanding hash codes
- On the adult appeal of dodgeball
- Program names in file type handlers need to be fully-qualified
- What program did you get, Danny?
- Why is the default console codepage called “OEM”?
- If you squint you might be able to make out my name
- Free bicycles to borrow at Marymoor Park
- Windows 95 crashes a cash register
- Marymoor Park summer movie series 2005 is nearly over
- A ticket to the Windows 95 launch
- Buying an entire Egghead Software store
- Why are icons multiples of 8 pixels in width?
- How do you convince developers to pay their “taxes”?
- This might be for real, even though it comes out at 7am
- How many floppy disks did Windows 95 come on?
- Justifiable assault with folding chair
- What are the access rights and privileges that control changing ownership of an object?
- Let’s just make up some dollar values and print them as fact
- What I’ll be doing at this year’s PDC
- Why is processor affinity inherited by child processes?
- When people ask for security holes as features: Silent install of uncertified drivers
- On being attacked by a sidewalk
- The poor man’s way of identifying memory leaks
- Adding a lookup control to the dictionary: Searching Pinyin
- Whatever you do, don’t ask for coffee
- Adding a lookup control to the dictionary: Just getting it on the screen
- Why is Windows Error Reporting nicknamed “Dr. Watson”?
- How can a company get access to Windows Error Reporting data?
- The dangers of messing with activation when handling a WM_ACTIVATE message
- That’s about the size of it
- Hey, who flattened the hills?
- The dangers of playing focus games when handling a WM_KILLFOCUS message
- Have you made any assignments in this space?
- Why does the Internet Explorer animated logo arrange its frame vertically?
- On speaking a particular language in the presence of non-speakers
- Double-clicking radio buttons
- Watch out, there are Swedes in the hallway!
- Drawing a monochrome bitmap with transparency
- Rendering menu glyphs is slightly trickier
- Rendering standard Windows elements
- Microsoft Company Picnic 2005
July 2005
- Does Windows have a limit of 2000 threads per process?
- What is this “web site” thing you are talking about?
- When the normal window destruction messages are thrown for a loop
- What is the difference between WM_DESTROY and WM_NCDESTROY?
- On paying for your meal upon leaving a restaurant
- Dinner at the Herbfarm in Woodinville
- Marin Alsop to be music director of the Baltimore Symphony Orchestra
- The importance of passing the WT_EXECUTELONGFUNCTION flag to QueueUserWorkItem
- FindFirstFile is not a SQL query
- News flash: Going for a walk on a nice day makes you feel better
- The Northwest Mahler Festival performs Mahler’s Second Symphony (“Resurrection”)
- Why does FindFirstFile find short names?
- What is the deal with the ES_OEMCONVERT flag?
- Watching the game of “Telephone” play out on the Internet
- If InitCommonControls doesn’t do anything, why do you have to call it?
- The apocryphal history of file system tunnelling
- Where did the names of the computer Hearts opponents come from?
- When Marketing edits your PDC talk description
- Converting from traditional to simplified Chinese, part 3: Highlighting differences
- Converting from traditional to simplified Chinese, part 2: Using the dictionary
- Converting from traditional to simplified Chinese, part 1: Loading the dictionary
- The best book on ActiveX programming ever written
- How can I recover the dialog resource ID from a dialog window handle?
- What struck me about life in the Republic
- What are SYSTEM_FONT and DEFAULT_GUI_FONT?
- What’s the point of DeferWindowPos?
- Answers to yesterday’s holiday fun puzzles
- Using script to query information from Internet Explorer windows
- Some holiday fun: Puzzle supplementary material
- Some holiday fun: Puzzle #6
- Some holiday fun: Puzzle #5
- Some holiday fun: Puzzle #4
- Some holiday fun: Puzzle #3
- Some holiday fun: Puzzle #2
- Some holiday fun: Puzzle #1
- I hope you weren’t using those undocumented critical section fields
- What’s the difference between My Documents and Application Data?
June 2005
- Beware of roaming user profiles
- Why isn't Windows Setup just a disk reimage plus a registry dump?
- A simple story in pictures
- Drink at work: The blog of a cartoonist
- Why do Microsoft code samples tend to use ZeroMemory instead of { 0 }?
- Why are there broadcast-based mechanisms in Windows?
- Why can't I get the pixels of a window that isn't visible on screen?
- Why does the CreateProcess function do autocorrection?
- I'll see (some of) you in Los Angeles in September
- Why does the Run dialog autocorrect but not the Run key?
- Google is the cute two-year-old girl with curly blond hair that gets all the attention
- The Date/Time control panel is not a calendar
- Perhaps this is what airport security is worried about
- What's the difference between autocomplete and dropdown history?
- Is there ever such a thing as a good letter from the IRS?
- Why do NTFS and Explorer disagree on filename sorting?
- What is the difference between "Unpin from Start menu" and "Remove from this list"?
- Displaying the dictionary, part 3: Using an owner-data listview
- Displaying the dictionary, part 2: Using text callbacks
- Seattle International Juggling Festival 2005
- Displaying the dictionary, part 1: Naive version
- Maintaining high standards at the International Frederic Chopin Piano Competition
- Why does Explorer eject the CD after you finish burning it?
- Why can't the default drag/drop behavior be changed?
- Can you trust the Man on the Street interview?
- Why don't control panel programs and property sheets show up in the taskbar?
- Answer to quick puzzle about security and synchronization
- What if two programs did this?
- Adam Felber teaches us how to avoid setting off motion detectors
- A quick puzzle about security and synchronization
- Why does Windows XP SP2 sometimes forget my CD autoplay settings?
- The 2005 Seattle Chicken Tour
- If strncpy is so dangerous, why does Visual Studio 2005 still support it?
- Why don't you ever see a rat vomiting?
- Using /LARGEADDRESSAWARE on 64-bit Windows for 32-bit programs
May 2005
- Using modular arithmetic to avoid timing overflow problems
- Shocked (shocked!) that patronage exists in Chicago politics
- You can't simulate keyboard input with PostMessage
- When is x/2 different from x>>1?
- Why does Add or Remove Programs show a large blank space?
- The effect of SetCursor lasts only until the next SetCursor
- Understanding ternary raster operations
- Boil first, then mash
- Why are DLLs unloaded in the "wrong" order?
- I'd like to register my stolen car, please
- When is a window visible yet not visible?
- Loading the dictionary, part 6: Taking advantage of our memory allocation pattern
- Loading the dictionary, part 5: Avoiding string copying
- You can't escape those AOL CDs
- Loading the dictionary, part 4: Character conversion redux
- Loading the dictionary, part 3: Breaking the text into lines
- The Microsoft corporate network: 1.7 times worse than hell
- Loading the dictionary, part 2: Character conversion
- Loading the dictionary, part 1: Starting point
- Developing a Chinese/English dictionary: Introduction
- How to query properties of the taskbar
- How do I cover the taskbar with a fullscreen window?
- When people ask for security holes as features: Stealing passwords
- Managing the UI state of accelerators and focus rectangles
- Another dead computer: My personal laptop
April 2005
- Building a dialog template at run-time
- Rescuing thread messages from modal loops via message filters
- Watching thread messages disappear
- If you pull a 1920's fire extinguisher out of the ocean, for pete's sake don't drink it!
- Thread messages are eaten by modal loops
- Welcome to Millennium Tower, due for completion in May 2005
- What is the HINSTANCE passed to SetWindowsHookEx used for?
- The new scratch program
- Sweden's Worst Driver
- The Itanium’s so-called stack
- What is the DC brush good for?
- When people ask for security holes as features: Hiding files from Explorer
- Project update: Voyage to Our Hollow Earth
- What is the HINSTANCE passed to CreateWindow and RegisterClass used for?
- News flash: Everybody has to pay income tax
- Tweaking our computation of the interval between two moments in time
- Computing the interval between two moments in time
- Using the powers of mathematics to simplify multi-level comparisons
- There's an awful lot of overclocking out there
- The end of one of the oldest computers at Microsoft still doing useful work
- The dialog manager, part 9: Custom accelerators in dialog boxes
- The dialog manager, part 8: Custom navigation in dialog boxes
- The dialog manager, part 7: More subtleties in message loops
- The dialog manager, part 6: Subtleties in message loops
- The dialog manager, part 5: Converting a non-modal dialog box to modal
- The dialog manager, part 4: The dialog loop
March 2005
- Neuroscience in the service of basketball fans
- The dialog manager, part 3: Creating the controls
- The dialog manager, part 2: Creating the frame window
- Adventures in product testing: Candles that catch fire
- The dialog manager, part 1: Warm-ups
- The CEO-to-English Phrase Book, a continuing series from Slate
- When a program asks you a question and then gets upset if you answer it
- The invisible price reduction
- If you disable drag/drop on the Start menu, you also disable right-click
- Pointers to virtual functions with adjustors
- Why does the debugger show me the wrong virtual function?
- Why does the debugger show me the wrong function?
- Psychic debugging: Why your expensive four-processor machine is ignoring three of its processors
- Confusion over whether you have Windows XP SP1 or SP2
- Competing to be the worst-dressed couple in America
- Your exception handler can encounter an exception
- The great Alaskan ice sculpture
- Windows NT Security in Theory and Practice
- Windows are not cheap objects
- Dot-Con Job: How InfoSpace took its investors for a ride
- A subtlety in restoring previous window position
- VegFest 2005 this weekend – and – vegetarian is as vegetarian does
- Performance gains at the cost of other components
- Why does SystemParametersInfo hang when I pass the SPIF_SENDCHANGE flag?
- Using SystemParametersInfo to access user interface settings
- Keep your eye on the code page
- A timed context menu
- Modality, part 8: A timed MessageBox, the better version
- Raymond's random walk, from Swedish designers to Mr. Monkey
- The bonus window bytes at GWLP_USERDATA
- Curling proves itself much more exciting than hockey this year
- The scratch window
- Suggestion Box 2
- Modality, part 7: A timed MessageBox, the cheap version
February 2005
- "Support our troops" wristbands provide only 1/3 support
- Modality, part 6: Interacting with a program that has gone modal
- Two brief reminiscences on the Windows XP "Comments?" button
- Modality, part 5: Setting the correct owner for modal UI
- Modality, part 4: The importance of setting the correct owner for modal UI
- Modality, part 3: The WM_QUIT message
- Modality, part 2: Code-modality vs UI-modality
- Modality, part 1: UI-modality vs code-modality
- MsgWaitForMultipleObjects and the queue state
- Limitations of the shell animation control
- You cannot globally reserve user-mode address space
- How to act like you know Chinese even though you don't
- LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES) is fundamentally flawed
- Windowless controls are not magic
- Why do minimized windows have an apparent size of 160×31?
- The dangers of filtering window messages
- What other effects does DS_SHELLFONT have on property sheet pages?
- Why does DS_SHELLFONT = DS_FIXEDSYS | DS_SETFONT?
- What's the deal with the DS_SHELLFONT flag?
- Why is breadth-first searching better for file system tree walking?
- The history of the Windows PowerToys
- How to detect programmatically whether you are running on 64-bit Windows
January 2005
- Why did the Win64 team choose the LLP64 model?
- Capturing the current directory from a batch file
- Control how much network bandwith Automatic Updates will use
- The strangest way of rounding down to the nearest quarter
- Why do files and directories with no time/date mess up sorting in Explorer?
- Alton Brown book appearance report
- Bringing cryptic command lines to Windows
- Why are kernel HANDLEs always a multiple of four?
- Hyperlinking to Hutchison Whampoa Limited forbidden
- A 90-byte “whereis” program
- A 90-byte "whereis" program
- CreateProcess does not wait for the process to start
- The importance of error code backwards compatibility
- How did MS-DOS report error codes?
- Cleaner, more elegant, and harder to recognize
- User interface design for vending machines – answer to puzzle
- User interface design for interior door locks
- User interface design for vending machines
- Marriage as a cross-branding opportunity
- Why doesn’t \ autocomplete to all the computers on the network?
- Why doesn't \ autocomplete to all the computers on the network?
- Seattle Snowstorm 2005 (insert swooshy sound effect)
- Taskbar notification balloon tips don’t penalize you for being away from the keyboard
- Taskbar notification balloon tips don't penalize you for being away from the keyboard
- How can code that tries to prevent a buffer overflow end up causing one?
- A rant against flow control macros
- You don’t need to run away from home to join the circus
- PulseEvent is fundamentally flawed
- You don't need to run away from home to join the circus
- Using fibers to simplify enumerators, part 5: Composition
- Using fibers to simplify enumerators, part 4: Filtering
2004 450
December 2004
- Using fibers to simplify enumerators, part 3: Having it both ways
- Using fibers to simplify enumerators, part 2: When life is easier for the caller
- Using fibers to simplify enumerators, part 1: When life is easier for the enumerator
- Computing the size of a directory is more than just adding file sizes
- You can create an infinitely recursive directory tree
- Alton Brown book tour 2005: I’m Just Here for More Food
- How to open those plastic packages of electronics without injuring yourself
- Why does the system convert TEMP to a short file name?
- Do you need clean up one-shot timers?
- BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool
- Sometimes people don’t like it when you enforce a standard
- Don’t save anything you can recalculate
- Excellent blog about Windows and Unicode
- How did Windows 95 rebase DLLs?
- Optimization is often counter-intuitive
- How to get more hits on Google than even Steve Ballmer
- The hunt for a faster syscall trap
- This Game Boy won’t hurt a bit, just help the Powerpuff Girls count backwards from ten
- Scientists come one step closer to the perfect poppy-seed bagel
- Why do dialog editors start assigning control IDs with 100?
- Why do I get E_NOINTERFACE when creating an object that supports that interface?
- Tintin goes to the neurologist
- Dragging a shell object, part 5: Making somebody else do the heavy lifting
- For all your chicken sequencing needs
- Dragging a shell object, part 4: Adding a prettier drag icon
- Time to dust off your conspiracy theories
- It is not illegal to use James Bond style tactics for winning at the roulette wheel
- Dragging a shell object, part 3: Detecting an optimized move
- Researchers find connection between lack of sleep and weight gain
- Dragging a shell object, part 2: Enabling the Move operation
- Dragging a shell object, part 1: Getting the IDataObject
- Why are documents printed out of order when you multiselect and choose “Print”?
- Why did Windows 95 run the timer at 55ms?
- What is the purpose of the bmPlanes member of the BITMAP structure?
November 2004
- What’s the difference between GetKeyState and GetAsyncKeyState?
- Why doesn’t the RunAs program accept a password on the command line?
- Simple things you can do with the ShellExecuteEx function
- A sample of desktop icon text effects
- Why can’t you drop directly onto a taskbar button?
- Why do folders like “My Pictures” come back after I delete them?
- When people ask for security holes as features: World-writable files
- The various ways of sending a message
- Am I sorry or not?
- If a program and a folder have the same name, the shell prefers the program
- Poking at diploma mills: Kennedy-Western University
- How do I break an integer into its component bytes?
- Exploiting the inattentive
- What is this Xerox directory doing in Program Files?
- Asking questions where the answer is unreliable anyway
- Will dragging a file result in a move or a copy?
- Advantages of knowing your x86 machine code
- Why does Windows not recognize my USB device as the same device if I plug it into a different port?
- A history of GlobalLock, part 4: A peek at the implementation
- A history of GlobalLock, part 3: Transitioning to Win32
- Ein hundert Dinge, die in den Vereinigten Staaten besser bleiben
- A history of GlobalLock, part 2: Selectors
- A history of GlobalLock, part 1: The early years
- Why do I sometimes see redundant casts before casting to LPARAM?
- And to think they let me get away with it for five years
- What was the point of the GMEM_SHARE flag?
- What was the difference between LocalAlloc and GlobalAlloc?
October 2004
- Why didn’t the desktop window shrink to exclude the taskbar?
- Where did windows minimize to before the taskbar was invented?
- Sometimes you can’t read the text under the cursor
- The strangest way of detecting Windows NT
- If the Euro 2004 tournament were a video game
- Accessing the current module’s HINSTANCE from a static library
- Why doesn’t Setup asks you if you want to keep newer versions of OS files?
- Let WMI do the heavy lifting of determining system information
- How does Explorer detect whether your program supports long file names?
- The compatibility constraints of even your internal bookkeeping
- Implementing higher-order clicks
- Logical consequences of the way Windows converts single-clicks into double-clicks
- Little facts you didn’t know about volcanoes
- The procedure entry point SHCreateThreadRef could not be located…
- Dispatching items collected from the suggestion box
- People lie on surveys and focus groups, often unwittingly
- What’s the atom returned by RegisterClass useful for?
- Why is there a separate GetSystemDirectory function?
- Cooking for engineers
- How to host an IContextMenu, part 11 – Composite extensions – composition
- How to host an IContextMenu, part 10 – Composite extensions – groundwork
- The macros for declaring and implementing COM interfaces
- Those partisan non-partisan groups
- How to host an IContextMenu, part 9 – Adding custom commands
- How to host an IContextMenu, part 8 – Optimizing for the default command
September 2004
- How to host an IContextMenu, part 7 – Invoking the default verb
- Still more goofy terms of service – restrictions on information disclosure
- What does boldface on a menu mean?
- How to host an IContextMenu, part 6 – Displaying menu help
- How to host an IContextMenu, part 5 – Handling menu messages
- The unrecognized assistants on those do-it-yourself shows
- How to host an IContextMenu, part 4 – Key context
- Penguins do not fall over!
- How to host an IContextMenu, part 3 – Invocation location
- How to contact Raymond
- How to host an IContextMenu, part 2 – Displaying the context menu
- Swedes struggle with the meaning of sick leave
- Pitfalls in handling the WM_CONTEXTMENU message
- How to host an IContextMenu, part 1 – Initial foray
- Why does my mouse/touchpad sometimes go berzerk?
- What happens when you specify RegexOptions.ECMAScript?
- A visual history of spam (and virus) email
- Interlocked operations don’t solve everything
- The x86 architecture is the weirdo
- How does Windows exploit hyperthreading?
- Sometimes the bug isn’t apparent until late in the game
- Storsjöodjur hunting season will opening soon
- Why isn’t the original window order always preserved when you undo a Show Desktop?
- Why is the page size on ia64 8KB?
- Converting a byte[] to a System.String
- What about Steve?
- More dictionaries you didn’t realize you needed
- The shift key overrides NumLock
- Even in computing, simultaneity is relative
- Why does Windows keep your BIOS clock on local time?
- How to find the Internet Explorer binary
August 2004
- Reading a contract from the other side: Application publishers
- The sociology of the mobile phone
- Importance of alignment even on x86 machines, part 2
- Importance of alignment even on x86 machines
- Why do some structures end with an array of size 1?
- Why can’t you treat a FILETIME as an __int64?
- Beware of non-null-terminated registry strings
- Finished competing in your event? Let the games begin!
- The kooky STRRET structure
- Summary of the recent spate of /3GB articles
- The curious interaction between PAE and NX
- Writing your own menu-like window
- Myth: In order to use AWE, you must enable PAE
- Why all these articles about PAE and /3GB?
- Myth: PAE increases the virtual address space beyond 4GB
- Why is the virtual address space 4GB anyway?
- Myth: The /3GB switch lets me map one giant 3GB block of memory
- Why does Exchange recommend /3GB if you have more than 1GB of physical memory?
- Myth: The /3GB switch expands the user-mode address space of all programs
- Myth: You need /3GB if you have more than 2GB of physical memory
- Myth: Without /3GB a single program can’t allocate more than 2GB of virtual memory
- Myth: Without /3GB the total amount of memory that can be allocated across all programs is 2GB
- Kernel address space consequences of the /3GB switch
- The oft-misunderstood /3GB switch
- Spammers look stupid when they don’t read the blog they spam on
- Why .shared sections are a security hole
- Never leave focus on a disabled control
- How to set focus in a dialog box
- The company picnic, sponsored by Microsoft
July 2004
- What is the DS_CONTROL style for?
- When should you use a sunken client area?
- The evolution of mascara in Windows UI
- Norway, drunk on success, becomes a country of layabouts
- Disabling the program crash dialog
- Slightly closer to a proper football (i.e., soccer) match
- A twenty-foot-long computer
- Why do some process stay in Task Manager after they’ve been killed?
- Why do some process stay in Task Manager after they've been killed?
- Why can’t you trap TerminateProcess?
- Why can't you trap TerminateProcess?
- Why was nine the maximum number of monitors in Windows 98?
- Querying information from an Explorer window
- Wrapper templates to make writing callback functions slightly easier
- How to display a string without those ugly boxes
- Don’t forget to #define UNICODE if you want Unicode
- Why “Under Construction” should be made illegal on the web
- Don't forget to #define UNICODE if you want Unicode
- Why "Under Construction" should be made illegal on the web
- How do you detect “Large Fonts”?
- How do you detect "Large Fonts"?
- There are two things you can do if you have a mad crush on a boy
- Watch out for those sample URLs
- Positioned vs. non-positioned listview views
- Welcoming a new era in Swiss army knives
- How does Add/Remove Programs get the size and other information?
- Why does icon text get a solid background if drop shadows are disabled?
- Lighting organic material and sucking it into your lungs
- Obtaining a window’s size and position while it is minimized
- Differences between managers and programmers, part 2
- Obtaining a window's size and position while it is minimized
- Differences between managers and programmers
- Diagnosing a problem with calling conventions
- What’s the difference between SHGetMalloc, SHAlloc, CoGetMalloc, and CoTaskMemAlloc
- What's the difference between SHGetMalloc, SHAlloc, CoGetMalloc, and CoTaskMemAlloc
- Another chance to see Elvis take on a mummy
- Don’t name your DLL “Security.dll”
- Don't name your DLL "Security.dll"
- Being in upper management must damage certain portions of your brain
- Why can’t I use the same tree item multiple times?
- What’s this fascination with Germanic languages?
- Why can't I use the same tree item multiple times?
- What's this fascination with Germanic languages?
June 2004
- Why does the Links folder keep re-creating itself?
- Fees disguised as taxes
- You can already see the bug report that led to this dialog box
- The difference between thread-safety and re-entrancy
- Ringside seats at Fruit Fly Fight Club
- When does SHLoadInProc unload a DLL?
- The suggestion box is now open
- Suggestion box
- Hong Kong crocodile caught at last.
- Monitor giving you a headache? Check the refresh rate.
- At least it's easier than learning Finnish
- The evolution of dialog templates – Summary
- The evolution of dialog templates – 32-bit Extended Templates
- The only way you're going to wake up next to Claudia Schiffer
- When cafeteria pricing meets mathematics
- The evolution of dialog templates – 16-bit Extended Templates
- The evolution of dialog templates – 32-bit Classic Templates
- Drug dealers have to pay taxes too.
- Too late, Mr. Jenkins. You were an F7 back at question 2
- The evolution of dialog templates – 16-bit Classic Templates
- Tweaked comment policy
- Exploding frying pans
- The evolution of dialog templates – Introduction
- Anybody remember Blade Squad or MV24?
- Verifying that your system files are digitally signed
- Augusto Pinochet's beverage preferences are a matter of national security
- What was the purpose of the hPrevInstance parameter to WinMain?
- Norway works to lengthen its lead
- What is the difference between HINSTANCE and HMODULE?
- Taiwan law requires writing to go left-to-right instead of top-to-bottom
- A hidden performance cost of regional windows
- Did you know that Baltimore has a Rumor Control Center?
- Speeding up adding items to a combobox or listbox
- What are these directories called 0409 and 1033?
- Calculate the speed of light by microwaving marshmallows
- Let there be a grand clubhouse feast!
- When can a thread receive window messages?
- The suburbs make you fat, more researchers conclude
- Deleted but not yet forgotten
- Do not underestimate the power of the game Deer Hunter
- An easy way to determine whether you have a particular file permission
- My first death threat
- Need to add 1.5kg and 350g?
- Letter carriers rebel
- The dreaded "main" threading model
- French schoolchildren invited to draw their impressions of the United States
- What does SHGFI_USEFILEATTRIBUTES mean?
May 2004
- Why is the default 8-bit codepage called "ANSI"?
- Chewing gum legalized in Singapore
- Kipping
- High-performance multithreading is very hard
- How do you undo Minimize All and Show Desktop?
- What is the difference between Minimize All and Show Desktop?
- Meet Anton Chekhov
- How does the desktop choose the icon label color?
- Art too bad to be ignored
- When you change the insides, nobody notices
- The F*deral Bur*au of Inv*stigations
- Extending the Internet Explorer context menu
- Callback, the safety newsletter for the aviation community
- Do you know when your destructors run? Part 2.
- You can do anything at zombo.com, anything at all
- Do you know when your destructors run? Part 1.
- Coffee machine or assault weapon?
- Letterboxing: Geocaching without the GPS
- Beware the hash reset attack
- The coolest thing you can do with a Gameboy is not "play a game on it"
- String sorting is not done by ASCII code any more.
- When do you put … after a button or menu?
- Plane-spotters to require government license
- How did those FILE_SHARE_* values come to be?
- Who'll be where for whom?
- When do you disable an option and when do you remove it?
- Norway: Pros and cons
- Thinking through a feature
- Is your web site an open relay?
- Varför läser jag svenska?
- How do the FILE_SHARE_* bits interact with the desired access bits?
- Links about COM threading models
- A guide to British pub etiquette
- There are two types of scrollbars
- Image File Execution Options
- Batman and Robin patrolling Whitley
- When should your destructor be virtual?
- Why did InterlockedIncrement/Decrement only return the sign of the result?
- Scripting is a two-edged sword
- Chris Pratley's history lesson
- Broadcasting user-defined messages
- Dead man running
- Is open source the new monoculture?
- Truckers block highway to protest high gas prices
- Why does my hard drive light flash every few second?
- Today is Swedish tax day
- You wanted Extreme Crochet?
April 2004
- Extreme croquet
- Where does the taskbar get grouped button icons from?
- $501 for 510g of peanut butter
- Using the echo command to remember what you were doing.
- What is __purecall?
- What, going to Sweden *again*?
- Nobody said it was a democracy
- Why doesn't C# have "const"?
- Musings on formal and informal address
- In order to demonstrate our superior intellect, we will now ask you a question you cannot answer.
- News flash: People are fooled by the Onion
- How to retrieve text under the cursor (mouse pointer)
- Cleaner, more elegant, and wrong
- NFL cracks down on grandstanding
- Good-Bye, Lenin!
- Why the compiler can’t autoconvert foreach to for
- Beethoven as ambient music
- Why can't the system hibernate just one process?
- WM_KILLFOCUS is the wrong time to do field validation
- A $2 billion bridge to one person
- Mapping all those "strange" digits to "0" through "9"
- Sorry, no free ice cream in Tennessee; it's illegal
- Why can't I install Windows on my USB drive?
- Astonishingly, rules apply to everyone.
- Not all short filenames contain a tilde
- Playing on an entirely different level
- First thing we do is kill all the jerks
- Unicode collation is hard
- The random number seed can be the weakest link
- Extraterrestrial income
- Comparing the Norwegian, Swedish, and Danish languages.
- A story about USB floppy drives
- Where does the taskbar get grouped button titles from?
- A very brief anecdote about Windows 3.0
- Reference counting is hard.
- How can I format my USB drive as NTFS?
- Why a really large dictionary is not a good thing
- The martial arts logon picture
March 2004
- The look of Luna
- When temperance backfires
- "Special skills" draft on the drawing board
- Where did my Task Manager tabs and buttons go?
- It's embarrassing how little Swedish you need to know
- Why Ctrl+Alt shouldn’t be used as a shortcut modifier
- The army is cool, except for the part where you have to fight
- You know you've been in Sweden too long when…
- What U.S. college students miss from home
- Yahoo's privacy policy regarding web bugs
- The ways people mess up IUnknown::QueryInterface
- Swedish spicy food
- URLs too small? Here comes hugeurl.com
- Regular expressions and the dreaded *? operator
- The SAS in-flight safety video
- Out of the deep fryer
- Some files come up strange in Notepad
- the qUirKY jaPan HomEPage
- @-notation was never legal in HTTP URLs anyway
- Why an object cannot be its own enumerator
- A privacy policy that doesn't actively offend me
- The only logical conclusion is that he was cloned
- Why does the Resource Compiler complain about strings longer than 255 characters?
- Catholic baseball fans want to eat meat on opening day
- The car with no user-serviceable parts inside
- Why is the line terminator CR+LF?
- On a server, paging = death
- More on the AMD64 calling convention
- Ännu skriver jag inte bra
- Still more creative uses for CAPTCHA
- Why do text files end in Ctrl+Z?
- Senators are really good at stock-picking
- How do I convert a SID between binary and string forms?
- What is the default security descriptor?
- What happens to those "To Any Soldier" care packages
- Tony Harding laces up again
- Why are dialog boxes initially created hidden?
- Why do operations on "byte" result in "int"?
- The Department of Homeland Security, the television series?
- Returning to Sweden, this time with some actual knowledge of Swedish
- Char.IsDigit() matches more than just "0" through "9"
- C++ scoped static initialization is not thread-safe, on purpose!
- Can you pass "Coaching Principles and Strategies of Basketball"?
- Money can burn a hole in your pocket
- Defrauding the WHQL driver certification process
- Where do those customized web site icons come from?
- Sorry, my kitchen is on fire
- Blow the dust out of the connector
- Calling the irony patrol
- Went to a Seattle Thunderbirds game this weekend
- Why are HANDLE return values so inconsistent?
- Why 16-bit DOS and Windows are still with us
February 2004
- The correct order for disabling and enabling windows
- Why do timestamps change when I copy files to a floppy?
- Why can't I put hotlinks in notification icon balloon tips?
- What's so special about the desktop window?
- Invalid thread and process IDs
- And we will build a processor with… ONE MILLION TRANSISTORS!
- Raymond's comment policy
- Why do I get a QueryInterface(IID_IMarshal) and then nothing?
- Sorry the posts are late lately
- No code is an island
- Why are RECTs endpoint-exclusive?
- The social skills of a thermonuclear device
- GetDialogBaseUnits is a crock
- The arms race between programs and users
- So what's to do in Sweden?
- The Seattle Improbable Show (2004)
- Bad version number checks
- Stories of going through airport security
- Improbable Research comes to Seattle
- TEXT vs. _TEXT vs. _T, and UNICODE vs. _UNICODE
- Dunkin Donuts vs. Krispy Kreme
- Sure, we do that
- Orkut's privacy policy and terms of service
- Answer to exercise: Pointer to member function cast
- I think this counts as having come full circle
- Pointers to member functions are very strange animals
- Adjustor thunks
- The layout of a COM object
- The Glass Engine and Ishkur's Guide to Electronic Music
- Answers to exercises – mismatching new/delete
- Mismatching scalar and vector new and delete
- The management of memory for resources in 16-bit Windows
- What goes wrong when you add "Copy To" to the context menu
January 2004
- "Section 419" scammers arrested in Netherlands; Danish flag flies proudly
- The format of string resources
- How do we decide what features make it into a product?
- Integer overflow in the new[] operator
- Ikea walk-through
- Another reason not to do anything scary in your DllMain: Inadvertent deadlock
- Passenger announcements in the airport
- Some reasons not to do anything scary in your DllMain
- Undermining your own proclamation
- Blog going on autopilot for a while
- The hollow brush
- David Hasselhoff's daughters normal in every way
- German as RPN
- In defense of the German language
- The white flash
- German, the language of love?
- What happened to DirectX 4?
- Cell phones: Can't live with 'em, can't live without 'em, but maybe can ban 'em
- What tools should I assume everybody has?
- Fixing security holes in other programs
- ia64 – misdeclaring near and far data
- Uninitialized garbage on ia64 can be deadly
- How can a program survive a corrupted stack?
- Aw, poor guy, he's so depressed
- Google just keeps adding stuff
- What can go wrong when you mismatch the calling convention?
- The history of calling conventions, part 5: amd64
- If you know Swedish, the world is funnier
- The history of calling conventions, part 4: ia64
- "Friends" is so trendsetting
- Why can't I GetProcAddress a function I dllexport'ed?
- What's old is new again… well it's still old
- Is there an exclusionary rule in Sweden?
- Why do member functions need to be "static" to be used as a callback?
- Ten-year-old + Microsoft Flight Simulator = terrorist
- It's called "proofreading", give it a shot why don't you
- The history of calling conventions, part 3
- Budget cuts strike Swedish radio
- The history of calling conventions, part 2
- Words I'd like to ban in 2004
- Why does the copy dialog give such horrible estimates?
- Why does the x86 have so few registers?
- The history of calling conventions, part 1
- Don't trust the return address
2003 189
December 2003
- College football commercialized? What ever gave you that idea?
- How to stop delivery of telephone books
- People with almanacs may be terrorists, FBI warns
- What's the difference between CreateMenu and CreatePopupMenu?
- At least the Danes know how to count
- "Beam me up" is not yet recognized
- What's with those blank taskbar buttons that go away when I click on them?
- Another privacy policy that isn't very private
- Danish so-called "pronunciation"
- How to hide privacy violations in a privacy disclosure statement
- Famous people doing mundane things = news!
- You can read a contract from the other side
- What order do programs in the startup group execute?
- Why not just block the apps that rely on undocumented behavior?
- When programs grovel into undocumented structures…
- The cult of PowerPoint
- One in five Swedes steal their Christmas tree
- How do I determine whether I own a critical section if I am not supposed to look at internal fields?
- German sounds more and more like "Alles Lookenpeepers" every day
- Sometimes, an app just wants to crash
- 20031218 00
- How to void your warranty
- What is the window nesting limit?
- When marketing designs a screenshot
- Tinkering with the look
- The unsafe device removal dialog
- The migration continues
- Welcome to the New Old New Thing
- Tote Hose in Weilburg
- Why are structure sizes checked strictly?
- Voyage to Our Hollow Earth
- How do I pass a lot of data to a process when it starts up?
- What is the command line length limit?
- Scoble's rant on UI defaults
- Why you should never suspend a thread
- What's with the catcow and dogoldfish?
- If FlushInstructionCache doesn't do anything, why do you have to call it?
- At least she represents the United States faithfully
- Why do I have to return this goofy value for WM_DEVICECHANGE?
- Which access rights bits belong to whom?
- Which window style bits belong to whom?
- The New Old New Thing
- Which message numbers belong to whom?
- What did the letters “NT” originally stand for?
- What are these strange values returned from GWLP_WNDPROC?
November 2003
- Hello Sweden, you're on fire
- It's like the Swedes don't want you to learn their language
- Other tricks with WM_GETDLGCODE
- What do the letters W and L stand for in WPARAM and LPARAM?
- You can drag/drop to the command prompt
- A shortcut to the Run dialog
- Why isn't Fast User Switching enabled on domains?
- What's the deal with the System Volume Information folder?
- How can I tell if I have the 64-bit edition of Windows?
- Notepad's geek options require Word Wrap be disabled
- Make sure the buttons match the question
- Another favorite from the Grauniad
- More stories of bad hardware
- Stay healthy: Drink Guinness
- Preventing edit control text from being autoselected in a dialog box
- British newspapers are much more fun to read
- Another different type of dialog procedure
- Answer to previous exercise about m_fRecursing
- A different type of dialog procedure
- Safer subclassing
- Welcome Martyn Lovell
- Homework assignment about window subclassing
- A warning to people averse to code
- How much do you expect from a framework layer?
- Returning values from a dialog procedure
- Little facts you didn't know about concrete
- Why are companies so worried about retraining costs?
- An anecdote about improper capitalization
- Just follow the rules and nobody gets hurt
- The long and sad story of the Shell Folders key
October 2003
- Why highlighting by inverting colors is a bad idea
- I thought you said people don't know how to read analog clocks
- Drawing an active-looking caption even when not active
- When vendors insult themselves
- Getting a custom right-click menu for the caption icon
- Being the Nobel Peace Prize
- Kinder Überraschungen
- Why Daylight Savings Time is nonintuitive
- Writing a sort comparison function
- What's the deal with those reserved filenames like NUL and CON?
- Using the TAB key to navigate in non-dialogs
- What is the Alt+Tab order?
- The more I learn about Sweden, the weirder it gets
- Curling anyone?
- Don't let Marketing mess with your slides
- Scrollbars redux: Part 12
- The much-misunderstood "nop" action
- What about BOZOSLIVEHERE and TABTHETEXTOUTFORWIMPS?
- Murphy's law for school
- Why don't notification icons get a message when the user clicks the "X" button?
- Answer to previous exercise about the mythical WM_MOUSEENTER message
- Why is there no WM_MOUSEENTER message?
- Why doesn't the clock in the taskbar display seconds?
- Other uses for bitmap brushes
- Why is address space allocation granularity 64KB?
- In Explorer, you can right-click the icon in the caption
- I'm doing this instead of writing a book
- Low-tech usability testing
- Stupid memory-mapping tricks
- Researchers discover link between music and drinking
- Why does the System Properties page round the memory size?
- Why can't I use &-accelerators on the Start menu?
- What do the text label colors mean for files?
- Why does my Advanced Options dialog say ON and OFF after every option?
- Jag skrivar svenska inte so bra.
- Jag taler lita svenska.
- Why do I get spurious WM_MOUSEMOVE messages?
September 2003
- Why is the readonly property for folders so strange?
- Why you can’t rotate text
- In case people got the wrong impression
- Back from Europe
- When I dock my taskbar vertically, why does the word "Start" disappear?
- Pre-travel insomnia
- How much is that gigabyte in the window?
- Improving the world one bad analogy at a time
- Emergency vacation
- The end of the scrollbar series
- Answers to exercise from Scrollbars Part 11
- Scrollbars part 12: Applying WM_NCCALCSIZE to our scrollbar sample
- Why does Win32 fail a module load if an import could not be resolved?
- Eric's complete guide to BSTR semantics
- Scrollbars part 11: Towards an even deeper understanding of the WM_NCCALCSIZE message
- Something about Microsoft employees and milk
- I'm not sure if this was a dare
- Answers to exercises from Scrollbars Part 10
- Whimsical bug reports
- Why does the taskbar default to the bottom of the screen?
- Scrollbars part 10 – Towards a deeper understanding of the WM_NCCALCSIZE message
- You too can dress like Raymond
- Computers are still too hard to use.
- Why do some people call the taskbar the “tray”?
- If you see only one Elvis vs. Mummy movie this year, make it this one
- Scrollbars part 9 – Maintaining the metaphor
- It's a lot easier to write a column if you don't care about accuracy
- An insight into the Windows 95 startup sound
- How to recognize different types of timestamps from quite a long way away
- Where is my program running from?
- Case mapping on Unicode is hard
- Why are the rules for GetWindowText so weird?
- Why is there no programmatic access to the Start menu pin list?
- The World Adult Kickball Association
- Determining whether your window is covered
- Even the trees are falling for the media's lies
- Suburbs make you fat, researchers conclude
- The default answer to every dialog box is "Cancel"
August 2003
- Setup could not verify integrity of file
- Painting only when your window is visible on the screen
- Hardware backwards compatibility
- Why are these unwanted files/folders opening when I log on?
- What are all these files in my C:WINDOWSCSC directory?
- What are those little overlay icons?
- Rotating the Z-order
- Windows brings out the Rorschach test in everyone
- Knitting a pumpkin
- Why isn't my time zone highlighted on the world map?
- The secret life of GetWindowText
- What is in the "Windows 95 Special Edition" box?
- Lessons from the trenches
- There will be a part 9 in the scrollbar series
- Why does Windows 95 have functions called BEAR, BUNNY and PIGLET?
- A day in the trenches
- Answer to exercise
- Windows 95 doesn’t boot with more than 1GB of RAM
- Scrollbars part 8 – Integral interactive resizing
- Why can't I remove "for test/evaluation purposes only"?
- Scrollbars part 7 – Integrality
- Answers to exercises
- Why is a registry file called a "hive"?
- A subtlety in the keyboard code
- Scrollbars bart 6 – The wheel
- Limitations on DLL resources in Windows 95
- Keyboard accessibility for scrollbars
- Changing the Windows boot logo
- Answer to previous exercise on proportional scrollbars
July 2003
- Scrollbars, part 4: Adding a proportional scrollbar
- Answer to yesterday's exercise
- Why doesn't the new Start menu use Intellimenus in the All Programs list?
- Scrollbars, part 3: Optimizing the paint cycle
- Why doesn't Windows have an "expert mode"?
- Scrollbars, part 2
- More terse Q&A on Tweak UI 2.10
- The scratch program
- Why do you have to click the Start button to shut down?
- Tweak UI 2.10