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 热键
注意:需要管理员权限才能修改默认打印机设置。
*/