Better PowerScribe 360 AutoHotkey Controls

I’ve been happily using AutoHotkey as a radiologist for years. My scripts are basically simple, mostly human-made artifacts for getting a limited number of specific things done, like using keyboard shortcuts in PowerScribe to replicate the PowerMic buttons with my Contour Shuttle.

For some users on some workstations, the toggling keyboard shortcut method I described in my 2023 AutoHotkey post is laggy and occasionally unreliable (when compared to the buttons on the PowerMic).

The following script, shared with me by radiologist Jon Brandon is a great example of what is possible with AI. He was able to vibe code an AHK script that (after about 60 tries from ChatGPT) replicates the actual PowerMic buttons themselves as opposed to toggling the active programs and entering the keyboard shortcuts.

I tried it, and it worked for me. I’ve never personally really had issues with script lag, but I know it’s been a big frustration for others.

If it doesn’t work for you (or you use PSOne, for example), upload it to your AI tool of choice and start iterating. The bottom line is that if there are software things you want to make your life better, it’s now often possible to make them.

# PowerScribe 360 AutoHotkey Internal Bridge

## What this is

This is a standalone AutoHotkey v2 script for controlling **PowerScribe 360**.

Normal PowerScribe keyboard shortcuts can be slower or less consistent than the
buttons on a PowerMic. This script takes a different approach: instead of
pretending to press PowerScribe shortcut keys, it asks PowerScribe to run its
own internal commands.

There is no PACS automation, mouse configuration, ChatGPT integration, or
personal workflow code in this package.

## Requirements

- Windows
- PowerScribe 360 (this was developed against a 32-bit PowerScribe 360 build)
- AutoHotkey v2
- The 32-bit AutoHotkey executable must be installed. If the script starts
  under 64-bit AutoHotkey, it automatically relaunches itself with
  `AutoHotkey32.exe`.
- PowerScribe and AutoHotkey should run at the same Windows privilege level.

The bridge was developed and tested on PowerScribe 360 version **7.0.111.7**.
Other PowerScribe versions may have different internal classes or methods.

## How to use it

1. Install AutoHotkey v2.
2. Save `PowerScribe360_AHK_Internal_Bridge.ahk` somewhere convenient.
3. Double-click the AHK file.
4. Start PowerScribe 360 if it is not already running.
5. Use the hotkeys below.

The script can start before or after PowerScribe. It checks for PowerScribe
periodically and attaches when PowerScribe is available.

## Primary hotkeys

| Hotkey | PowerScribe action |
|---|---|
| Alt+F1 | Toggle dictation |
| Alt+F2 | Previous report field |
| Alt+F3 | Next report field |
| Alt+F4 | Sign report |
| Alt+F5 | Enter Findings mode |
| Alt+F6 | Exit Findings mode |
| Alt+F7 | Apply Findings |
| Alt+F8 | Draft |
| Alt+F9 | Correct |
| Alt+F10 | Sign Preliminary |
| Alt+F11 | AutoFeed |
| Alt+F12 | Close report |

Previous/Next field are sent to PowerScribe **without bringing PowerScribe to
the foreground**, so PACS can remain active.

If dictation is running while Previous/Next field is used, the bridge uses the
PowerScribe internal sequence that pauses dictation, changes fields, and
resumes dictation.

## Secondary hotkeys

These commands exist inside PowerScribe, but some are dependent on site
configuration, user role, report state, or installed modules.

| Hotkey | PowerScribe action |
|---|---|
| Alt+Shift+F1 | Save |
| Alt+Shift+F2 | Undo |
| Alt+Shift+F3 | Redo |
| Alt+Shift+F4 | Check Spelling |
| Alt+Shift+F5 | Compare Revisions |
| Alt+Shift+F6 | Insert Prior |
| Alt+Shift+F7 | Insert Note |
| Alt+Shift+F8 | Follow-up Recommendations |
| Alt+Shift+F9 | Critical Message |
| Alt+Shift+F10 | Peer Review |
| Alt+Shift+F11 | Wet Read |
| Alt+Shift+F12 | Launch PACS |

A secondary command that is unavailable in the current PowerScribe context may
simply do nothing.

## Why Discard is not mapped

PowerScribe's internal `Discard` command is included in the bridge, but the
script intentionally does **not** assign it a hotkey because an accidental
keypress could discard a report.

## How it works, in simple English

A normal AutoHotkey macro usually works like this:

1. Bring PowerScribe to the front.
2. Pretend to press a key such as F4, Tab, or Shift+Tab.
3. Hope PowerScribe processes that shortcut correctly.

This script uses a different path.

### 1. AutoHotkey finds PowerScribe

The script finds the PowerScribe window and the Windows thread that owns its
user interface.

### 2. It installs a small hook only on that PowerScribe UI thread

The script creates two small temporary 32-bit DLLs in the Windows temp folder.
It uses the Windows `WH_GETMESSAGE` hook mechanism to load the small hook into
PowerScribe's UI thread.

This is **not a system-wide keyboard hook**.

### 3. AutoHotkey sends PowerScribe a private message

When a hotkey is pressed, AutoHotkey sends a private Windows message to
PowerScribe containing a small command number.

For example, one command number means "Next Field" and another means
"Sign Report."

### 4. The bridge receives the message inside PowerScribe

Because the hook is running in PowerScribe's process, it can obtain the actual
live PowerScribe `MainForm` .NET object.

### 5. The bridge calls PowerScribe's own internal command

The bridge uses .NET reflection to call PowerScribe's internal methods, such as
its button-action and voice-command handlers.

So the path is approximately:

    Hotkey
      -> AutoHotkey
      -> private Windows message
      -> PowerScribe UI-thread hook
      -> PowerScribe internal .NET command

That avoids most of the focus and timing problems associated with simulated
PowerScribe keyboard shortcuts.

## Does this modify PowerScribe?

No PowerScribe program files are changed.

The bridge DLLs are generated in the Windows temporary folder each time the
script starts. The hook is removed when the AutoHotkey script exits.

## Security / IT note

The script uses `SetWindowsHookEx` to load a small DLL into the PowerScribe
process. That is a legitimate Windows mechanism, but endpoint-security
software may treat process hooking or DLL loading as sensitive behavior.

On a managed workstation, local IT/security policy may block it or require
approval.

## Changing the hotkeys

All user-facing hotkeys are grouped near the top of the AHK file under:

    HOTKEYS

AutoHotkey v2 modifier symbols used there are:

- `!` = Alt
- `+` = Shift
- `^` = Ctrl
- `#` = Windows key

For example:

    !F4

means Alt+F4.

## Troubleshooting

### "PowerScribe is not running"

Start PowerScribe and try the hotkey again.

### The script says it cannot find 32-bit AutoHotkey

Install AutoHotkey v2 with its 32-bit executable. The PowerScribe build this
bridge was written for is 32-bit, so the hook must also be 32-bit.

### A secondary command does nothing

That operation may not be active for the current report, user role, site
configuration, or PowerScribe module.

### A major PowerScribe upgrade breaks the script

This project calls PowerScribe's internal .NET methods. Those internal names
are not a public API and can change between releases. A major update may
require the bridge to be adjusted.

## Disclaimer

This is an unofficial workflow tool and is not affiliated with or supported by
Microsoft/Nuance. Test commands in a safe environment before relying on them
clinically.

 

Leave a Reply