I use Synology Surveillance Station Client on my Windows computer to monitor cameras around my home. I also have a small 12-inch secondary display that works well as a dedicated camera monitor.

The problem was that opening Surveillance Station still required several manual steps:

  1. Launch Surveillance Station Client.
  2. Wait for it to log in.
  3. Open Monitor Center.
  4. Move the window to the secondary display.
  5. Click Synology’s full-screen button.

Since I already use an Elgato Stream Deck, I wanted one button to handle the entire process.

The final result is a single Stream Deck button that:

  • Opens Surveillance Station directly in Monitor Center
  • Uses Synology’s automatic login
  • Loads the previously selected camera layout
  • Moves Monitor Center to the second display
  • Clicks Synology’s built-in full-screen button

What You Need

  • Synology Surveillance Station Client for Windows
  • A secondary monitor
  • Elgato Stream Deck
  • AutoHotkey v2
  • A saved Monitor Center camera layout

Step 1: Enable Automatic Login

Open Synology Surveillance Station Client and enable automatic login.

For security, consider creating a dedicated Surveillance Station account that only has permission to view cameras. Avoid using a full NAS administrator account for a continuously logged-in monitoring display.

After enabling automatic login, close and reopen the client to confirm it signs in without prompting for credentials.

Step 2: Save Your Camera Layout

Open Monitor Center and arrange your camera feeds the way you want them displayed.

In my case, I created a layout showing all of my cameras and left that layout selected before closing the application. Surveillance Station normally remembers the last active Monitor Center layout.

Step 3: Create a Shortcut That Opens Monitor Center Directly

Create a Windows shortcut for Surveillance Station Client and add the following argument to the shortcut target:

--standalone 0

The completed shortcut target will look similar to this:

"C:\Program Files\Synology\SynologySurveillanceStationClient\bin\Synology Surveillance Station Client.exe" --standalone 0

Your installation path may be different.

I saved my working shortcut here:

C:\shortcuts\Synology Surveillance Station Client.lnk

Double-click the shortcut and confirm that it opens directly into Monitor Center.

Step 4: Install AutoHotkey v2

Download and install AutoHotkey v2.

Create a folder for your automation scripts:

C:\Scripts

Inside that folder, create a new AutoHotkey script named:

SynologyCameras.ahk

Make sure the script is being opened with AutoHotkey v2 rather than an older v1 installation.

Step 5: Add the Automation Script

Replace the contents of SynologyCameras.ahk with the following:

#Requires AutoHotkey v2.0
#SingleInstance Force

; ============================================================
; Synology Surveillance Station – Stream Deck Launcher
; ============================================================

shortcutPath := "C:\shortcuts\Synology Surveillance Station Client.lnk"
targetMonitor := 2
startupTimeoutSeconds := 45

; Position of Synology's full-screen button relative to the
; top-right corner of the application's client area.
fullScreenOffsetX := 24
fullScreenOffsetY := 52


; ============================================================
; VERIFY AND READ THE SHORTCUT
; ============================================================

if !FileExist(shortcutPath)
{
    MsgBox(
        "The Synology shortcut was not found:`n`n"
        . shortcutPath
    )
    ExitApp()
}

try
{
    FileGetShortcut(
        shortcutPath,
        &targetPath,
        &workingDirectory,
        &arguments,
        &description,
        &iconFile,
        &iconNumber,
        &runState
    )
}
catch as err
{
    MsgBox(
        "AutoHotkey could not read the Synology shortcut.`n`n"
        . "Error:`n" err.Message
    )
    ExitApp()
}

SplitPath(targetPath, &targetExecutable)

if (targetExecutable = "")
{
    MsgBox(
        "Could not determine the Synology executable.`n`n"
        . "Shortcut target:`n" targetPath
    )
    ExitApp()
}


; ============================================================
; FIND OR LAUNCH MONITOR CENTER
; ============================================================

synologyWindow := FindSynologyWindow(targetExecutable)

if !synologyWindow
{
    try
    {
        Run(shortcutPath)
    }
    catch as err
    {
        MsgBox(
            "Could not launch Surveillance Station.`n`n"
            . "Error:`n" err.Message
        )
        ExitApp()
    }

    startTime := A_TickCount

    while ((A_TickCount - startTime) < startupTimeoutSeconds * 1000)
    {
        Sleep(1000)

        synologyWindow := FindSynologyWindow(targetExecutable)

        if synologyWindow
            break
    }
}

if !synologyWindow
{
    MsgBox(
        "Surveillance Station opened, but AutoHotkey could not "
        . "find the Monitor Center window."
    )
    ExitApp()
}

windowSelector := "ahk_id " synologyWindow


; ============================================================
; GET MONITOR 2 WORK AREA
; ============================================================

monitorCount := MonitorGetCount()

if (targetMonitor > monitorCount)
{
    MsgBox(
        "Monitor " targetMonitor " was not found.`n`n"
        . "Windows detects " monitorCount " monitors."
    )
    ExitApp()
}

MonitorGetWorkArea(
    targetMonitor,
    &monitorLeft,
    &monitorTop,
    &monitorRight,
    &monitorBottom
)

monitorWidth := monitorRight - monitorLeft
monitorHeight := monitorBottom - monitorTop


; ============================================================
; MOVE MONITOR CENTER TO MONITOR 2
; ============================================================

try
{
    WinActivate(windowSelector)
    WinWaitActive(windowSelector, , 10)

    try WinRestore(windowSelector)

    Sleep(750)

    WinMove(
        monitorLeft,
        monitorTop,
        monitorWidth,
        monitorHeight,
        windowSelector
    )

    Sleep(1500)

    WinActivate(windowSelector)
    WinWaitActive(windowSelector, , 10)
}
catch as err
{
    MsgBox(
        "Monitor Center was found, but it could not be moved.`n`n"
        . "Error:`n" err.Message
    )
    ExitApp()
}


; ============================================================
; CLICK SYNLOGY'S FULL-SCREEN BUTTON
; ============================================================

CoordMode("Mouse", "Screen")
MouseGetPos(&originalMouseX, &originalMouseY)

WinGetClientPos(
    &clientLeft,
    &clientTop,
    &clientWidth,
    &clientHeight,
    windowSelector
)

fullScreenButtonX := clientLeft + clientWidth - fullScreenOffsetX
fullScreenButtonY := clientTop + fullScreenOffsetY

WinActivate(windowSelector)
WinWaitActive(windowSelector, , 10)
Sleep(750)

MouseMove(fullScreenButtonX, fullScreenButtonY, 0)
Sleep(500)
Click("Left")

Sleep(1500)

; Move the mouse away from the toolbar.
MouseMove(
    clientLeft + Floor(clientWidth / 2),
    clientTop + clientHeight - 20,
    0
)

ExitApp()


; ============================================================
; FIND THE LARGEST WINDOW FOR THE EXACT SYNLOGY EXECUTABLE
; ============================================================

FindSynologyWindow(executableName)
{
    DetectHiddenWindows(false)

    bestWindow := 0
    bestArea := 0

    for hwnd in WinGetList("ahk_exe " executableName)
    {
        selector := "ahk_id " hwnd

        try
        {
            title := WinGetTitle(selector)

            if (title = "")
                continue

            WinGetPos(
                &windowX,
                &windowY,
                &windowWidth,
                &windowHeight,
                selector
            )

            ; Ignore splash screens and temporary launcher windows.
            if (windowWidth < 500 || windowHeight < 300)
                continue

            windowArea := windowWidth * windowHeight

            if (windowArea > bestArea)
            {
                bestArea := windowArea
                bestWindow := hwnd
            }
        }
        catch
        {
            continue
        }
    }

    return bestWindow
}

How the Script Works

The script first reads the Windows shortcut and identifies the exact Synology executable associated with it.

That is important because an earlier version of the automation searched for windows with words such as “Synology” in the title. A browser tab containing the same word could accidentally match and cause the wrong application to move.

The corrected version only considers windows belonging to the executable stored in the shortcut.

After finding Monitor Center, the script:

  1. Restores the window if it is minimized or maximized.
  2. Moves it to Windows monitor 2.
  3. Sizes it to the monitor’s work area.
  4. Calculates the location of Synology’s full-screen button.
  5. Clicks the button.
  6. Moves the mouse away from the toolbar.

Step 6: Test the Script

Completely close Surveillance Station Client.

Double-click:

C:\Scripts\SynologyCameras.ahk

Monitor Center should open, move to the secondary display, and enter Synology’s full-screen mode.

Do not add it to Stream Deck until it works correctly when launched directly.

Step 7: Add It to Stream Deck

Open the Stream Deck application and select the button you want to use.

Add:

System → Open

For the application or file, select:

C:\Scripts\SynologyCameras.ahk

Give the button a name such as:

Cameras

Now one press should launch your complete camera-monitor workflow.

Adjusting the Full-Screen Click Position

The script clicks Synology’s full-screen control based on its position relative to the top-right corner of the application.

These two values control the click location:

fullScreenOffsetX := 24
fullScreenOffsetY := 52

If the mouse lands slightly above or below the button, adjust fullScreenOffsetY.

For example:

fullScreenOffsetY := 50

moves the click two pixels higher.

fullScreenOffsetY := 54

moves it two pixels lower.

You may need to adjust these values if you change:

  • Windows display scaling
  • Monitor resolution
  • Synology client version
  • Toolbar size
  • Secondary monitor orientation

Changing the Target Monitor

The script currently sends Monitor Center to monitor 2:

targetMonitor := 2

Change that value if Windows identifies your camera display as a different monitor.

You can verify monitor numbering in:

Settings → System → Display → Identify

Troubleshooting

The wrong application moves

Make sure you are using the version of the script that reads the executable from the .lnk shortcut. Do not rely only on window-title matching.

Monitor Center opens but does not enter full screen

Watch where the mouse moves immediately before the click. Adjust fullScreenOffsetX and fullScreenOffsetY until it lands directly on Synology’s full-screen button.

The script cannot find Monitor Center

Increase:

startupTimeoutSeconds := 45

For a slower computer or NAS connection, try:

startupTimeoutSeconds := 60

The script opens on the wrong monitor

Change:

targetMonitor := 2

to the correct Windows monitor number.

AutoHotkey reports syntax errors

Confirm that AutoHotkey v2 is installed and associated with .ahk files. This script is not written for AutoHotkey v1.

Final Result

This setup turns a Stream Deck button into a dedicated security-camera launcher.

Instead of manually opening Surveillance Station, selecting Monitor Center, moving it to another display, and entering full-screen mode, the entire sequence happens automatically.

It is a small automation, but it makes a secondary display much more useful as a dedicated home-security monitor.