⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 findwnd.cpp

📁 一个用c++写的自动关机(VC源码) 很有意思的
💻 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 + -