Skip to content

Commit 7a30ca8

Browse files
committed
Added the ability to open the folder where the process executable file is located
1 parent 864b845 commit 7a30ca8

5 files changed

Lines changed: 37 additions & 2 deletions

File tree

resources/UI/open-folder.png

1.47 KB
Loading

src/constants/resources.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
UI_COPY: Final[str] = f"{APP_PATH}/resources/UI/copy.png"
2626
UI_SERVICE: Final[str] = f"{APP_PATH}/resources/UI/service.png"
2727
UI_PROCESS: Final[str] = f"{APP_PATH}/resources/UI/process.png"
28+
UI_OPEN_FOLDER: Final[str] = f"{APP_PATH}/resources/UI/open-folder.png"
2829

2930
UI_INFO_TOOLTIP: Final[str] = f"{APP_PATH}/resources/UI/info-tooltip.png"
3031
UI_WARN_TOOLTIP: Final[str] = f"{APP_PATH}/resources/UI/warn-tooltip.png"

src/constants/ui.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
CMENU_ADD_PROCESS_RULE_LABEL = " Add Process Rule"
2020
CMENU_ADD_SERVICE_RULE_LABEL = " Add Service Rule"
2121
CMENU_COPY_LABEL = " Copy Special"
22+
CMENU_OPEN_PROCESS_FOLDER = " Open process folder"
2223

2324

2425
class ActionEvents:

src/ui/widget/settings/tabs/processes/process_list.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@
77

88
from constants.log import LOG
99
from constants.resources import UI_ADD_PROCESS_RULE, UI_ADD_SERVICE_RULE, UI_COPY, UI_SERVICE, \
10-
UI_PROCESS
10+
UI_PROCESS, UI_OPEN_FOLDER
1111
from constants.threads import THREAD_PROCESS_LIST_ICONS
1212
from constants.ui import CMENU_ADD_PROCESS_RULE_LABEL, CMENU_ADD_SERVICE_RULE_LABEL, COLUMN_WIDTH_WITH_ICON, \
13-
CMENU_COPY_LABEL, ERROR_TRYING_UPDATE_TERMINATED_TKINTER_INSTANCE
13+
CMENU_COPY_LABEL, ERROR_TRYING_UPDATE_TERMINATED_TKINTER_INSTANCE, CMENU_OPEN_PROCESS_FOLDER
1414
from enums.filters import FilterByProcessType
1515
from enums.rules import RuleType
1616
from enums.selector import SelectorType
1717
from model.process import Process
1818
from ui.widget.common.treeview.pydantic import PydanticTreeviewLoader
1919
from ui.widget.common.treeview.sortable import SortableTreeview
20+
from util.files import explore
2021
from util.scheduler import TaskScheduler
2122
from util.ui import load_img, trim_cmenu_label
2223
from util.utils import get_icon_from_exe
@@ -62,6 +63,7 @@ def _setup_context_menu(self):
6263
CMENU_ADD_PROCESS_RULE_LABEL: load_img(UI_ADD_PROCESS_RULE),
6364
CMENU_ADD_SERVICE_RULE_LABEL: load_img(UI_ADD_SERVICE_RULE),
6465
CMENU_COPY_LABEL: load_img(UI_COPY),
66+
CMENU_OPEN_PROCESS_FOLDER: load_img(UI_OPEN_FOLDER),
6567
}
6668
self._context_menu = menu = Menu(self, tearoff=0)
6769
self._process_menu = Menu(menu, tearoff=0)
@@ -90,8 +92,24 @@ def _setup_context_menu(self):
9092
compound=LEFT
9193
)
9294

95+
menu.add_command(
96+
label=CMENU_OPEN_PROCESS_FOLDER,
97+
command=self._open_process_folder,
98+
image=icons[CMENU_OPEN_PROCESS_FOLDER],
99+
compound=LEFT
100+
)
101+
93102
self.bind("<Button-3>", self._show_context_menu, '+')
94103

104+
def _open_process_folder(self):
105+
selected_item = self.selection()
106+
107+
if not selected_item:
108+
return
109+
110+
row = self.as_model(selected_item[0])
111+
explore(row.bin_path)
112+
95113
def _show_context_menu(self, event):
96114
context_menu = self._context_menu
97115
process_list = self
@@ -105,6 +123,8 @@ def _show_context_menu(self, event):
105123

106124
self._context_menu.entryconfig(CMENU_ADD_PROCESS_RULE_LABEL, state=NORMAL if process_exists else DISABLED)
107125
self._context_menu.entryconfig(CMENU_ADD_SERVICE_RULE_LABEL, state=NORMAL if row.service else DISABLED)
126+
self._context_menu.entryconfig(CMENU_OPEN_PROCESS_FOLDER,
127+
state=NORMAL if os.path.isfile(row.bin_path or '') else DISABLED)
108128

109129
context_menu.post(event.x_root, event.y_root)
110130

src/util/files.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
import subprocess
23

34
from constants.files import LOG_FILE_NAME, CONFIG_FILE_NAME
45

@@ -9,3 +10,15 @@ def open_log_file():
910

1011
def open_config_file():
1112
os.startfile(CONFIG_FILE_NAME)
13+
14+
15+
FILEBROWSER_PATH = os.path.join(os.getenv('WINDIR'), 'explorer.exe')
16+
17+
18+
def explore(path):
19+
path = os.path.normpath(path)
20+
21+
if os.path.isdir(path):
22+
subprocess.run([FILEBROWSER_PATH, path])
23+
elif os.path.isfile(path):
24+
subprocess.run([FILEBROWSER_PATH, '/select,', path])

0 commit comments

Comments
 (0)