双击关闭进程 窗口居中 WM_NOTIFY

#include <windows.h>
#include <commctrl.h>
#include <tlhelp32.h>

#include <string.h>

#include "resource.h"

#pragma comment( lib, "comctl32.lib" )

#define IDC_STATUS WM_USER+1

BOOL __stdcall DlgProc( HWND, UINT, WPARAM, LPARAM );
void UpdateProcess( HWND hWndList );

int __stdcall  WinMain(
HINSTANCE hInstance,      // handle to current instance
HINSTANCE hPrevInstance,  // handle to previous instance
LPSTR lpCmdLine,          // command line
int nCmdShow              // show state
){

	::InitCommonControls();
	::DialogBoxParam(
		hInstance,
		(LPCTSTR)IDD_DIALOG1,
		NULL,
		DlgProc,
		NULL
		);


	return 0;
}


BOOL __stdcall DlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch( uMsg )
	{
	case WM_INITDIALOG:
		{
			//初始化控件文本
			::SendMessage( ::GetDlgItem(hDlg, IDC_INFORMATION ), WM_SETTEXT, 0, (LPARAM)"请双击您要关闭的进程!" );
			::SendMessage( ::GetDlgItem(hDlg, ID_UPDATE ), WM_SETTEXT, 0, (long)"刷新" );
			::SendMessage( ::GetDlgItem(hDlg, IDCANCEL ), WM_SETTEXT, 0, (long)"退出" );
			
			//窗口居中
			RECT rc; 
			int cxpoint, cypoint;
			::GetWindowRect( hDlg, &rc );
			cxpoint = rc.right - rc.left;
			cypoint = rc.bottom - rc.top;
			::SetWindowPos(hDlg, NULL, GetSystemMetrics(SM_CXSCREEN)/2-cxpoint/2, GetSystemMetrics(SM_CYSCREEN)/2-cypoint/2, 0, 0, SWP_NOSIZE );

			
			HWND hWndList = ::GetDlgItem( hDlg, IDC_LIST1 );
			::SendMessage( hWndList, LVM_SETEXTENDEDLISTVIEWSTYLE,
				0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES );
			LVCOLUMN column;

			column.mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;
			column.cx = 180;
			column.fmt = LVCFMT_CENTER;
			column.pszText = "进程名称";

			::SendMessage( hWndList, LVM_INSERTCOLUMN, 0, (LPARAM)&column );
			column.pszText = "PID";
			column.cx = 50;
			::SendMessage( hWndList, LVM_INSERTCOLUMN, 1, (LPARAM)&column );
			
			HWND hWndStatus = ::CreateStatusWindow(WS_CHILD|WS_VISIBLE|SBS_SIZEGRIP, 
				NULL, hDlg, IDC_STATUS );
			::SendMessage( hWndStatus, SB_SETBKCOLOR, 0, RGB(0XA6, 0XCA, 0XF0) );
			int pInt[] = {152, -1};
			::SendMessage( hWndStatus, SB_SETTEXT, 0, (long)"准备就绪");
			::SendMessage( hWndStatus, SB_SETTEXT, 1, (long)"windows程序进阶之路!" );

			UpdateProcess( hWndList );

		}

		break;

	case WM_COMMAND:
		switch( LOWORD(wParam) )
		{
		case IDOK:
			::EndDialog( hDlg, IDOK );
			break;
		case IDCANCEL:
			::EndDialog( hDlg, IDCANCEL );
			break;
		case ID_UPDATE:
			UpdateProcess( ::GetDlgItem( hDlg, IDC_LIST1 ) );
			break;
		}
//http://www.pythonschool.com
	case WM_NOTIFY:
		{
			if( wParam == IDC_LIST1 )
			{
				NMHDR *pHeader = (LPNMHDR)lParam;
				HWND hWndList = pHeader->hwndFrom;

				if( pHeader->code == NM_DBLCLK )
				{
					NMLISTVIEW* pNMListView = (NMLISTVIEW*)pHeader;
					int nIndex = pNMListView->iItem;

					char szID[56];
					LVITEM lvi;
					memset( &lvi, 0,  sizeof(LVITEM) );
					lvi.iSubItem = 1;
					lvi.cchTextMax = 56;
					lvi.pszText = szID;
					::SendMessage( hWndList, LVM_GETITEMTEXT, (WPARAM)nIndex, (long)&lvi );

					if( ::MessageBox( hDlg, "是否终止进程?", "ComctlDlg", MB_OKCANCEL|MB_DEFBUTTON2 ) == IDCANCEL )
						return 0;
					HANDLE hProcess = ::OpenProcess( PROCESS_TERMINATE, FALSE, atoi( szID) );
					if( hProcess != NULL )
					{
						HWND hWndStatus = ::GetDlgItem( hDlg, IDC_STATUS );
						if( ::TerminateProcess( hProcess, 0) )
						{
							::SendMessage( hWndStatus, SB_SETTEXT, 0, (long)"终止进程成功" );
							UpdateProcess( hWndList );
						}
						else
						{
							::SendMessage( hWndStatus, SB_SETTEXT, 0, (long)"终止进程失败" );
						}
					}

					
				}

			}
		}
		break;


	}

	return FALSE;
}



void UpdateProcess( HWND hWndList )
{
	::SendMessage( hWndList, LVM_DELETEALLITEMS, 0, 0 );

	int nItem = 0;

	PROCESSENTRY32 pe32 = { sizeof( PROCESSENTRY32 ) };
	HANDLE hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
	if( hProcessSnap == INVALID_HANDLE_VALUE )
	{
		return;
	}

	if( Process32First( hProcessSnap, &pe32 ) )
	{
		do
		{
			char szID[56];
			wsprintf( szID, "%u", pe32.th32ProcessID );

			if(  !strcmp( szID, "0" ) )
			{
				//MessageBox(hWndList, "_DEBUG1", szID, MB_OK);
				continue;
			}

			LVITEM item = {0};
			item.iItem = nItem;;

			item.mask = LVIF_TEXT;
			item.pszText = (LPTSTR)pe32.szExeFile;

			::SendMessage( hWndList, LVM_INSERTITEM, 0, (long)&item );

			LVITEM lvi;
			lvi.iSubItem = 1;
			lvi.pszText = (LPTSTR)szID;
			::SendMessage( hWndList, LVM_SETITEMTEXT, nItem, (long)&lvi );

			nItem++;

		}while( Process32Next( hProcessSnap, &pe32 ) );

	}
	::CloseHandle( hProcessSnap );	
}

http://www.pythonschool.com/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘华世(Moments)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值