Design Evolution of the Microsoft Windows Welcome Screen
https://www.versionmuseum.com/history-of/all-microsoft-windows-splash-title-screens
Evolution of Cross-Process Communication in Windows
The History of Windows: From Single-Tasking to Modern Multi-Process Communication
Once upon a time, in the golden era of computing (cue nostalgic 8-bit music), Windows was a far cry from the multi-threaded, process-isolated behemoth it is today.
- Windows 1.0 (1985) – A GUI shell over MS-DOS. Nobody really cared.
- Windows 2.0 (1987) – Slightly better, but still awkward.
- Windows 3.0 (1990) – My personal favorite! This was a real game-changer.
- Windows 3.11 for Workgroups (1993) – The most popular version of early Windows. It introduced networking support, making it a staple for offices.
- Windows 95 (1995) – Goodbye, 16-bit era! Hello, true multi-tasking.
- Windows NT (1993 - today) – True multi-user, multi-process OS with actual security (gasp!).
- Windows XP, 7, 10, 11 – Evolution continues, and somewhere along the way, Microsoft decided people didn’t need to control their own computers anymore.
Windows 3.x: The Era of Message Passing
Back in the 16-bit days, everything ran in the same address space. There was no such thing as process isolation; your app could poke around in another app’s memory like a nosy neighbor.
The operating system was single-threaded. The way we handled inter-application communication was through message passing.
Windows provided two main functions for message handling:
GetMessage()
– Waits for a message and retrieves it.PeekMessage()
– Checks for a message but doesn’t wait.
The Classic Windows Message Pump
All GUI applications had a message pump that looked like this:
|
|
This was the lifeblood of every Windows app.
Sending Messages Between Windows Applications
Back in the Windows 3.x days, because everything was in the same address space, you could actually send a pointer to memory between “applications” (which were actually just different instances in the same memory space).
Here’s an example of sending a registered Windows message between two windows:
|
|
This allowed communication between applications, but again, they were all in the same process.
Modern Windows: Cross-Process Communication Methods
With the advent of Windows NT and true process isolation, sharing memory like a free-for-all became a big no-no. Instead, we got proper cross-process communication methods:
1. Named Pipes
Named pipes allow bidirectional communication between processes.
Example: Server
|
|
Example: Client
|
|
2. Signals (Event Objects)
Windows supports event objects for signaling between processes.
|
|
3. Slots (MailSlots)
Mail slots allow one-to-many communication.
Sender:
|
|
Receiver:
|
|
Conclusion
From the wild-west days of direct memory sharing to the structured world of named pipes, events, and mail slots, Windows cross-process communication has evolved significantly.
Sure, we lost the reckless fun of passing pointers between apps, but at least our programs no longer crash because some rogue app decided to overwrite half of our memory. Ah, progress.