The Old New Thing
Practical development throughout the evolution of Windows.
Latest posts
For a place that’s supposed to be full of doctors, they sure don’t look like doctors
Anthony Edwards is returning for a guest spot on his old series ER. I don't watch ER, but when I happen to stumble across it, the thing that strikes me most is that for a where most of the characters are supposed to be doctors, they sure don't look like doctors. They look like models who have been forced to wear scrubs and white lab coats. Except for Anthony Edwards. He actually looks like a doctor. One of my cousins is a doctor, and for some reason, we were watching an episode of ER in which the medical student was put in charge of a patient and made a bad medical decision. My cousin's reaction: "There's n...
Suggestion Box 3, short answers (part 2 of who knows how many)
Another round of short answers to questions in the suggestion box. How does Windows choose the monitor a window maximizes to? The window maximizes to the monitor selected by . The algorithm the uses to select the monitor is documented in MSDN. How do you make your Win32 application safe from keyloggers? You can't. In the battle between kernel mode and user mode, user mode loses. That's why we have a distinction between kernel mode and user mode in the first place. Why should you ever call MessageBox from inside a message handler that is re-entrant? "I'm having a ha...
And now, your moment of reflection
Master storyteller Ira Glass teaches us how to tell a story, and the importance of the moment of reflection. (In the third video he explains why when you are trying to do something creative you always suck, and that's okay.) And once you've soaked up Ira's advice, you can admire Kasper Hauser's parodies: Going Postal and Phantom High School.
What were ShellExecute hooks designed for?
Windows 95 introduced (and Windows Vista removed) the concept of ShellExecute hooks. These are objects which implemented the interface. That interface had just one method: , which took a structure and returned to indicate that the item was executed, to allow processing to continue, and an error code to halt processing. The intended purpose of the shell execute hook was to allow you to extend the set of strings that can be executed. For example, Internet Explorer 1 used a shell execute hook so that you could type into the Run dialog and invoke the Web browser. This was necessary because the o...
If you use an absurd signature, I might end up sending it back to you
Despite my previous rant, absurdly elaborate email signatures are still common at Microsoft, and I'm not just talking about the ones that contain information that may be required by department policy. I'm talking about signatures that use bright colors, large fonts, maybe a bitmap or two, sometimes even a photo of the sender! I will sometimes mention in my reply, "Please consider making your signature less eye-catching. It distracts from the text of your message." But other times, I just incorporate it in to the reply more directly: From: John Doe Blah blah blah question blah blah blah. John Doe Technical L...
I’ll see (some of) you in Los Angeles, but this time it’ll be October
(It was September last time.) I've been asked to step in as a replacement speaker for the 2008 PDC. The details of the talk are not yet publically available, but what I can say is that the topic will be in the category of Win32 programming. Disclaimers: Information was believed to be accurate at press time. Speakers subject to change. Talk may be changed or cancelled for reasons outside my control, or possibly even reasons within my control. This posting is provided as is with no warranties, and confers no rights. Not recommended for children. Some settling may occur during shipping. If symptoms persist, se...
QueryPerformanceCounter counts elapsed time, not CPU cycles
An anonymous coward asks whether the function counts elapsed time or CPU cycles. It counts elapsed time. It has to, since its value is governed by the function, which returns a number specifying the number of units per second, and the frequency is spec'd as not changing while the system is running. For CPUs that can run at variable speed, this means that the HAL cannot use an instruction like , since that does not correlate with elapsed time. Commenter "A" appears to have found a buggy HAL that failed to take this into account and returns values that do not correlate with elapsed time. What would it t...
Tales from the interview: Anticipating your own incompetence is not a good interview strategy
Some years ago, there was a candidate who was interviewing for a programming position in my group. The first interviewer asked the candidate about career plans with that old standby, "Where do you see yourself in five years?" — In five years, I see myself in program management. This is a fair answer. Many people see programming as a stepping stone to management. It doesn't have to be, but it's certainly a career path more than one person has taken. My colleague decided to probe further. "What is it about program management that appeals to you?" — Well, after five years, all the kids gradua...
Tales from the interview: Lunch is not a competition, episode 2
Last time, we saw the consequences of failing to recognize that lunch is not a competition. Today we'll see an even more unfortunate result. One candidate went to lunch with my colleague the economist. (Claim to fame: "Jenna von Oÿ is my cousin!") They went to a local Thai restaurant, Thai being a very popular cuisine here in the Seattle area. The afternoon interviews showed a marked change for the worse from the morning interviews, and the afternoon interviewers began to ask, "What happened at lunch? The candidate was doing really well in the morning, but in the afternoon, had difficulty concentrating a...