Support Board
Date/Time: Mon, 04 May 2026 14:51:57 +0000
Trade windows off-screen when detached
View Count: 270
| [2026-03-13 17:26:22] |
| 503 - Posts: 14 |
|
The trade window when detached appears somewhere off screen. It was placed on a monitor that is no longer used. I tried connecting other monitors to bring the window back but it is still invisible. None of standard methods of moving windows (alt+space, etc.) works. I tried window->reset windows, I tried cascade, and every clue I could find.... the trade windows is still lost. The trade window does not have proper title bar and it's not shown with alt+tab. Is there a working method to recover the trade window when detached from DOM/chart? Many thanks |
| [2026-03-13 18:23:27] |
| User719512 - Posts: 433 |
|
Try the ctrl+w menu. Window >> Windows and Chartbooks
|
| [2026-03-13 19:11:21] |
| 503 - Posts: 14 |
|
ctr+w doesn't help because the trade window is not seen as "window" when detached, more of a pop-up
|
| [2026-03-13 21:06:02] |
| User719512 - Posts: 433 |
|
This can be solved with a Python script. Grok to the rescue (and can assist if you, or others) if you don't know Python. After just a few adjustments, it generated a script to enumerate and move windows to the primary screen. window_manager.py Example: window_manager.py --enumerate Handle: 1509772, Title: ESH26_FUT_CME/ESH26_FUT_CME [CV][M] #10 window_manager.py --move-window 1509772 import argparse import win32gui import win32con import win32console def enumerate_windows(include_empty_title=False): windows = [] def enum_callback(hwnd, results): if win32gui.IsWindowVisible(hwnd): title = win32gui.GetWindowText(hwnd) class_name = win32gui.GetClassName(hwnd) if include_empty_title or title: results.append((hwnd, title, class_name)) win32gui.EnumWindows(enum_callback, windows) return windows def enumerate_child_windows(parent_hwnd): children = [] def enum_child_callback(hwnd, results): if win32gui.IsWindowVisible(hwnd): title = win32gui.GetWindowText(hwnd) class_name = win32gui.GetClassName(hwnd) results.append((hwnd, title, class_name)) win32gui.EnumChildWindows(parent_hwnd, enum_child_callback, children) return children def move_window(hwnd, x=100, y=100): if not win32gui.IsWindow(hwnd): raise ValueError("Invalid window handle") if not win32gui.IsWindowVisible(hwnd): print("Warning: Window is not visible, but attempting move anyway") style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE) is_child = bool(style & win32con.WS_CHILD) # Get current size rect = win32gui.GetWindowRect(hwnd) width = rect[2] - rect[0] height = rect[3] - rect[1] if is_child: # For children, use relative client coords (move to near top-left of parent) print("Detected child window; moving relative to parent at (10, 10)") win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, 10, 10, width, height, win32con.SWP_SHOWWINDOW) else: # For top-level, use screen coords (primary monitor) print("Detected top-level window; moving to primary monitor at (100, 100)") win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, x, y, width, height, win32con.SWP_SHOWWINDOW) def main(): parser = argparse.ArgumentParser(description="Window management tool for enumerating and repositioning windows.") parser.add_argument('--enumerate', action='store_true', help='Enumerate all open top-level windows (includes empty titles)') parser.add_argument('--enumerate-children', type=int, help='Enumerate child windows of the given parent hwnd') parser.add_argument('--move-window', type=int, help='Move the window with the given hwnd to visible position') args = parser.parse_args() if args.enumerate: windows = enumerate_windows(include_empty_title=True) if windows: print("Open top-level windows:") for hwnd, title, class_name in windows: print(f"Handle: {hwnd}, Title: '{title}', Class: {class_name}") else: print("No visible windows found.") elif args.enumerate_children: parent_hwnd = args.enumerate_children if not win32gui.IsWindow(parent_hwnd): print(f"Invalid parent handle: {parent_hwnd}") return children = enumerate_child_windows(parent_hwnd) if children: print(f"Child windows of parent {parent_hwnd}:") for hwnd, title, class_name in children: print(f"Handle: {hwnd}, Title: '{title}', Class: {class_name}") else: print(f"No visible child windows found for parent {parent_hwnd}.") elif args.move_window: hwnd = args.move_window console_hwnd = win32console.GetConsoleWindow() if hwnd == console_hwnd: print("Skipping move: This is the console window itself.") return try: title = win32gui.GetWindowText(hwnd) class_name = win32gui.GetClassName(hwnd) print(f"Moving window (handle: {hwnd}, title: '{title}', class: {class_name})") move_window(hwnd) except ValueError as e: print(f"Error: {e}") except Exception as e: print(f"Failed to move window: {e}") else: parser.print_help() if __name__ == "__main__": main() |
| [2026-03-13 21:28:24] |
| John - SC Support - Posts: 45920 |
|
First, select "Chart >> Reset Child Windows". If that does not solve it then there are numerous articles in the Internet about how to bring windows that are off-screen back on-screen. Just do an Internet search for "moving windows from off screen" or something along those lines. For the most reliable, advanced, and zero cost futures order routing, use the Teton service: Sierra Chart Teton Futures Order Routing |
| [2026-03-13 21:49:16] |
| User719512 - Posts: 433 |
|
Ooh...did not know that one John. One side note, first select/click the window from which the Trade Window is a child. If a different chart is selected, this won't reset the Trade Window. Otherwise, it will appear that the "reset" didn't work. |
| [2026-03-14 08:21:00] |
| Sierra_Chart Engineering - Posts: 23678 |
|
Yes that is correct.
Sierra Chart Support - Engineering Level Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy: https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation For the most reliable, advanced, and zero cost futures order routing, use the Teton service: Sierra Chart Teton Futures Order Routing |
To post a message in this thread, you need to log in with your Sierra Chart account:
