【发布时间】:2024-01-24 12:39:01
【问题描述】:
我从 SAP 获得了一些数据,然后我按下了 SAP 的“打印”按钮以打印数据。 然后出现打印窗口:
我已将其处理为 hWnd 变量(请在第 1 行评论中找到);
那我想把默认打印机名改成“Microsoft Print to PDF”(不知道怎么改);
然后我按下了按钮 OK(请找到第 4 行评论);
代码如下:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const BM_CLICK = &HF5
'''
hWnd = FindWindow("#32770", "Print") 'LINE 1 comment;
Childhwnd = FindWindowEx(hWnd, ByVal 0&, "Button", "OK")';
'ON THIS LINE NEED TO INSERT CODE THAT CHANGES PRINTER NAME;
SendMessage Childhwnd, BM_CLICK, 0, ByVal 0& 'LINE 4 comment;
请帮我更改打印机名称。
【问题讨论】:
-
请注意我的 PRINT 窗口如下图所示:google.ro/…:
-
可以在弹出对话框之前设置默认打印机,然后再改回来吗?可能会容易一些。
-
UI 自动化最好使用 UI 自动化来完成。有关示例代码,请参阅 this answer。使用 UI 自动化有很多好处。一方面,如果在按钮没有标题 "OK" 的系统上运行,代码不会中断(例如在俄罗斯系统上)。也没有理由调用 Windows API 的 ANSI 版本。只需使用 Unicode 版本,每次 API 调用您不必在字符集之间转换多达 4 次。