10
10
11
11
namespace Flow . Launcher . Plugin . ProcessKiller
12
12
{
13
- public class Main : IPlugin , IPluginI18n
13
+ public class Main : IPlugin , IPluginI18n , IContextMenu
14
14
{
15
15
private readonly HashSet < string > _systemProcessList = new HashSet < string > ( ) {
16
16
"conhost" ,
@@ -58,6 +58,34 @@ public string GetTranslatedPluginDescription()
58
58
return _context . API . GetTranslation ( "flowlauncher_plugin_processkiller_plugin_description" ) ;
59
59
}
60
60
61
+ public List < Result > LoadContextMenus ( Result result )
62
+ {
63
+ var menuOptions = new List < Result > ( ) ;
64
+ var processPath = result . SubTitle ;
65
+
66
+ // get all non-system processes whose file path matches that of the given result (processPath)
67
+ var similarProcesses = Process . GetProcesses ( )
68
+ . Where ( p => ! IsSystemProcess ( p ) && GetProcessFilename ( p ) == processPath ) ;
69
+
70
+ menuOptions . Add ( new Result
71
+ {
72
+ Title = _context . API . GetTranslation ( "flowlauncher_plugin_processkiller_kill_instances" ) ,
73
+ SubTitle = processPath ,
74
+ Action = _ =>
75
+ {
76
+ foreach ( var p in similarProcesses )
77
+ {
78
+ KillProcess ( p ) ;
79
+ }
80
+
81
+ return true ;
82
+ } ,
83
+ IcoPath = "Images/app.png"
84
+ } ) ;
85
+
86
+ return menuOptions ;
87
+ }
88
+
61
89
private List < Result > CreateResultsFromProcesses ( List < ProcessResult > processlist , string termToSearch )
62
90
{
63
91
var results = new List < Result > ( ) ;
@@ -105,29 +133,30 @@ private List<Result> CreateResultsFromProcesses(List<ProcessResult> processlist,
105
133
}
106
134
107
135
return results ;
136
+ }
108
137
109
- void KillProcess ( Process p )
138
+ private void KillProcess ( Process p )
139
+ {
140
+ try
110
141
{
111
- try
142
+ if ( ! p . HasExited )
112
143
{
113
- if ( ! p . HasExited )
114
- {
115
- p . Kill ( ) ;
116
- }
117
- }
118
- catch ( Exception e )
119
- {
120
- Log . Exception ( $ "|ProcessKiller.CreateResultsFromProcesses|Failed to kill process { p . ProcessName } ", e ) ;
144
+ p . Kill ( ) ;
121
145
}
122
146
}
147
+ catch ( Exception e )
148
+ {
149
+ Log . Exception ( $ "|ProcessKiller.CreateResultsFromProcesses|Failed to kill process { p . ProcessName } ", e ) ;
150
+ }
123
151
}
152
+
124
153
private List < ProcessResult > GetProcesslist ( string termToSearch )
125
154
{
126
155
var processlist = new List < ProcessResult > ( ) ;
127
156
128
157
foreach ( var p in Process . GetProcesses ( ) )
129
158
{
130
- if ( FilterSystemProcesses ( p ) ) continue ;
159
+ if ( IsSystemProcess ( p ) ) continue ;
131
160
132
161
if ( string . IsNullOrWhiteSpace ( termToSearch ) )
133
162
{
@@ -145,14 +174,10 @@ private List<ProcessResult> GetProcesslist(string termToSearch)
145
174
}
146
175
147
176
return processlist ;
148
-
149
- bool FilterSystemProcesses ( Process p )
150
- {
151
- var name = p . ProcessName . ToLower ( ) ;
152
- return _systemProcessList . Contains ( name ) ;
153
- }
154
177
}
155
178
179
+ private bool IsSystemProcess ( Process p ) => _systemProcessList . Contains ( p . ProcessName . ToLower ( ) ) ;
180
+
156
181
internal class ProcessResult
157
182
{
158
183
public ProcessResult ( Process process , int score )
0 commit comments