📄 filterwnd.c
字号:
{ _FilterWnd_RemoveProgramItem (g_hwndPrograms, g_hfltCurrent) ; hFilterSet = SpySrv_GetFilterSet () ; SpySrv_LockFilterSet () ; FilterSet_Remove (hFilterSet, g_hfltCurrent) ; SpySrv_SendFilterSetToDriver () ; SpySrv_UnlockFilterSet () ; Filter_Destroy (g_hfltCurrent) ; g_hfltCurrent = NULL ; SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } } return 0 ; // ======== "Remove" command on program list ======== case IDM_RULE_ADD: // ======== "Add" command on rule list ======== { FILTRULE * pRule ; // is the filter selected ? if( ! g_hfltCurrent ) return 0 ; // alloc new rule pRule = (FILTRULE*) calloc (1, sizeof(FILTRULE)) ; // change rule if( IDOK==RuleDlg_DialogBox (g_hInstance, hwnd, Filter_GetProgram(g_hfltCurrent), pRule, TRUE) ) { SpySrv_LockFilterSet () ; Filter_AddRule (g_hfltCurrent, pRule) ; SpySrv_SendFilterSetToDriver () ; SpySrv_UnlockFilterSet () ; g_pCurRule = pRule ; SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } else free (pRule) ; } return 0 ; // ======== "Add" command on rule list ======== case IDM_RULE_EDIT: // ======== 'Edit rule' command on 'rules' list-view ======== { if( !g_hfltCurrent || !g_pCurRule ) return 0 ; if( IDOK==RuleDlg_DialogBox (g_hInstance, hwnd, Filter_GetProgram(g_hfltCurrent), g_pCurRule, FALSE) ) { SpySrv_LockFilterSet () ; SpySrv_SendFilterSetToDriver () ; SpySrv_UnlockFilterSet () ; _FilterWnd_UpdateRuleItem (g_hwndRules, g_pCurRule) ; } } return 0 ; // ======== 'Edit rule' command on 'rules' list-view ======== case IDM_RULE_REMOVE: // ======== 'Remove rule' command on 'rules' list-view ======== { LPCTSTR szMessage = STR_DEF(_SURE_REMOVE_RULE, TEXT("Are you sure you want to remove this rule ?")) ; if( !g_hfltCurrent || !g_pCurRule ) return 0 ; if( IDYES==MessageBox(hwnd,szMessage,TEXT(APPLICATION_NAME), MB_ICONQUESTION|MB_YESNO) ) { _FilterWnd_RemoveRuleItem (g_hwndRules, g_pCurRule) ; SpySrv_LockFilterSet () ; Filter_DeleteRule (g_hfltCurrent, g_pCurRule) ; SpySrv_SendFilterSetToDriver () ; SpySrv_UnlockFilterSet () ; g_pCurRule = NULL ; } } return 0 ; // ======== 'Remove rule' command on 'rules' list-view ======== case IDM_RULE_UP: // ======== 'Move rule up' command on 'rules' list-view ======== { if( g_hfltCurrent && g_pCurRule ) { SpySrv_LockFilterSet () ; Filter_MoveRuleUp (g_hfltCurrent, g_pCurRule) ; SpySrv_SendFilterSetToDriver () ; SpySrv_UnlockFilterSet () ; SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } } return 0 ; // ======== 'Move rule up' command on 'rules' list-view ======== case IDM_RULE_DOWN: // ======== 'Move rule down' command on 'rules' list-view ======== { if( g_hfltCurrent && g_pCurRule ) { SpySrv_LockFilterSet () ; Filter_MoveRuleDown (g_hfltCurrent, g_pCurRule) ; SpySrv_SendFilterSetToDriver () ; SpySrv_UnlockFilterSet () ; SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } } return 0 ; // ======== 'Move rule down' command on 'rules' list-view ========/* case IDC_ENABLE_HOOK: if( ! g_hfltCurrent ) return 0 ; if( HIWORD(wParam)==BN_CLICKED ) { Filter_EnableHook (g_hfltCurrent, TRUE) ; SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } return 0 ; // case IDC_ENABLE_HOOK: case IDC_DISABLE_HOOK: if( ! g_hfltCurrent ) return 0 ; if( HIWORD(wParam)==BN_CLICKED ) { Filter_EnableHook (g_hfltCurrent, FALSE) ; SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } return 0 ; // case IDC_DISABLE_HOOK:*/ } // switch( LOWORD(wParam) ) break ; // case WM_COMMAND: case WM_NOTIFY: pnm.header = (NMHDR*)lParam ; switch( pnm.header->idFrom ) { case IDC_PROGRAMLIST: switch( pnm.header->code ) { case LVN_ITEMCHANGED: if( pnm.listview->uNewState & LVIS_SELECTED ) { hFilterSet = SpySrv_GetFilterSet () ; g_hfltCurrent = FilterSet_GetFilterByNum (hFilterSet, pnm.listview->iItem) ; g_pCurRule = NULL ; if( pnm.listview->iItem>0 && ListView_GetSelectedCount(g_hwndPrograms)>0 ) { SendMessage (g_hwndProgTools, TB_ENABLEBUTTON, IDM_PROGRAM_EDIT, MAKELONG(TRUE,0)) ; SendMessage (g_hwndProgTools, TB_ENABLEBUTTON, IDM_PROGRAM_REMOVE, MAKELONG(TRUE,0)) ; } else { SendMessage (g_hwndProgTools, TB_ENABLEBUTTON, IDM_PROGRAM_EDIT, MAKELONG(FALSE,0)) ; SendMessage (g_hwndProgTools, TB_ENABLEBUTTON, IDM_PROGRAM_REMOVE, MAKELONG(FALSE,0)) ; } SendMessage (hwnd, WM_UPDATERULELIST, 0, 0) ; } return 0 ; // case LVN_ITEMCHANGED: case LVN_ITEMACTIVATE: // simulate a click on the menu if( pnm.listview->iItem>0 ) SendMessage (hwnd, WM_COMMAND, IDM_PROGRAM_EDIT, 0) ; return 0 ; // case NM_DBLCLICK: case NM_RCLICK: // ======== Right click on "programs" list-view ======== { BOOL bEnable ; POINT pt ; // enable/disable "edit" and "remove" menu item bEnable = g_hfltCurrent!=NULL && !Filter_GetProtected(g_hfltCurrent) ; EnableMenuItem (g_hmenuPrograms, IDM_PROGRAM_EDIT, MF_BYCOMMAND|(bEnable?MF_ENABLED:MF_GRAYED)) ; EnableMenuItem (g_hmenuPrograms, IDM_PROGRAM_REMOVE, MF_BYCOMMAND|(bEnable?MF_ENABLED:MF_GRAYED)) ; // get mouse position GetCursorPos (&pt) ; // display menu TrackPopupMenu (g_hmenuPrograms, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL) ; } return 0 ; // ======== Right click on "programs" list-view ======== case LVN_KEYDOWN: switch( pnm.keydown->wVKey ) { case VK_DELETE: PostMessage (hwnd, WM_COMMAND, IDM_PROGRAM_REMOVE, 0) ; break ; } return 0 ; } // switch( pnmh->code ) break ; // case IDC_PROGRAMLIST: case IDC_RULELIST: switch( pnm.header->code ) { case LVN_ITEMACTIVATE: // simulate a click on the menu SendMessage (hwnd, WM_COMMAND, IDM_RULE_EDIT, 0) ; return 0 ; // case LVN_ITEMACTIVATE: case LVN_ITEMCHANGED: if( pnm.listview->uNewState & LVIS_SELECTED ) { ASSERT (g_hfltCurrent) ; ASSERT (pnm.listview->lParam!=0) ; g_pCurRule = (FILTRULE*)pnm.listview->lParam ; if( Filter_CanMoveUpRule(g_hfltCurrent,g_pCurRule) ) SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_UP, MAKELONG(TRUE,0)) ; else SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_UP, MAKELONG(FALSE,0)) ; if( Filter_CanMoveDownRule(g_hfltCurrent,g_pCurRule) ) SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_DOWN, MAKELONG(TRUE,0)) ; else SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_DOWN, MAKELONG(FALSE,0)) ; } if( ListView_GetSelectedCount(g_hwndRules)>0 ) { SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_EDIT, MAKELONG(TRUE,0)) ; SendMessage (g_hwndRulesTools, TB_ENABLEBUTTON, IDM_RULE_REMOVE, MAKELONG(TRUE,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)) ; } return 0 ; // case LVN_ITEMCHANGED: case NM_RCLICK: if( ! g_hfltCurrent ) return 0 ; GetCursorPos (&point) ; if( ListView_GetSelectedCount(g_hwndRules)>0 ) { EnableMenuItem (g_hmenuRules, IDM_RULE_EDIT, MF_BYCOMMAND|MF_ENABLED) ; EnableMenuItem (g_hmenuRules, IDM_RULE_REMOVE, MF_BYCOMMAND|MF_ENABLED) ; } else { EnableMenuItem (g_hmenuRules, IDM_RULE_EDIT, MF_BYCOMMAND|MF_GRAYED) ; EnableMenuItem (g_hmenuRules, IDM_RULE_REMOVE, MF_BYCOMMAND|MF_GRAYED) ; } TrackPopupMenu (g_hmenuRules, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL) ; return 0 ; // case NM_RCLICK: case LVN_KEYDOWN: switch( pnm.keydown->wVKey ) { case VK_DELETE: PostMessage (hwnd, WM_COMMAND, IDM_RULE_REMOVE, 0) ; break ; } return 0 ; } break ; // case IDC_RULELIST: case IDM_PROGRAM_ADD: if( pnm.header->code == TTN_GETDISPINFO ) pnm.getdispinfo->lpszText = (LPTSTR) STR_DEF (_ADD_PROGRAM,g_szAddProgram) ; return 0 ; // IDM_PROGRAM_ADD: case IDM_PROGRAM_EDIT: if( pnm.header->code == TTN_GETDISPINFO ) pnm.getdispinfo->lpszText = (LPTSTR) STR_DEF (_EDIT_PROGRAM,g_szEditProgram) ; return 0 ; // IDM_PROGRAM_EDIT: case IDM_PROGRAM_REMOVE: if( pnm.header->code == TTN_GETDISPINFO ) pnm.getdispinfo->lpszText = (LPTSTR) STR_DEF (_REMOVE_PROGRAM,g_szRemoveProgram) ; return 0 ; // IDM_PROGRAM_ADD: case IDM_RULE_ADD: if( pnm.header->code == TTN_GETDISPINFO ) pnm.getdispinfo->lpszText = (LPTSTR) STR_DEF (_ADD_RULE,g_szAddRule) ; return 0 ; // IDM_RULE_ADD: case IDM_RULE_EDIT: if( pnm.header->code == TTN_GETDISPINFO ) pnm.getdispinfo->lpszText = (LPTSTR) STR_DEF (_EDIT_RULE,g_szEditRule) ; return 0 ; // IDM_RULE_EDIT: case IDM_RULE_REMOVE: if( pnm.header->code == TTN_GETDISPINFO ) pnm.getdispinfo->lpszText = (LPTSTR) STR_DEF (_REMOVE_RULE,g_szRemoveRule) ; return 0 ; // IDM_RULE_ADD: case IDM_RULE_UP: if( pnm.header->code == TTN_GETDISPINFO ) pnm.getdispinfo->lpszText = (LPTSTR) STR_DEF (_MOVE_UP_RULE,g_szMoveUpRule) ; return 0 ; // IDM_RULE_UP: case IDM_RULE_DOWN: if( pnm.header->code == TTN_GETDISPINFO ) pnm.getdispinfo->lpszText = (LPTSTR) STR_DEF (_MOVE_DOWN_RULE,g_szMoveDownRule) ; return 0 ; // IDM_RULE_DOWN: } // switch( pnm.header->idFrom ) return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ;}/******************************************************************//* Internal function : WndProc *//******************************************************************/DWORD WINAPI _FilterWnd_UpdateIconThread (VOID * pContext) { HWND hwndList = (HWND)pContext ; HIMAGELIST hImageList = ListView_GetImageList (hwndList, LVSIL_SMALL) ; TCHAR szBuffer[MAX_PATH] ; int i ; ImageList_RemoveAll (hImageList) ; for( i=0 ; i<ListView_GetItemCount(hwndList) ; i++ ) { LVITEM lvi ; ZeroMemory (&lvi, sizeof(lvi)) ; lvi.mask = LVIF_TEXT| LVIF_STATE ; lvi.iItem = i ; lvi.iSubItem = COL_PROGRAM ; lvi.pszText = szBuffer ; lvi.cchTextMax = MAX_PATH ; if( ListView_GetItem (hwndList, &lvi) ) { HICON hIcon ; if( i==0 ) // default filter { hIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_DEFAULT)) ; } else { SHFILEINFO sfi ; if( SHGetFileInfo (szBuffer, 0, &sfi, sizeof(sfi), SHGFI_ICON|SHGFI_SMALLICON) ) { hIcon = sfi.hIcon ; } else { hIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_UNKNOWN)) ; } } ImageList_AddIcon (hImageList, hIcon) ; DestroyIcon (hIcon) ; lvi.mask = LVIF_IMAGE; lvi.iImage = i ; ListView_SetItem (hwndList, &lvi) ; } } return 0 ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -