Print to named printer?

English main discussion
Post Reply
  • Author
  • Message
x32
Offline
Posts: 1
Joined: Wed Dec 10, 2025 12:56 pm

Print to named printer?

Post by x32 »

Switching to Akelpad has broken one of the AutoHotKey scripts I use regularly. It's a quick and dirty label printing script that prints to a specific printer, not the default printer. The printer is defined by name in the script, "POS58".

My code is as follows. I can only get it to print to the default printer.

Code: Select all

file = %A_ScriptDir%\label.txt
printer = POS58 Printer
editor = C:\Users\*********\Documents\AHK Scripts\Lable Maker\AkelPad-4.9.9-bin-eng\AkelPad.exe
Run, %editor% /p "%file%" "%printer%",, Hide
Using Notepad it prints to the Named Printer.

Code: Select all

file = %A_ScriptDir%\label.txt
printer = POS58 Printer
Run, notepad /pt "%file%" "%printer%",, Hide
Is there a way to get Anekpad to print to the Named Printer instead of the Default printer?
Thanks

Offline
Posts: 121
Joined: Sat Jan 12, 2008 10:16 am
Location: Shantou, China

Re: Print to named printer?

Post by cnnnc »

Code: Select all

; 打印机管理器脚本
; 功能:切换默认打印机,执行打印操作,然后恢复原始默认打印机

#NoEnv
#SingleInstance Force
SendMode Input
SetWorkingDir %A_ScriptDir%

; ======================== 配置区域 ========================
targetPrinter := "HP LaserJet Pro MFP M428fdw"  ; 请修改为目标打印机名称
documentPath := "C:\path\to\your\document.pdf"   ; 请修改为要打印的文档路径

; ======================== 主程序 ========================
Main()

Main()
{
    global targetPrinter, documentPath
    
    ; 1. 获取当前默认打印机
    originalPrinter := GetDefaultPrinter()
    if (originalPrinter = "")
    {
        MsgBox, 16, 错误, 无法获取当前默认打印机
        return
    }
    
    MsgBox, 64, 当前默认打印机, 当前默认打印机是:%originalPrinter%
    
    ; 2. 设置目标打印机为默认打印机
    if (SetDefaultPrinter(targetPrinter))
    {
        MsgBox, 64, 打印机切换成功, 已切换到打印机:%targetPrinter%
        
        ; 3. 执行打印操作
        PrintDocument(documentPath)
        
        ; 4. 恢复原始默认打印机
        SetDefaultPrinter(originalPrinter)
        MsgBox, 64, 恢复完成, 已恢复默认打印机为:%originalPrinter%
    }
    else
    {
        MsgBox, 16, 错误, 无法设置打印机:%targetPrinter%
        SetDefaultPrinter(originalPrinter)  ; 尝试恢复
    }
}

; ======================== 函数定义 ========================

; 函数:获取当前默认打印机
GetDefaultPrinter()
{
    VarSetCapacity(buffer, 256 * 2)  ; 分配缓冲区
    size := 256
    
    ; 调用Windows API获取默认打印机
    DllCall("winspool.drv\GetDefaultPrinterW", "Str", buffer, "UIntP", size)
    
    if (ErrorLevel = 0 && size > 0)
    {
        return buffer
    }
    return ""
}

; 函数:设置默认打印机
SetDefaultPrinter(printerName)
{
    ; 调用Windows API设置默认打印机
    result := DllCall("winspool.drv\SetDefaultPrinterW", "Str", printerName)
    
    if (result)
    {
        return true
    }
    else
    {
        ; 尝试另一种方法
        RunWait, %ComSpec% /c RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%printerName%",, Hide
        Sleep, 1000
        
        ; 验证是否设置成功
        currentPrinter := GetDefaultPrinter()
        return (currentPrinter = printerName)
    }
}

; 函数:打印文档
PrintDocument(filePath)
{
    if (!FileExist(filePath))
    {
        MsgBox, 16, 文件不存在, 找不到文件:%filePath%
        return false
    }
    
    ; 使用ShellExecute打印文件
    try
    {
        Run, "%filePath%" /p,,, pid
        if (pid)
        {
            MsgBox, 64, 打印作业已提交, 文档已发送到打印队列。`n文件:%filePath%
            return true
        }
    }
    catch
    {
        ; 备选方法:使用命令行打印
        RunWait, %ComSpec% /c "print /d:"%targetPrinter%" "%filePath%"",, Hide
        MsgBox, 64, 打印命令已执行, 已通过命令行发送打印任务。
        return true
    }
    
    return false
}

; ======================== 热键区域 ========================
^!p::  ; Ctrl+Alt+P 执行完整打印流程
{
    Main()
    return
}

; 仅切换打印机(不打印)
^!s::  ; Ctrl+Alt+S 只切换打印机
{
    targetPrinter := "HP LaserJet Pro MFP M428fdw"  ; 目标打印机
    
    originalPrinter := GetDefaultPrinter()
    if (originalPrinter = "")
    {
        MsgBox, 16, 错误, 无法获取当前默认打印机
        return
    }
    
    MsgBox, 36, 切换打印机, 当前打印机:%originalPrinter%`n`n切换到:%targetPrinter%?
    IfMsgBox, No
        return
    
    if (SetDefaultPrinter(targetPrinter))
    {
        MsgBox, 64, 成功, 打印机切换成功!`n新默认打印机:%targetPrinter%
        
        ; 询问是否恢复
        MsgBox, 36, 恢复打印机, 是否恢复原始打印机?
        IfMsgBox, Yes
        {
            SetDefaultPrinter(originalPrinter)
            MsgBox, 64, 恢复完成, 已恢复为:%originalPrinter%
        }
    }
    else
    {
        MsgBox, 16, 失败, 无法切换到指定打印机
    }
    return
}

; 获取当前打印机信息
^!i::  ; Ctrl+Alt+I 显示打印机信息
{
    printer := GetDefaultPrinter()
    if (printer != "")
    {
        MsgBox, 64, 当前默认打印机, 默认打印机:%printer%
    }
    else
    {
        MsgBox, 16, 错误, 无法获取打印机信息
    }
    return
}

; ======================== GUI界面(可选) ========================
^!g::  ; Ctrl+Alt+G 显示GUI界面
{
    Gui, Destroy
    Gui, Add, Text,, 打印机管理器
    
    ; 获取当前打印机
    currentPrinter := GetDefaultPrinter()
    Gui, Add, Text, w400, 当前默认打印机:%currentPrinter%
    
    Gui, Add, Text,, 目标打印机:
    Gui, Add, Edit, w400 vTargetPrinter, HP LaserJet Pro MFP M428fdw
    
    Gui, Add, Text,, 文档路径:
    Gui, Add, Edit, w400 vDocumentPath, C:\path\to\your\document.pdf
    
    Gui, Add, Button, w100 gBtnSwitch, 切换并打印
    Gui, Add, Button, x+10 w100 gBtnRestore, 恢复原打印机
    Gui, Add, Button, x+10 w100 gBtnGetInfo, 获取信息
    
    Gui, Show,, 打印机管理器
    return
}

BtnSwitch:
    Gui, Submit, NoHide
    
    ; 保存原始打印机
    originalPrinter := GetDefaultPrinter()
    
    ; 切换到目标打印机
    if (SetDefaultPrinter(TargetPrinter))
    {
        MsgBox, 64, 成功, 已切换到:%TargetPrinter%
        
        ; 打印文档
        PrintDocument(DocumentPath)
        
        ; 恢复原始打印机
        SetDefaultPrinter(originalPrinter)
        MsgBox, 64, 恢复完成, 已恢复为:%originalPrinter%
    }
    return

BtnRestore:
    Gui, Submit, NoHide
    if (SetDefaultPrinter(TargetPrinter))
    {
        MsgBox, 64, 成功, 已设置为默认打印机:%TargetPrinter%
    }
    return

BtnGetInfo:
    printer := GetDefaultPrinter()
    if (printer != "")
    {
        MsgBox, 64, 打印机信息, 当前默认打印机:%printer%
    }
    return

GuiClose:
    Gui, Destroy
    return

; ======================== 脚本说明 ========================
/*
脚本说明:
1. 主函数 Main() 执行完整流程:
   - 获取当前默认打印机
   - 切换到目标打印机
   - 打印指定文档
   - 恢复原始默认打印机

2. 可用热键:
   - Ctrl+Alt+P:执行完整打印流程
   - Ctrl+Alt+S:只切换打印机(不打印)
   - Ctrl+Alt+I:显示当前打印机信息
   - Ctrl+Alt+G:显示GUI界面

3. 使用前需要修改:
   - targetPrinter:改为您的目标打印机名称
   - documentPath:改为要打印的文档路径

4. 获取打印机名称的方法:
   - 打开控制面板 -> 设备和打印机
   - 查看打印机的完整名称(带网络路径)
   - 或者使用脚本中的 Ctrl+Alt+I 热键

注意:需要管理员权限才能修改默认打印机设置。
*/
The code by AI

Offline
Posts: 1
Joined: Tue Jul 28, 2026 10:04 pm

Re: Print to named printer?

Post by VivianeLars »

That AutoHotkey script snippet is really helpful, thanks for sharing! Dealing with printer configurations and command-line parameters can sometimes be a bit tricky when trying to automate daily tasks or document processing. Speaking of putting together useful technical resources and guides online, if anyone here manages tech blogs or documentation sites and wants to improve their resource sharing and visibility, looking into quality backlinks is a great way to help more developers find helpful code solutions. Hope this helps anyone else struggling with named printer setups!
Post Reply