Click here to Skip to main content
15,896,063 members

c++ WTL/ATL How to find a window handle from the current process?

mrbll asked:

Open original thread
I have a library function (that does not know anything about the application its linked to) that sometimes opens a window.

If the application's main window is closed while the library window is open, the process gets into a weird state that wont exit, even after the library function widow is closed.

If the library function is "owned" by the main window, everything closed fine. However, in general the library function has no idea what windows are open.

The standard windows functions appear to either search all windows for all processes, or they require a window handle to find another window handle.

How do I find ANY top level window of the process my function is running in?
=======================================================================
Solution, clunky but tested, works.

static BOOL CALLBACK MyEnumThreadWndProc( HWND hwnd, LPARAM param ){
HWND *oW = reinterpret_cast<hwnd*> (param);
(*oW) = hwnd;
return false;
}

...
HWND oWind=0;
EnumThreadWindows(GetCurrentThreadId(), &MyEnumThreadWndProc, reinterpret_cast<lparam>(&oWind) );
Tags: C++, Windows, MFC, ATL, WTL

Plain Text
ASM
ASP
ASP.NET
BASIC
BAT
C#
C++
COBOL
CoffeeScript
CSS
Dart
dbase
F#
FORTRAN
HTML
Java
Javascript
Kotlin
Lua
MIDL
MSIL
ObjectiveC
Pascal
PERL
PHP
PowerShell
Python
Razor
Ruby
Scala
Shell
SLN
SQL
Swift
T4
Terminal
TypeScript
VB
VBScript
XML
YAML

Preview



When answering a question please:
  1. Read the question carefully.
  2. Understand that English isn't everyone's first language so be lenient of bad spelling and grammar.
  3. If a question is poorly phrased then either ask for clarification, ignore it, or edit the question and fix the problem. Insults are not welcome.
  4. Don't tell someone to read the manual. Chances are they have and don't get it. Provide an answer or move on to the next question.
Let's work to help developers, not make them feel stupid.
Please note that all posts will be submitted under the http://www.codeproject.com/info/cpol10.aspx.



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900