Grail/selector.py

106 lines
2.5 KiB
Python

"""
This subfile to Grail handles window settings and calculations.
-> Only works on MS Windows!
"""
__author__ = "Lukas Mahler"
__copyright__ = "Copyright 2018-2021"
__version__ = "1.0.0"
__date__ = "25.11.2020"
__email__ = "lm@ankerlab.de"
__status__ = "Development"
import win32api
import win32gui
def getCursorPos():
flags, hcursor, (x, y) = win32gui.GetCursorInfo()
return {"x": x, "y": y}
def getMonitors():
monitors = []
for hMonitor, hdcMonitor, pyRect in win32api.EnumDisplayMonitors():
monitors.append(pyRect)
#print(monitors)
return monitors
def getResolution(monitors):
resolutions = {}
index = 0
for monitor in monitors:
x_from = monitor[0]
x_to = monitor[2]
y_from = monitor[1]
y_to = monitor[3]
res_x = x_to - x_from
res_y = y_to - y_from
res = (res_x, res_y)
resolutions['Monitor'+str(index)] = res
index += 1
return resolutions
def getScreenInfo():
return {"x": win32api.GetSystemMetrics(0), "y": win32api.GetSystemMetrics(1)}
def getStartingpoint():
return getCursorPos()
def getEndpoint():
return getCursorPos()
def getRectangle():
# Source: https://stackoverflow.com/a/41930485/5593051
state_left = win32api.GetKeyState(0x01) # Left button down = 0 or 1. Button up = -127 or -128
state_right = win32api.GetKeyState(0x02) # Right button down = 0 or 1. Button up = -127 or -128
while True:
a = win32api.GetKeyState(0x01)
b = win32api.GetKeyState(0x02)
if a != state_left: # Button state changed
state_left = a
if a < 0:
print('Left Button Pressed')
pos_start = getStartingpoint()
else:
print('Left Button Released')
pos_end = getEndpoint()
break
print(pos_start)
print(pos_end)
calcScreenshotFrame(pos_start, pos_end)
def calcScreenshotFrame(pos_start, pos_end):
# If dragging began from top
if pos_start['x'] < pos_end['x']:
left = pos_start['x']
right = pos_end['x']
top = pos_start['y']
bottom = pos_end['y']
# If dragging began from bottom
else:
left = pos_end['x']
right = pos_start['x']
top = pos_end['y']
bottom = pos_start['y']
print("Screenshot needs to be taken from: x:", left, "->", right, "and y:", top, "->", bottom)
if __name__ == '__main__':
print("This is a Subfile from grail, it can't be executed on its own.")
exit()