Skip to content

Commit 878bf51

Browse files
committed
fixed path issues when executing with exe + renaming
1 parent 59e3fc6 commit 878bf51

File tree

11 files changed

+85
-44
lines changed

11 files changed

+85
-44
lines changed

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"python.analysis.typeCheckingMode": "off"
3+
}
File renamed without changes.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import os
2+
import shutil
3+
4+
import SimpleMonitorControlTrayModule.directoryHandler as dH
5+
6+
startup_folder = os.path.expanduser(
7+
"~\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"
8+
)
9+
shortcut_filename = dH.APP_NAME + ".lnk"
10+
shortcut_path = os.path.join(startup_folder, shortcut_filename)
11+
12+
13+
def addShortcutToStartupFolder():
14+
shutil.copy2(dH.getDirectory(), shortcut_path)
15+
16+
17+
def removeShortcutFromStartupFolder():
18+
if is_shortcut_in_startup():
19+
os.remove(shortcut_path)
20+
21+
22+
def is_shortcut_in_startup():
23+
return os.path.exists(shortcut_path)

SimpleMonitorControlTray/configHandler.py renamed to SimpleMonitorControlTrayModule/configHandler.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import configparser
22
import os
33

4-
import SimpleMonitorControlTray.monitorHandler as mH
5-
import SimpleMonitorControlTray.notificationHandler as nH
6-
import SimpleMonitorControlTray.trayHandler as tH
4+
import SimpleMonitorControlTrayModule.directoryHandler as dH
5+
import SimpleMonitorControlTrayModule.monitorHandler as mH
6+
import SimpleMonitorControlTrayModule.notificationHandler as nH
7+
import SimpleMonitorControlTrayModule.trayHandler as tH
78

8-
currentPath = os.getcwd()
99
config_file_path = "config.ini"
1010
assets_folder = "assets"
1111
asset_iconEnabled = "assets\iconEnabled.png"
@@ -27,14 +27,14 @@ def check_for_missing_files():
2727
if not os.path.exists(MULTIMONITORTOOL_PATH):
2828
nH.sendError(MULTIMONITORTOOL_PATH + fileNotFound)
2929
tH.exitItemClicked()
30-
if not os.path.exists(os.path.join(currentPath, asset_iconEnabled)):
30+
if not os.path.exists(os.path.join(dH.getDirectory(), asset_iconEnabled)):
3131
nH.sendError(asset_iconDisabled + fileNotFound)
3232
tH.exitItemClicked()
3333

3434
if not os.path.exists(CSV_FILE_PATH):
3535
mH.saveMultiMonitorToolConfig()
3636

37-
multiMonitorToolOutputPath = os.path.join(currentPath, "MultiMonitorTool")
37+
multiMonitorToolOutputPath = os.path.join(dH.getDirectory(), "MultiMonitorTool")
3838

3939
if not os.path.exists(multiMonitorToolOutputPath):
4040
os.makedirs(multiMonitorToolOutputPath)
@@ -51,7 +51,7 @@ def read_config():
5151

5252
global AUTOSTART, MULTIMONITORTOOL_PATH, CSV_FILE_PATH, MM_CONFIG_FILE_PATH, MONITOR_NAME
5353

54-
if not os.path.exists(os.path.join(currentPath, asset_iconEnabled)):
54+
if not os.path.exists(os.path.join(dH.getDirectory(), asset_iconEnabled)):
5555
nH.sendError(config_file_path + fileNotFound)
5656
tH.exitItemClicked()
5757

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import os
2+
import sys
3+
4+
APP_NAME = "SimpleMonitorControlTray"
5+
6+
7+
def getDirectory():
8+
if getattr(sys, "frozen", False):
9+
module_dir = os.path.dirname(sys.executable)
10+
else:
11+
module_dir = os.path.dirname(os.path.abspath(__file__))
12+
return stripPath(module_dir)
13+
14+
15+
def stripPath(path):
16+
suffix = "\\SimpleMonitorControlTrayModule"
17+
if path.endswith(suffix):
18+
return path[: -len(suffix)]
19+
else:
20+
return path

SimpleMonitorControlTray/monitorHandler.py renamed to SimpleMonitorControlTrayModule/monitorHandler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import csv
22
import subprocess
33

4-
import SimpleMonitorControlTray.configHandler as ch
4+
import SimpleMonitorControlTrayModule.configHandler as ch
55

66

77
def saveMultiMonitorToolConfig():

SimpleMonitorControlTray/registryHandler.py renamed to SimpleMonitorControlTrayModule/registryHandler.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11
import os
22
import winreg as reg
33

4-
import main
5-
64
keyName = "SimpleMonitorControlTray"
75

8-
exe_path = os.path.join(main.script_dir, keyName + ".exe")
6+
import SimpleMonitorControlTrayModule.directoryHandler as dH
7+
8+
exe_path = os.path.join(dH.getDirectory(), keyName + ".exe")
99
registry_key = r"Software\Microsoft\Windows\CurrentVersion\Run"
1010

1111

12+
def isAutostartKeyinRegistry():
13+
try:
14+
key = reg.OpenKey(reg.HKEY_CURRENT_USER, registry_key)
15+
value, _ = reg.QueryValueEx(key, keyName)
16+
reg.CloseKey(key)
17+
return True
18+
except FileNotFoundError:
19+
return False
20+
21+
1222
def add_to_autostart():
1323
key = reg.OpenKey(reg.HKEY_CURRENT_USER, registry_key, 0, reg.KEY_WRITE)
1424
reg.SetValueEx(key, keyName, 0, reg.REG_SZ, exe_path)

SimpleMonitorControlTray/trayHandler.py renamed to SimpleMonitorControlTrayModule/trayHandler.py

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,20 @@
44
from PIL import Image
55
from pystray import MenuItem as item
66

7-
import main
8-
import SimpleMonitorControlTray.configHandler as cH
9-
import SimpleMonitorControlTray.monitorHandler as mH
10-
import SimpleMonitorControlTray.registryHandler as rH
11-
12-
# TODO this returns the wrong path (System32) if run from registry autostart
13-
script_dir = main.script_dir
14-
15-
imageIconEnabled = Image.open(os.path.join(script_dir, "assets\iconEnabled.png"))
16-
imageIconDisabled = Image.open(os.path.join(script_dir, "assets\iconDisabled.png"))
17-
18-
title = "SimpleMonitorControlTray"
7+
import SimpleMonitorControlTrayModule.autoStartHandler as aH
8+
import SimpleMonitorControlTrayModule.configHandler as cH
9+
import SimpleMonitorControlTrayModule.directoryHandler as dH
10+
import SimpleMonitorControlTrayModule.monitorHandler as mH
1911

2012
icon = None
2113
itemTitle = ""
2214

15+
script_dir = dH.getDirectory()
16+
assets_dir = script_dir + "\\assets"
17+
18+
imageIconEnabled = Image.open(os.path.join(assets_dir, "iconEnabled.png"))
19+
imageIconDisabled = Image.open(os.path.join(assets_dir, "iconDisabled.png"))
20+
2321

2422
def saveMultiMonitorToolConfigClicked():
2523
mH.saveMultiMonitorToolConfig()
@@ -43,22 +41,19 @@ def openConfigClicked():
4341
os.startfile(os.path.join(script_dir, cH.config_file_path))
4442

4543

46-
def toggleAutostartInConfig():
44+
def toggleAutostart(icon):
4745
global itemTitle
4846
if cH.AUTOSTART == "False":
4947
itemTitle = "Disable Autostart"
50-
rH.add_to_autostart()
48+
aH.addShortcutToStartupFolder()
5149
cH.set_config_value("SETTINGS", "autostart", "True")
5250
cH.AUTOSTART = "True"
5351
else:
5452
itemTitle = "Enable Autostart"
55-
rH.remove_from_autostart()
53+
aH.removeShortcutFromStartupFolder()
5654
cH.set_config_value("SETTINGS", "autostart", "False")
5755
cH.AUTOSTART = "False"
5856

59-
60-
def toggleAutostart(icon):
61-
toggleAutostartInConfig()
6257
new_menu = (
6358
item(itemTitle, toggleAutostart),
6459
item(
@@ -79,7 +74,7 @@ def initTray():
7974
itemTitle = "Enable Autostart"
8075

8176
menu = (
82-
item(title, iconTrayClicked, default=True, visible=False),
77+
item(dH.APP_NAME, iconTrayClicked, default=True, visible=False),
8378
item(itemTitle, toggleAutostart),
8479
item(
8580
"Save current monitor layout (used when enabling)",
@@ -100,5 +95,5 @@ def initTray():
10095
else:
10196
firstImageIcon = imageIconDisabled
10297

103-
icon = pystray.Icon(title, firstImageIcon, title, menu)
98+
icon = pystray.Icon(dH.APP_NAME, firstImageIcon, dH.APP_NAME, menu)
10499
icon.run()

config.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[SETTINGS]
22
monitor_name = \\.\DISPLAY3
33
multimonitorpath = C:\\App_Install\\multimonitortool-x64\\MultiMonitorTool.exe
4-
autostart = True
4+
autostart = False
55

66
[DEV]
77
mm_csv_export_path = MultiMonitorTool\multiMonitorToolOutput.csv

0 commit comments

Comments
 (0)