?? 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 + -