📄 findwnd.cpp
字号:
// FindWnd.cpp: implementation of the FindWindow class.
/*
* Copyright (c) 2006 - 2007 All Rights Reserved
*
* 程序作者:
* 张鲁夺(zhangluduo) : 为所有爱我的人和我爱的人努力!
*
* 联系方式:
* zhangluduo@msn.com
* QQ群:34064264
*
* 更新时间:
* 2007-11-26
*
* 功能描述:
* 本类用于查找窗口句柄
*
* 授权声明:
* 许可任何单位,个人随意使用,拷贝,修改,散布及出售这份代码,及其相关的
* 开发文档,但是必须保留此版权信息,以慰藉作者辛勤的劳动,及表明此代码
* 的来源,如若此份代码有任何BUG或者您有更好的修改建议, 请通知作者,以
* 便弥补作者由于水平所限而导致的一些错误和不足,谢谢!
*/
#include "stdafx.h"
#include "FindWnd.h"
FindWnd::FindWnd()
{
}
FindWnd::~FindWnd()
{
}
/** Return Values
To continue enumeration, the callback function must return TRUE;
to stop enumeration, it must return FALSE.
*/
BOOL __stdcall FindWnd::EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
PWNDINFO pWndInfo = (PWNDINFO)lParam;
char ClassBuf[256] = { 0 };
bool bTmp = false;
GetClassName(hWnd, ClassBuf, 255);
if(pWndInfo->strWindowName != "\0")
{
char TmpBuf[256] = { 0 };
GetWindowText(hWnd, TmpBuf, 255);
if( ::GetWindowLong(hWnd, GWL_STYLE) == pWndInfo->dwStyle &&
::GetWindowLong(hWnd, GWL_EXSTYLE) == pWndInfo->dwStyleEx &&
pWndInfo->strClassName == ClassBuf &&
pWndInfo->strWindowName == TmpBuf )
{
m_hWnds.push_back(hWnd);
return false;
}
}
else
{
if( ::GetWindowLong(hWnd, GWL_STYLE) == pWndInfo->dwStyle &&
::GetWindowLong(hWnd, GWL_EXSTYLE) == pWndInfo->dwStyleEx &&
pWndInfo->strClassName == ClassBuf )
{
m_hWnds.push_back(hWnd);
return false;
}
}
return true;
}
/** Return Values
To continue enumeration, the callback function must return TRUE;
to stop enumeration, it must return FALSE.
*/
BOOL __stdcall FindWnd::EnumChildProc( HWND hWnd, LPARAM lParam )
{
PWNDINFO pWndInfo = (PWNDINFO)lParam;
char ClassBuf[256] = { 0 };
bool bTmp = false;
GetClassName(hWnd, ClassBuf, 255);
if(pWndInfo->strWindowName != "\0")
{
char TmpBuf[256] = { 0 };
GetWindowText(hWnd, TmpBuf, 255);
if( GetWindowLong(hWnd, GWL_ID) == pWndInfo->dwCtrlID &&
GetWindowLong(hWnd, GWL_STYLE) == pWndInfo->dwStyle &&
GetWindowLong(hWnd, GWL_EXSTYLE) == pWndInfo->dwStyleEx &&
pWndInfo->strClassName == ClassBuf &&
pWndInfo->strWindowName == TmpBuf )
{
m_hWnds.push_back(hWnd);
return false;
}
}
else
{
if( GetWindowLong(hWnd, GWL_ID) == pWndInfo->dwCtrlID &&
GetWindowLong(hWnd, GWL_STYLE) == pWndInfo->dwStyle &&
GetWindowLong(hWnd, GWL_EXSTYLE) == pWndInfo->dwStyleEx &&
pWndInfo->strClassName == ClassBuf )
{
m_hWnds.push_back(hWnd);
return false;
}
}
return true;
}
vector<HWND> FindWnd::FindToplevel ( DWORD dwStyle, DWORD dwStyleEx, string strClassName, string strWindowName )
{
m_hWnds.clear();
WNDINFO WndInfo;
memset(&WndInfo, 0, sizeof(WNDINFO));
WndInfo.dwStyle = dwStyle;
WndInfo.dwStyleEx = dwStyleEx;
WndInfo.strClassName = strClassName;
WndInfo.strWindowName = strWindowName;
void* proc = m_Thunk.stdcall(this, Thunk::GetAddr(&FindWnd::EnumWindowsProc));
EnumWindows((WNDENUMPROC)proc, (LPARAM)&WndInfo);
return m_hWnds;
}
HWND FindWnd::FindChild ( HWND hParent, DWORD dwCtrlID, DWORD dwStyle, DWORD dwStyleEx, string strClassName, string strWindowName)
{
m_hWnds.clear();
WNDINFO WndInfo;
memset(&WndInfo, 0, sizeof(WNDINFO));
WndInfo.dwCtrlID = dwCtrlID;
WndInfo.dwStyle = dwStyle;
WndInfo.dwStyleEx = dwStyleEx;
WndInfo.strClassName = strClassName;
WndInfo.strWindowName = strWindowName;
void* proc = m_Thunk.stdcall(this, Thunk::GetAddr(&FindWnd::EnumChildProc));
EnumChildWindows(hParent, (WNDENUMPROC)proc, (LPARAM)&WndInfo);
if(m_hWnds.size() >= 1)
return m_hWnds[0];
else
return (HWND)0xFFFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -