双击关闭进程 窗口居中 WM_NOTIFY

来源:互联网 发布:相册编辑软件 编辑:程序博客网 时间:2024/06/18 16:26
#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+1BOOL __stdcall DlgProc( HWND, UINT, WPARAM, LPARAM );void UpdateProcess( HWND hWndList );int __stdcall  WinMain(HINSTANCE hInstance,      // handle to current instanceHINSTANCE hPrevInstance,  // handle to previous instanceLPSTR lpCmdLine,          // command lineint 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.comcase 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/


原创粉丝点击