Window Finder OLE Control

Visual C++ 4.0 Project

Window Finder is an ActiveX control similar to Spy++'s Window Finder control. The user can drag the circle over a window (a border will be drawn around the window) to select it, and your program can figure out what the handle of the window is.

To use the Window Finder ActiveX control, you will first need to register it using regsvr32 (type regsvr32 winfinder.ocx at the command line). In the Insert Control dialog, the control will be named "WinFinder Control".

Changes From 1.0 to 2.0
  • No global callback function needed, a WM_USER + 100 message is sent to parent window when selection changes
  • Demo project changes
  • Minor bugfixes

In the demo project, "targetWindow" is shown in the static control, it is updated in the callback function.

Note: The variable type for the catagory targetWindow is "long" because it seems that I could only use certain varible types, and HWND was not one of them.

Notification Message

When the window selection changes, the WinFinder control sends a WM_CHAR + 100 message to it's parent window (usually a dialog). The LPARAM parameter contains the new selected window handle.

This replaces the callback function, but for compatability the callback function can still be used (see the next section). If you need more flexibility, use the callback function. Callback Function

To set a callback function that is called when the selected window c changes, you have to send a WM_USER + 100 message to the WinFinder control. LPARAM should be the address to a structure that looks like this:


typedef int (*WINFINDERCALLBACK)(HWND);

typedef struct
{
    WINFINDERCALLBACK pfn;
} *LPWINFINDERCALLBACKSTRUCT;

'pfn' should point to the address of the callback function. The WPARAM parameter to the message should be zero if you want the callback function set to the one specified in the LPARAM structure, or zero if you don't wan't to set it. The return value of the message handler is always the address of the callback function, so setting WPARAM to a non-zero value can be used to retrive the address to the function.

The callback function should return a value of "0" to allow the window to be selected, or "1" to ignore the window (this is ueful for ignoring the dialog that the control is in, like Spy++ does). The declaration of the callback function should be similar to:


int WindowFinderSelected(HWND hWnd);

'hWnd' is the handle of the currently selected window, which can also be retreived by the "targetWindow" property.

The default callback function allows all windows to be selected.

The sample project displays the the window handle of the window that is selected by the Window Finder Control. The callback function sets the caption of the window handle to the window handle of the selected window.

Conclusion

The WinFinder control isn't very useful for many applications, but sometimes it may be just what you need.

Downloads

Download OCX - 11 Kb
Download demo project - 16 Kb
Download source - 33 Kb


Comments

  • WinControl

    Posted by Legacy on 06/06/2001 12:00am

    Originally posted by: Venkatesh

    excellent tool

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • CentreCorp is a fully integrated and diversified property management and real estate service company, specializing in the "shopping center" segment, and is one of the premier retail service providers in North America. Company executives travel a great deal, carrying a number of traveling laptops with critical current business data, and no easy way to back up to the network outside the office. Read this case study to learn how CentreCorp implemented a suite of business continuity services that included …

Most Popular Programming Stories

More for Developers

RSS Feeds