📄 filterwnd.c
字号:
ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_REASON_NET_LISTEN))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_REASON_NET_CONNECT))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_REASON_REG_SETVALUE))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_REASON_REG_QUERYVALUE))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_REASON_SYS_EXECUTE))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_REASON_SYS_KILLPROCESS))) ; ListView_SetImageList (g_hwndRules, hImageList, LVSIL_SMALL) ; // menus will be created by WM_LANGUAGECHANGED g_hmenuRules = NULL ; g_hmenuPrograms = NULL ; // // create columns in list view controls // ZeroMemory (&lvc, sizeof(lvc)) ; lvc.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM ; lvc.pszText = TEXT("") ; lvc.cx = 800 ; lvc.iSubItem = COL_PROGRAM ; ListView_InsertColumn (g_hwndPrograms, lvc.iSubItem, &lvc) ; lvc.cx = 80 ; lvc.iSubItem = COL_REASON ; ListView_InsertColumn (g_hwndRules, lvc.iSubItem, &lvc) ; lvc.cx = 200 ; lvc.iSubItem = COL_PARAM1 ; ListView_InsertColumn (g_hwndRules, lvc.iSubItem, &lvc) ; lvc.cx = 100 ; lvc.iSubItem = COL_PARAM2 ; ListView_InsertColumn (g_hwndRules, lvc.iSubItem, &lvc) ; lvc.cx = 180 ; lvc.iSubItem = COL_REACTION ; ListView_InsertColumn (g_hwndRules, lvc.iSubItem, &lvc) ; lvc.cx = 150 ; lvc.iSubItem = COL_VERBOSITY ; ListView_InsertColumn (g_hwndRules, lvc.iSubItem, &lvc) ; lvc.cx = 100 ; lvc.iSubItem = COL_OPTIONS ; ListView_InsertColumn (g_hwndRules, lvc.iSubItem, &lvc) ; g_hfltCurrent = FilterSet_GetDefaultFilter (SpySrv_GetFilterSet()) ; g_pCurRule = NULL ; // // Create imagelist for tool bars // hImageList = ImageList_Create (32,32,ILC_COLOR32|ILC_MASK,6,4) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_TOOL_ADD))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_TOOL_EDIT))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_TOOL_REMOVE))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_TOOL_UP))) ; ImageList_AddIcon (hImageList, LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_TOOL_DOWN))) ; // // Add buttons to program tool-bar // // set image list SendMessage (g_hwndProgTools, TB_SETIMAGELIST, 0, (LPARAM)hImageList) ; tbb.fsState = TBSTATE_ENABLED ; tbb.fsStyle = TBSTYLE_BUTTON ; tbb.iString = 0 ; tbb.iBitmap = 0 ; tbb.idCommand = IDM_PROGRAM_ADD ; SendMessage (g_hwndProgTools, TB_ADDBUTTONS, 1, (LPARAM)&tbb) ; tbb.iBitmap = 1 ; tbb.idCommand = IDM_PROGRAM_EDIT ; SendMessage (g_hwndProgTools, TB_ADDBUTTONS, 1, (LPARAM)&tbb) ; tbb.iBitmap = 2 ; tbb.idCommand = IDM_PROGRAM_REMOVE ; SendMessage (g_hwndProgTools, TB_ADDBUTTONS, 1, (LPARAM)&tbb) ; // // Add buttons to program tool-bar // // set image list SendMessage (g_hwndRulesTools, TB_SETIMAGELIST, 0, (LPARAM)hImageList) ; tbb.fsState = TBSTATE_ENABLED ; tbb.fsStyle = TBSTYLE_BUTTON ; tbb.iString = 0 ; tbb.iBitmap = 0 ; tbb.idCommand = IDM_RULE_ADD ; SendMessage (g_hwndRulesTools, TB_ADDBUTTONS, 1, (LPARAM)&tbb) ; tbb.iBitmap = 1 ; tbb.idCommand = IDM_RULE_EDIT ; SendMessage (g_hwndRulesTools, TB_ADDBUTTONS, 1, (LPARAM)&tbb) ; tbb.iBitmap = 2 ; tbb.idCommand = IDM_RULE_REMOVE ; SendMessage (g_hwndRulesTools, TB_ADDBUTTONS, 1, (LPARAM)&tbb) ; tbb.iBitmap = 3 ; tbb.idCommand = IDM_RULE_UP ; SendMessage (g_hwndRulesTools, TB_ADDBUTTONS, 1, (LPARAM)&tbb) ; tbb.iBitmap = 4 ; tbb.idCommand = IDM_RULE_DOWN ; SendMessage (g_hwndRulesTools, TB_ADDBUTTONS, 1, (LPARAM)&tbb) ; SendMessage (hwnd, WM_LANGUAGECHANGED, 0, 0) ; return 0 ; // case WM_CREATE: case WM_DESTROY: // destroy toolbar's image list hImageList = (HIMAGELIST) SendMessage (g_hwndProgTools, TB_GETIMAGELIST, 0, 0) ; ImageList_Destroy (hImageList) ; // destroy menus DestroyMenu (g_hmenuPrograms) ; DestroyMenu (g_hmenuRules) ; return 0 ; // case WM_DESTROY: case WM_SIZE: nWidth = LOWORD (lParam) ; nHeight = HIWORD (lParam) ; MoveWindow (g_hwndProgTools, nWidth-CX_TOOLBAR, 0, CX_TOOLBAR, nHeight/3-CY_RADIOBTN, TRUE) ; MoveWindow (g_hwndPrograms, 0, 0, nWidth-CX_TOOLBAR, nHeight/3-CY_RADIOBTN, TRUE) ; MoveWindow (g_hwndEnableHook, 0, nHeight/3-CY_RADIOBTN, nWidth, CY_RADIOBTN, TRUE) ; MoveWindow (g_hwndDisableHook, 0, nHeight/3, nWidth, CY_RADIOBTN, TRUE) ; MoveWindow (g_hwndRulesTools, nWidth-CX_TOOLBAR, nHeight/3+CY_RADIOBTN, CX_TOOLBAR, 2*nHeight/3-CY_RADIOBTN, TRUE) ; MoveWindow (g_hwndRules, 0, nHeight/3+CY_RADIOBTN, nWidth-CX_TOOLBAR, 2*nHeight/3-CY_RADIOBTN, TRUE) ; return 0 ; case WM_LANGUAGECHANGED: // // Set text of columns // ZeroMemory (&lvc, sizeof(lvc)) ; lvc.mask = LVCF_TEXT ; lvc.pszText = (LPTSTR) STR_DEF(_PROGRAM,TEXT("Program")) ; ListView_SetColumn (g_hwndPrograms, COL_PROGRAM, &lvc) ; lvc.pszText = (LPTSTR) STR_DEF (_REASON,TEXT("Function")) ; ListView_SetColumn (g_hwndRules, COL_REASON, &lvc) ; lvc.pszText = szBuffer ; wsprintf (szBuffer, TEXT("%s 1"), STR_DEF(_PARAM,TEXT("Param"))) ; ; ListView_SetColumn (g_hwndRules, COL_PARAM1, &lvc) ; lvc.pszText = szBuffer ; wsprintf (szBuffer, TEXT("%s 2"), STR_DEF(_PARAM,TEXT("Param"))) ; ; ListView_SetColumn (g_hwndRules, COL_PARAM2, &lvc) ; lvc.pszText = (LPTSTR) STR_DEF (_REACTION, TEXT("Reaction")) ; ListView_SetColumn (g_hwndRules, COL_REACTION, &lvc) ; lvc.pszText = (LPTSTR) STR_DEF (_VERBOSITY,TEXT("Verbosity")) ; ListView_SetColumn (g_hwndRules, COL_VERBOSITY, &lvc) ; lvc.pszText = (LPTSTR) STR_DEF (_OPTIONS,TEXT("Options")) ; ListView_SetColumn (g_hwndRules, COL_OPTIONS, &lvc) ; // create process menu DestroyMenu (g_hmenuPrograms) ; g_hmenuPrograms = CreatePopupMenu () ; AppendMenu (g_hmenuPrograms, MF_STRING|MF_GRAYED, 0, STR_DEF(_PROGRAM_MENU,TEXT("Program menu"))) ; AppendMenu (g_hmenuPrograms, MF_SEPARATOR, 0, NULL) ; AppendMenu (g_hmenuPrograms, MF_STRING, IDM_PROGRAM_ADD, STR_DEF(_ADD_PROGRAM,g_szAddProgram)) ; AppendMenu (g_hmenuPrograms, MF_STRING, IDM_PROGRAM_EDIT, STR_DEF(_EDIT_PROGRAM,g_szEditProgram)) ; AppendMenu (g_hmenuPrograms, MF_STRING, IDM_PROGRAM_REMOVE, STR_DEF(_REMOVE_PROGRAM,g_szRemoveProgram)) ; // create rule menu DestroyMenu (g_hmenuRules) ; g_hmenuRules = CreatePopupMenu () ; AppendMenu (g_hmenuRules, MF_STRING|MF_GRAYED, 0, STR_DEF(_FILTER_MENU, TEXT ("Filter menu"))) ; AppendMenu (g_hmenuRules, MF_SEPARATOR, 0, NULL) ; AppendMenu (g_hmenuRules, MF_STRING, IDM_RULE_ADD, STR_DEF(_ADD_RULE,g_szAddRule)) ; AppendMenu (g_hmenuRules, MF_STRING, IDM_RULE_EDIT, STR_DEF(_EDIT_RULE, g_szEditRule)) ; AppendMenu (g_hmenuRules, MF_STRING, IDM_RULE_REMOVE, STR_DEF(_REMOVE_RULE, g_szRemoveProgram)) ; AppendMenu (g_hmenuRules, MF_SEPARATOR, 0, NULL) ; AppendMenu (g_hmenuRules, MF_STRING, IDM_RULE_UP, STR_DEF(_MOVE_UP_RULE, g_szMoveUpRule)) ; AppendMenu (g_hmenuRules, MF_STRING, IDM_RULE_DOWN, STR_DEF(_MOVE_DOWN_RULE, g_szMoveDownRule)) ; // check boxes SetWindowText (g_hwndEnableHook, STR_DEF(_HOOK_THIS_PROGRAM, TEXT("Hook this program"))) ; SetWindowText (g_hwndDisableHook, STR_DEF(_DONT_HOOK_THIS_PROGRAM, TEXT("Don't hook this program"))) ; PostMessage (hwnd, WM_UPDATEFILTERS, 0, 0) ; return 0 ; case WM_UPDATEFILTERS : case WM_UPDATEPROGRAMLIST: { UINT i ; HFILTERSET hFilterSet ; LV_ITEM lvi ; DWORD dwThreadId ; HANDLE hThread ; ListView_DeleteAllItems (g_hwndPrograms) ; hFilterSet = SpySrv_GetFilterSet () ; for( i=0 ; i<FilterSet_GetFilterCount(hFilterSet) ; i++ ) { HFILTER hFilter = FilterSet_GetFilterByNum(hFilterSet,i) ; ZeroMemory (&lvi, sizeof(lvi)) ; lvi.mask = LVIF_TEXT|LVIF_STATE|LVIF_IMAGE|LVIF_PARAM ; lvi.lParam = (LPARAM)hFilter ; lvi.iItem = i ; lvi.iImage = -1 ; lvi.state = hFilter==g_hfltCurrent ? LVIS_SELECTED|LVIS_FOCUSED : 0 ; lvi.stateMask = LVIS_SELECTED|LVIS_FOCUSED ; lvi.pszText = (TCHAR*)Filter_GetProgram(hFilter) ; ListView_InsertItem (g_hwndPrograms, &lvi) ; if( hFilter==g_hfltCurrent ) ListView_EnsureVisible (g_hwndPrograms, i, FALSE) ; } hThread = CreateThread (NULL, 0, _FilterWnd_UpdateIconThread, g_hwndPrograms, 0, &dwThreadId) ; CloseHandle (hThread) ; SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } return 0 ; case WM_UPDATERULELIST: // ======== Update the "rule" list ======== { LVFINDINFO lvfi ; LVITEM lvi ; int iItem ; ListView_DeleteAllItems (g_hwndRules) ; if( ! g_hfltCurrent ) { EnableWindow (g_hwndEnableHook, FALSE) ; EnableWindow (g_hwndDisableHook, FALSE) ; EnableWindow (g_hwndRules, FALSE) ; // disable rule buttons SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_ADD, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_EDIT, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_REMOVE, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_UP, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_DOWN, MAKELONG(FALSE,0)) ; } else if( Filter_IsHookEnabled(g_hfltCurrent) ) { EnableWindow (g_hwndEnableHook, FALSE) ; EnableWindow (g_hwndDisableHook, FALSE) ; EnableWindow (g_hwndRules, TRUE) ; // enable rule buttons SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_ADD, MAKELONG(TRUE,0)) ; if( g_pCurRule ) { SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_EDIT, MAKELONG(TRUE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_REMOVE, MAKELONG(TRUE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_UP, MAKELONG(Filter_CanMoveUpRule(g_hfltCurrent,g_pCurRule),0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_DOWN, MAKELONG(Filter_CanMoveDownRule(g_hfltCurrent,g_pCurRule),0)) ; } else { SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_EDIT, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_REMOVE, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_UP, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_DOWN, MAKELONG(FALSE,0)) ; } SendMessage (g_hwndEnableHook, BM_SETCHECK, BST_CHECKED, 0) ; SendMessage (g_hwndDisableHook, BM_SETCHECK, BST_UNCHECKED, 0) ; Filter_EnumRules (g_hfltCurrent, _FilterWnd_EnumRulesCallback, g_hwndRules) ; } else { EnableWindow (g_hwndEnableHook, FALSE) ; EnableWindow (g_hwndDisableHook, FALSE) ; EnableWindow (g_hwndRules, FALSE) ; // disable rule buttons SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_ADD, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_EDIT, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_REMOVE, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_UP, MAKELONG(FALSE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_DOWN, MAKELONG(FALSE,0)) ; SendMessage (g_hwndEnableHook, BM_SETCHECK, BST_UNCHECKED, 0) ; SendMessage (g_hwndDisableHook, BM_SETCHECK, BST_CHECKED, 0) ; } // search selected item lvfi.flags = LVFI_PARAM ; lvfi.lParam = (LPARAM) g_pCurRule ; iItem = ListView_FindItem (g_hwndRules, -1, &lvfi) ; // set selection ZeroMemory (&lvi, sizeof(lvi)) ; // <- useful ? lvi.mask = LVIF_STATE ; lvi.iItem = iItem ; lvi.iSubItem = 0 ; lvi.stateMask = LVIS_SELECTED ; lvi.state = LVIS_SELECTED ; ListView_SetItem (g_hwndRules, &lvi) ; ListView_EnsureVisible (g_hwndRules, iItem, FALSE) ; } return 0 ; // ======== Update the "rule" list ======== case WM_COMMAND: switch( LOWORD(wParam)) { case IDM_PROGRAM_ADD: szBuffer[0] = 0 ; if( IDOK==DialogBoxParam(g_hInstance, MAKEINTRESOURCE(DLG_PROGPATH), hwnd, ProgPathDlg_DlgProc, (LPARAM)szBuffer) ) { hFilterSet = SpySrv_GetFilterSet () ; g_hfltCurrent = Filter_Create (szBuffer) ; SpySrv_LockFilterSet () ; FilterSet_AddFilter (hFilterSet, g_hfltCurrent) ; SpySrv_SendFilterSetToDriver () ; SpySrv_UnlockFilterSet () ; SendMessage (hwnd, WM_UPDATEPROGRAMLIST, 0, 0) ; SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } return 0 ; // case IDM_PROGRAM_ADD: case IDM_PROGRAM_EDIT: // ======== "Edit" command on program list ======== { // is command allowed ? if( !g_hfltCurrent || Filter_GetProtected(g_hfltCurrent) ) return 0 ; szBuffer[0] = 0 ; _tcscpy (szBuffer, Filter_GetProgram (g_hfltCurrent)) ; if( IDOK==DialogBoxParam(g_hInstance, MAKEINTRESOURCE(DLG_PROGPATH), hwnd, ProgPathDlg_DlgProc, (LPARAM)szBuffer) ) { SpySrv_LockFilterSet () ; Filter_SetProgram (g_hfltCurrent, szBuffer) ; SpySrv_SendFilterSetToDriver () ; SpySrv_UnlockFilterSet () ; _FilterWnd_UpdateProgramItem (g_hwndPrograms, g_hfltCurrent) ; } } return 0 ; // ======== "Edit" command on program list ======== case IDM_PROGRAM_REMOVE: // ======== "Remove" command on program list ======== { // is command allowed ? if( ! g_hfltCurrent || Filter_GetProtected(g_hfltCurrent) ) return 0 ; wsprintf (szBuffer, STR_DEF(_SURE_REMOVE_FILTER_FOR_S, TEXT("Are you sure you want to remove filter for \"%s\" ?")), Filter_GetProgram(g_hfltCurrent)) ; if( IDYES==MessageBox(hwnd,szBuffer,TEXT(APPLICATION_NAME), MB_ICONQUESTION|MB_YESNO) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -