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

📄 listview.cpp

📁 PPC上的任务管理器源代码, 可以列表, 中止等操作, 并自动过滤PPC内部程序任务.
💻 CPP
字号:



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#include "Main.h"
#include "ListView.h"
#include <TLHelp32.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CListView 类静态变量
HWND CListView::m_hWnd = NULL;
UINT CListView::m_uView = IDM_View_Task;
UINT CListView::m_uCount = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 创建
VOID CListView::Create()
{
	RECT rtRect;
	GetClientRect(CMainWnd::m_hWnd, &rtRect);
	m_hWnd = CreateWindow(WC_LISTVIEW, NULL,
		WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_SINGLESEL,
		0, 0, _RectWidth(rtRect), _RectHeight(rtRect), CMainWnd::m_hWnd, NULL, g_hInst, NULL);

	LVCOLUMN lvcColumn;
	lvcColumn.mask = LVCF_WIDTH;
	lvcColumn.cx = _RectWidth(rtRect);
	ListView_InsertColumn(m_hWnd, 0, &lvcColumn);
	ListView_SetExtendedListViewStyle(m_hWnd, LVS_EX_FULLROWSELECT | LVS_EX_GRADIENT | LVS_EX_NOHSCROLL);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 刷新
VOID CListView::Refresh(UINT uView)
{
	m_uView = uView;
	CMainWnd::CheckMenuRadio(IDM_View_Task, IDM_View_Storage, m_uView);

	m_uCount = 0;
	ListView_DeleteAllItems(m_hWnd);
	if (m_uView == IDM_View_Task)
	{
		EnumWindows(EnumWindowsProc, FALSE);
	}
	else
	{
		EnumProcess();
	}

	// 设置软键按钮
	TBBUTTONINFO biButton = {0};
	biButton.cbSize = sizeof(TBBUTTONINFO);
	biButton.dwMask = TBIF_STATE;
	biButton.fsState = m_uCount ? TBSTATE_ENABLED : TBSTATE_INDETERMINATE;
	SendMessage(CMainWnd::m_hMenuBar, TB_SETBUTTONINFO, IDM_Close,(LPARAM) &biButton);

	// 设置菜单项
	CMainWnd::EnableMenu(IDM_CloseOthers, m_uCount >= 2);
	CMainWnd::EnableMenu(IDM_CloseAll, m_uCount);
	CMainWnd::EnableMenu(IDM_Goto, m_uCount);
	CMainWnd::EnableMenu(IDM_Properties, m_uCount);

	ListView_SetItemState(m_hWnd, 0, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 转到
VOID CListView::Goto(UINT uIndex)
{
	if (uIndex < m_uCount)
	{
		if (m_uView == IDM_View_Task)
		{
			SetForegroundWindow((HWND) GetParam(uIndex));
		}
		else
		{
			View(uIndex);
		}
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 属性
VOID CListView::View(UINT uIndex)
{
	if (uIndex < m_uCount)
	{
		TCHAR tzText[1024];
		TCHAR tzPath[MAX_PATH];

		LPARAM lParam = GetParam(uIndex);
		if (m_uView == IDM_View_Task)
		{
			DWORD dwProcess;
			TCHAR tzClass[MAX_PATH];
			TCHAR tzCaption[MAX_PATH];

			HWND hWnd = (HWND) lParam;
			
			tzPath[0] = 0;
			GetClassName(hWnd, tzClass, MAX_PATH);			
			GetWindowText(hWnd, tzCaption, MAX_PATH);
			GetWindowThreadProcessId(hWnd, &dwProcess);			
			EnumProcess(dwProcess, tzPath);

			wsprintf(tzText, STR_TaskMsg,
				tzCaption,
				hWnd, 
				GetWindowLong(hWnd, GWL_STYLE),
				GetWindowLong(hWnd, GWL_EXSTYLE),
				tzClass,
				GetClassLong(hWnd, GCL_STYLE),
				dwProcess,
				tzPath);
		}
		else
		{
			ListView_GetItemText(m_hWnd, uIndex, 0, tzPath, MAX_PATH);
			wsprintf(tzText, STR_ProcessMsg, (DWORD) lParam, (uIndex <= 9) ? (tzPath + 3) : tzPath);
		}

		CMainWnd::MsgBox(tzText, IDM_Properties);
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 关闭
VOID CListView::Close()
{
	UINT uCur = ListView_GetNextItem(m_hWnd, -1, LVIS_SELECTED);
	if (uCur != LB_ERR)
	{
		if (m_uView == IDM_View_Task)
		{
			CloseTask(uCur);
		}
		else
		{
			CloseProcess(uCur);			
		}
		Refresh();
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 关闭全部
VOID CListView::CloseAll(BOOL bExcludeCur)
{
	UINT uCur = bExcludeCur ? ListView_GetNextItem(m_hWnd, -1, LVIS_SELECTED) : -1;
	for (UINT i = 0; i < m_uCount; i++)
	{
		if (i != uCur)
		{
			if (m_uView == IDM_View_Task)
			{
				CloseTask(i);
			}
			else
			{
				CloseProcess(i);			
			}
		}
	}

	Refresh();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 枚举窗口
BOOL CALLBACK CListView::EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
	if ((hWnd != CMainWnd::m_hWnd) && IsActiveWindow(hWnd))
	{
		TCHAR tzText[MAX_PATH];
		hWnd = GetOwnerWindow(hWnd);
		GetClassName(hWnd, tzText, MAX_PATH);
		if (CMainWnd::IsMenuChecked(IDM_Help_ShowSysApp) || IsUserTask(tzText))
		{
			if (GetWindowText(hWnd, tzText, MAX_PATH))
			{
				if (lParam)
				{
					SendMessage(hWnd, WM_CLOSE, 0, 0);
				}
				else
				{
					AddItem(tzText, (LPARAM) hWnd);
				}
			}
		}
	}

	return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 关闭任务
VOID CListView::CloseTask(UINT uIndex)
{
	HWND hWnd = (HWND) (HWND) GetParam(uIndex);
	if (IsWindow(hWnd))
	{
		SendMessage(hWnd, WM_CLOSE, 0, 0);
		if (IsWindow(hWnd))
		{
			DWORD dwProcess;
			GetWindowThreadProcessId(hWnd, &dwProcess);
			CloseProcess(dwProcess);
		}
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 枚举进程
VOID CListView::EnumProcess(DWORD dwProcess, PTSTR ptzPath)
{
	// 枚举进程
	HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

	if (hSnap != INVALID_HANDLE_VALUE)
	{
		PROCESSENTRY32 peProcess = {sizeof(PROCESSENTRY32)};
		for (BOOL bResult = Process32First(hSnap, &peProcess); bResult; bResult = Process32Next(hSnap, &peProcess))
		{
			if (ptzPath)
			{
				if (dwProcess == peProcess.th32ProcessID)
				{
					lstrcpy(ptzPath, peProcess.szExeFile);
					break;
				}
			}
			else if (CMainWnd::IsMenuChecked(IDM_Help_ShowSysApp) || IsUserProcess(peProcess.szExeFile))
			{
				AddItem(peProcess.szExeFile, (LPARAM) peProcess.th32ProcessID);
			}
		}

		// 关闭快照句柄
		CloseToolhelp32Snapshot(hSnap);
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 关闭进程
VOID CListView::CloseProcess(UINT uIndex)
{
	HANDLE hProcess = OpenProcess(0, FALSE, (DWORD) GetParam(uIndex));
	if (hProcess)
	{
		TerminateProcess(hProcess, 0);
		CloseHandle(hProcess);
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 添加列表项
INT CListView::AddItem(PTSTR ptzText, LPARAM lParam)
{
	LVITEM lviItem = {0};

	// 添加快捷索引号
	if (m_uCount <= 9)
	{
		TCHAR tzText[MAX_PATH];
		wsprintf(tzText, TEXT("%u. %s"), m_uCount, ptzText);
		lviItem.pszText = tzText;
	}
	else
	{
		lviItem.pszText = ptzText;
	}
	
	// 添加项目
	lviItem.iItem = m_uCount++;
	lviItem.mask = LVIF_TEXT | LVIF_PARAM;
	lviItem.lParam = lParam;
	return ListView_InsertItem(m_hWnd, &lviItem);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -