Is it possible to make the console window in Visual Studio show up in the same location on screen for each compile?
I always have to move it around whenever I compile because its starting location overlaps things.
Is it possible to make the console window in Visual Studio show up in the same location on screen for each compile?
I always have to move it around whenever I compile because its starting location overlaps things.
By default you can change console window settings per application and windows will save them for the next time when this application is run. You may change the start location by clicking right button on the console title bar, then choosing Properties and Layout tab. Then uncheck the "Let system position window" checkbox and type the coordinates you would like.
Unfortunately Visual Studio when you run an application without the debugger (Ctrl + F5) will launch the cmd.exe /c <your app>
command. So changing properties on this window will also change settings for all console sessions in the system.
This does not apply to the debug run as under the debugger VS launches just the application and so the settings apply only to its console windows.
I came here with the same problem, and was sure there must be an option in VS. I ended up writing a quick python script that runs in the background, searches for the window and sets its last position. Also optionally sets it to always on top, and persists the position in a file. Hopefully will help someone else out.
import win32api
import win32gui
import win32con
import msvcrt
import sys
import time
import threading
import pywintypes
import argparse
import re
import weakref
import pickle
def log_message(message,*args):
print(("[%s]" % message).ljust(30) ," ... ",*(str(arg) for arg in args))
def make_file_name(arguments):
return arguments.save_file_name or "window_" + re.sub("[^a-z]","_",arguments.title_text,flags=re.IGNORECASE)
def update_proc(flags,arguments):
found_pos = (0,0,500,500)
found_hwnd = -1
if arguments.save_to_file and not arguments.reset:
load_file_name = make_file_name(arguments)
try:
with open(load_file_name,"rb") as load_file:
found_pos = pickle.load(load_file)
except:pass
while not flags.exit:
try:
hwnd = win32gui.FindWindow(arguments.class_text,arguments.title_text)
if not hwnd: continue
if hwnd != found_hwnd:
log_message("new window found",hwnd)
for _ in range(10):
win32gui.SetWindowPos(hwnd,0 if not arguments.on_top else win32con.HWND_TOPMOST,*found_pos,0)
time.sleep(0.01)
log_message("setting window position",found_pos)
found_hwnd = hwnd
time.sleep(0.1)
if win32gui.IsIconic(found_hwnd):
continue
rect = win32gui.GetWindowRect(found_hwnd)
new_pos = (rect[0],rect[1],rect[2]-rect[0],rect[3]-rect[1])
#ignore negative pos
if True in [ r < 0 for r in new_pos[0:2] ]:
continue
if new_pos == found_pos:
continue
if arguments.save_to_file:
log_message("saving position",new_pos)
save_file_name = make_file_name(arguments)
try:
with open(save_file_name,"wb") as save_file:
pickle.dump(new_pos,save_file)
except:pass
else:
log_message("updading stored position",new_pos)
found_pos = new_pos
except pywintypes.error:pass
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-s","--savetofile",help="Save window settings to a file",action="store_true",dest="save_to_file")
parser.add_argument("-sfn","--savefilename",type=str,help="File name to use if --savetofile specified (or a default is generated)",dest="save_file_name")
parser.add_argument("-ot","--ontop",help="Window Always Ontop",dest="on_top",action="store_true")
parser.add_argument("-c","--class",type=str,help="Window Class Name",dest="class_text")
parser.add_argument("-r","--reset",help="Reset Window Position",action="store_true")
parser.add_argument("-t","--title",type=str,help="Window Title Text",required=True,dest="title_text")
arguments = parser.parse_args()
flags = type("", (), {"exit":False})()
update_thread = threading.Thread(target=update_proc,args=[weakref.proxy(flags),arguments])
update_thread.start()
if arguments.save_to_file:
log_message("saving to file",make_file_name(arguments))
while True:
if flags.exit: break
key = msvcrt.getch()
if key == b'q':
flags.exit = True
log_message("exiting")
break
update_thread.join()