Re: EnumThreadWindows - EnumThreadWndProc does not get called
Word stopped using standard menus long ago, so if you're equating the
calling of EnumThreadWndProc with it finding a window that has a standard
menu, there's the mistake.
Doug,
Thanks for your thoughtful reply. Well my first problem is
EnumThreadWndProc does not get even called when I tried it for
WinWord.exe. For Notepad and Win32 application, it did work well.
About standard menus of word, I really agree with you. But If I want to
find out the menu of any application , ther is no best and generic way
other than EnumThreadWndProc. What do I really need to do to get menu
of WinWord.exe ? Is there any trick that could solve my problem ?
Thanks and Regards,
AJay
Doug Harrison [MVP] wrote:
On 8 Dec 2006 05:59:29 -0800, "Roland" <ajay.sonawane@gmail.com> wrote:
I am using EnumThreadWindows to enumerate all windows of newly created
process using CreateProcess. EnumThreadWndProc gets called for notepad
but does not get called for MS Word. I am not able to figure out why it
is happening, Here is piece of code.
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Start the child process.
if( !CreateProcess( TEXT("C:\\Program Files\\Microsoft
Office\\OFFICE11\\winword.exe"), NULL,NULL,NULL,FALSE,FALSE,0,NULL,NULL,&si,&pi
)
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}
Sleep(10000);
WaitForInputIdle(pi.hProcess,10000);
// Enumerate all threads of Windows
BOOL bRetVal =
EnumThreadWindows(pi.dwThreadId,EnumThreadWndProc,(LONG)this);
if(! this->m_hWnd )
return;
BOOL CALLBACK EnumThreadWndProc(HWND hwnd,LPARAM lParam)
{
CMainFrame *pFrameWnd = (CMainFrame*)lParam;
if(GetMenu(hwnd) != NULL)
{
pFrameWnd->m_hWnd = hwnd;
return FALSE;
}
return TRUE;
}
Word stopped using standard menus long ago, so if you're equating the
calling of EnumThreadWndProc with it finding a window that has a standard
menu, there's the mistake.
--
Doug Harrison
Visual C++ MVP