OLD | NEW |
1 /** | 1 /** |
2 * \file process.h | 2 * \file process.h |
3 */ | 3 */ |
4 | 4 |
5 #ifndef PROCESS_H | 5 #ifndef PROCESS_H |
6 #define PROCESS_H | 6 #define PROCESS_H |
7 | 7 |
8 #include "installer-lib.h" | 8 #include "installer-lib.h" |
9 #include "handle.h" | 9 #include "handle.h" |
10 | 10 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 for ( unsigned int j = 0 ; j < n_file_names ; ++ j ) | 85 for ( unsigned int j = 0 ; j < n_file_names ; ++ j ) |
86 { | 86 { |
87 insert( wstring_ci( file_name_list[ j ] ) ) ; | 87 insert( wstring_ci( file_name_list[ j ] ) ) ; |
88 } | 88 } |
89 } | 89 } |
90 } ; | 90 } ; |
91 | 91 |
92 //------------------------------------------------------- | 92 //------------------------------------------------------- |
93 //------------------------------------------------------- | 93 //------------------------------------------------------- |
94 /** | 94 /** |
95 * Filter by process name. Comparison is case-insensitive. With ABP module loade
d | 95 * Filter by process name. Comparison is case-insensitive. Windows Store app pro
cesses excluded |
96 */ | 96 */ |
97 class process_by_any_exe_with_any_module | 97 class process_by_any_exe_not_immersive |
98 : public std::binary_function< PROCESSENTRY32W, file_name_set, bool > | 98 : public std::unary_function<PROCESSENTRY32W, bool> |
99 { | 99 { |
100 /** | 100 /** |
101 * Set of file names from which to match candidate process names. | 101 * Set of file names from which to match candidate process names. |
102 * | 102 * |
103 * This is a reference to, not a copy of, the set. | 103 * This is a reference to, not a copy of, the set. |
104 * The lifetime of this object must be subordinate to that of its referent. | 104 * The lifetime of this object must be subordinate to that of its referent. |
105 * The set used to instantiate this class is a member of Process_Closer, | 105 * The set used to instantiate this class is a member of Process_Closer, |
106 * and so also is this class. | 106 * and so also is this class. |
107 * Hence the lifetimes are coterminous, and the reference is not problematic. | 107 * Hence the lifetimes are coterminous, and the reference is not problematic. |
108 */ | 108 */ |
109 const file_name_set & processNames ; | 109 const file_name_set & processNames; |
110 const file_name_set & moduleNames; | |
111 public: | 110 public: |
112 bool operator()( const PROCESSENTRY32W & ) ; | 111 bool operator()( const PROCESSENTRY32W & ); |
113 process_by_any_exe_with_any_module( const file_name_set & names, const file_na
me_set & moduleNames ) | 112 process_by_any_exe_not_immersive(const file_name_set & names) : processNames(
names ) {} |
114 : processNames( names ), moduleNames( moduleNames ) | |
115 {} | |
116 } ; | 113 } ; |
117 | 114 |
118 | 115 |
119 //------------------------------------------------------- | 116 //------------------------------------------------------- |
120 // Process utility functions. | 117 // Process utility functions. |
121 //------------------------------------------------------- | 118 //------------------------------------------------------- |
122 /** | 119 /** |
123 * A promiscuous filter admits everything. | 120 * A promiscuous filter admits everything. |
124 */ | 121 */ |
125 struct every_process | 122 struct every_process |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 std::set< DWORD > pid_set ; | 598 std::set< DWORD > pid_set ; |
602 | 599 |
603 /** | 600 /** |
604 * Set of executable names by which to filter. | 601 * Set of executable names by which to filter. |
605 * | 602 * |
606 * The argument of the filter constructor is a set by reference. | 603 * The argument of the filter constructor is a set by reference. |
607 * Since it does not make a copy for itself, we define it as a class member to
provide its allocation. | 604 * Since it does not make a copy for itself, we define it as a class member to
provide its allocation. |
608 */ | 605 */ |
609 file_name_set process_names ; | 606 file_name_set process_names ; |
610 | 607 |
611 /** | 608 process_by_any_exe_not_immersive filter ; |
612 * Set of module (DLL) names by which to filter. | |
613 */ | |
614 file_name_set module_names ; | |
615 | |
616 process_by_any_exe_with_any_module filter ; | |
617 | 609 |
618 /** | 610 /** |
619 * Copy function object copies just the process ID. | 611 * Copy function object copies just the process ID. |
620 */ | 612 */ |
621 copy_PID copy ; | 613 copy_PID copy ; |
622 | 614 |
623 /** | 615 /** |
624 * Snapshot of running processes. | 616 * Snapshot of running processes. |
625 */ | 617 */ |
626 Process_Snapshot & snapshot ; | 618 Process_Snapshot & snapshot ; |
(...skipping 30 matching lines...) Expand all Loading... |
657 if ( ! b ) | 649 if ( ! b ) |
658 { | 650 { |
659 // Assert the process that created the window is not in our pid_set | 651 // Assert the process that created the window is not in our pid_set |
660 return true ; | 652 return true ; |
661 } | 653 } |
662 return f( window ) ; | 654 return f( window ) ; |
663 } | 655 } |
664 } ; | 656 } ; |
665 | 657 |
666 public: | 658 public: |
667 template <size_t n_file_names, size_t n_module_names> | 659 template <size_t n_file_names> |
668 Process_Closer(Process_Snapshot & snapshot, const wchar_t* (&file_name_list)[n
_file_names], const wchar_t* (&module_name_list)[n_module_names]) | 660 Process_Closer(Process_Snapshot & snapshot, const wchar_t * (&file_name_list)[
n_file_names]) |
669 : snapshot(snapshot), process_names(file_name_list), module_names(module_nam
e_list), filter(process_names, module_names) | 661 : snapshot(snapshot), process_names(file_name_list), filter(process_names) |
670 { | 662 { |
671 update() ; | 663 update() ; |
672 } | 664 } |
673 template <size_t n_file_names> | |
674 Process_Closer(Process_Snapshot & snapshot, const wchar_t * (&file_name_list)[
n_file_names]) | |
675 : snapshot(snapshot), process_names(file_name_list), module_names(), filter(
process_names, module_names) | |
676 { | |
677 update() ; | |
678 } | |
679 | 665 |
680 /** | 666 /** |
681 * Refresh our state to match the snapshot state. | 667 * Refresh our state to match the snapshot state. |
682 */ | 668 */ |
683 void refresh() | 669 void refresh() |
684 { | 670 { |
685 pid_set.clear() ; | 671 pid_set.clear() ; |
686 update() ; | 672 update() ; |
687 } | 673 } |
688 | 674 |
689 bool is_running() { return ! pid_set.empty() ; } ; | 675 bool is_running() { return ! pid_set.empty() ; } ; |
690 | 676 |
691 bool contains( DWORD pid ) const { return pid_set.find( pid ) != pid_set.end()
; } ; | 677 bool contains( DWORD pid ) const { return pid_set.find( pid ) != pid_set.end()
; } ; |
692 | 678 |
693 template< class F > | 679 template< class F > |
694 bool iterate_our_windows( F f ) | 680 bool iterate_our_windows( F f ) |
695 { | 681 { |
696 only_our_processes< F > g( * this, f ) ; | 682 only_our_processes< F > g( * this, f ) ; |
697 return enumerate_windows( g ) ; | 683 return enumerate_windows( g ) ; |
698 } | 684 } |
699 | 685 |
700 /* | 686 /* |
701 * Shut down every process in the pid_set. | 687 * Shut down every process in the pid_set. |
702 */ | 688 */ |
703 bool shut_down() ; | 689 bool shut_down() ; |
704 | 690 |
705 } ; | 691 } ; |
706 | 692 |
707 #endif | 693 #endif |
OLD | NEW |