128 lines
2.5 KiB
C
128 lines
2.5 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
PushDlgButton.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Hakki T. Bostanci (hakkib) 06-Apr-2000
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _PUSHDLGBUTTON_H_
|
||
|
#define _PUSHDLGBUTTON_H_
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
|
||
|
class CPushDlgButton
|
||
|
{
|
||
|
public:
|
||
|
CPushDlgButton(
|
||
|
DWORD dwWatchThread,
|
||
|
PCTSTR pszTitle,
|
||
|
int nButtonId
|
||
|
) :
|
||
|
m_dwWatchThread(dwWatchThread),
|
||
|
m_pszTitle(pszTitle),
|
||
|
m_nButtonId(nButtonId),
|
||
|
m_StopEvent(TRUE, FALSE),
|
||
|
m_Thread(ThreadProc, this),
|
||
|
m_nMatchingWindows(0),
|
||
|
m_nMatchingButtons(0),
|
||
|
m_nListItems(0)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
~CPushDlgButton()
|
||
|
{
|
||
|
m_StopEvent.Set();
|
||
|
m_Thread.WaitForSingleObject();
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
static DWORD WINAPI ThreadProc(PVOID pParameter)
|
||
|
{
|
||
|
CPushDlgButton *that = (CPushDlgButton *) pParameter;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
while (that->m_StopEvent.WaitForSingleObject(1000) == WAIT_TIMEOUT)
|
||
|
{
|
||
|
EnumThreadWindows(that->m_dwWatchThread, EnumThreadWndProc, (LPARAM) that);
|
||
|
}
|
||
|
}
|
||
|
catch (const CError &)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
static BOOL CALLBACK EnumThreadWndProc(HWND hWnd, LPARAM lParam)
|
||
|
{
|
||
|
CPushDlgButton *that = (CPushDlgButton *) lParam;
|
||
|
|
||
|
if (_tcscmp(CSafeWindowText(hWnd), that->m_pszTitle) == 0)
|
||
|
{
|
||
|
++that->m_nMatchingWindows;
|
||
|
|
||
|
EnumChildWindows(hWnd, EnumChildProc, lParam);
|
||
|
|
||
|
if (that->m_nMatchingButtons)
|
||
|
{
|
||
|
PostMessage(hWnd, WM_COMMAND, that->m_nButtonId, 0);
|
||
|
}
|
||
|
|
||
|
while (IsWindow(hWnd))
|
||
|
{
|
||
|
Sleep(100);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
static BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam)
|
||
|
{
|
||
|
CPushDlgButton *that = (CPushDlgButton *) lParam;
|
||
|
|
||
|
if (GetDlgCtrlID(hWnd) == that->m_nButtonId)
|
||
|
{
|
||
|
++that->m_nMatchingButtons;
|
||
|
}
|
||
|
else if (_tcscmp(CClassName(hWnd), _T("SysListView32")) == 0)
|
||
|
{
|
||
|
that->m_nListItems = ListView_GetItemCount(hWnd);
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
public:
|
||
|
int m_nMatchingWindows;
|
||
|
int m_nMatchingButtons;
|
||
|
int m_nListItems;
|
||
|
|
||
|
private:
|
||
|
DWORD m_dwWatchThread;
|
||
|
PCTSTR m_pszTitle;
|
||
|
int m_nButtonId;
|
||
|
Event m_StopEvent;
|
||
|
CThread m_Thread;
|
||
|
};
|
||
|
|
||
|
#endif //_PUSHDLGBUTTON_H_
|
||
|
|