I have inherited a program written in Visual C++ 6 that works behind the scenes to hook another application and monitor the user's keystroke activity in that target program. The hooking program was originally written for Windows 95. I have been asked to upgrade it and migrate it to Windows 2000 and Windows XP. However, I have a problem. The hooking program cycles in the background looking for instances of the target application and then hooks the process and thread of the given instance, allowing the target program to have as many instances up on the desktop as the user wants. The hooking program saves off process and threadids, along with window ids to a collection object and when a specific window in a particular instance of the target application has focus, the hooking application monitors that instance of the target application. This is how the program works on Windows 95. However, when I run this program on a machine with either Windows 2000 or Windows XP I cannot activate more than one instance of the target program, otherwise I get the "Switch To", "Retry", "Cancel" error box and the desktop freezes up. This hooking program was patterned after code found in the book, Programming Applications for Microsoft Windows by Jeffrey Richter, using much of Chapter 22 quidance. This is a program that uses API hooking and the API functions to locate instances of specific windows. However, no matter what I try to do to debug this program, I cannot figure out why it does not allow more than one instance of the target application to appear on the desktop at any given moment on a computer using the Windows 2000 or Windows XP operating systems, and why any effort to increase the number of instances of the target application running on the desktop freezes up the computer. Any information, or help would be greatly appreciated.