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
Post Reply