diff --git a/2.x/trunk/ProcessHacker/mainwnd.c b/2.x/trunk/ProcessHacker/mainwnd.c index 3bc6cd47f..3dc406c3a 100644 --- a/2.x/trunk/ProcessHacker/mainwnd.c +++ b/2.x/trunk/ProcessHacker/mainwnd.c @@ -3201,13 +3201,18 @@ BOOL CALLBACK PhpEnumProcessWindowsProc( ) { ULONG processId; + HWND parentWindow; if (!IsWindowVisible(hwnd)) return TRUE; GetWindowThreadProcessId(hwnd, &processId); - if (processId == (ULONG)lParam) + if ( + processId == (ULONG)lParam && + !((parentWindow = GetParent(hwnd)) && IsWindowVisible(parentWindow)) && // skip windows with a visible parent + GetWindowTextLength(hwnd) != 0 + ) { SelectedProcessWindowHandle = hwnd; return FALSE; diff --git a/2.x/trunk/ProcessHacker/proctree.c b/2.x/trunk/ProcessHacker/proctree.c index 60c8d2def..25861888c 100644 --- a/2.x/trunk/ProcessHacker/proctree.c +++ b/2.x/trunk/ProcessHacker/proctree.c @@ -572,6 +572,15 @@ BOOL CALLBACK PhpEnumProcessNodeWindowsProc( if (UlongToHandle(processId) == processNode->ProcessId) { + HWND parentWindow; + + if ( + !IsWindowVisible(hwnd) || // skip invisible windows + ((parentWindow = GetParent(hwnd)) && IsWindowVisible(parentWindow)) || // skip windows with visible parents + GetWindowTextLength(hwnd) == 0 // skip windows with no title + ) + return TRUE; + processNode->WindowHandle = hwnd; return FALSE; } @@ -592,18 +601,7 @@ VOID PhpUpdateProcessNodeWindow( if (ProcessNode->WindowHandle) { - ProcessNode->WindowText = PhCreateStringEx(NULL, 128); - - if (InternalGetWindowText(ProcessNode->WindowHandle, - ProcessNode->WindowText->Buffer, ProcessNode->WindowText->Length / sizeof(WCHAR)) != 0) - { - PhTrimToNullTerminatorString(ProcessNode->WindowText); - } - else - { - PhSwapReference(&ProcessNode->WindowText, NULL); - } - + ProcessNode->WindowText = PhGetWindowText(ProcessNode->WindowHandle); ProcessNode->WindowHung = !!IsHungAppWindow(ProcessNode->WindowHandle); }