如何让程序自动选择打印机进行打印?

ly_lei 2006-08-05 11:04:05
电脑安装有两台打印机A和B,平时默认使用A,需要时使用B。如果每次使用B时把它切换为默认打印机,太麻烦(用完后还得再切换回去)而且容易忘。有什么办法可以实现:需要用B时让程序自动选择B,需要用A时让程序调用A来打印呢?我觉得这个功能非常有用,大家可能都会碰到此类问题。有没有高手能解决这个问题呢?

本人用的是PB7.0。
...全文
1979 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
firefox9999 2006-10-09
  • 打赏
  • 举报
回复
关注
wodesiji 2006-10-08
  • 打赏
  • 举报
回复
请问大仙:
我使用dw_1.Modify ("DataWindow.Printer='" + ls_printer + "'" )的方法没有效果,你是怎样实现的。
我的版本:PB5.0,WINXP
hemhem 2006-09-12
  • 打赏
  • 举报
回复
Function gf_setprint(string as_printname)
string ls_printers,ls_tmp
long ll_place
ls_printers = PrintGetPrinters ( )
ll_place=pos (ls_printers, as_printName)
ls_tmp=left(ls_printers,ll_place -1 )
ls_tmp=reverse(ls_tmp)
ll_place=pos(ls_tmp,'~n')
ls_tmp=mid(ls_tmp,0,ll_place - 1 )
ls_tmp=reverse(ls_tmp)
ls_tmp=ls_tmp + as_printName
ll_place = printsetprinter(ls_tmp)
return ll_place
如果是网络打印机也可以用
woods 2006-09-06
  • 打赏
  • 举报
回复
使用函数设置打印机:PrintSetPrinter ( printername )
可以先在文件中设置默认打印机,打印时调用此函数设置
qixiang 2006-09-06
  • 打赏
  • 举报
回复
遇到过同样的问题,我有个别人写的打印函数好象可以满足楼主的须求,是pb9的
kojiang 2006-09-05
  • 打赏
  • 举报
回复
关注~~~
lionkings 2006-09-01
  • 打赏
  • 举报
回复
Yes﹐Why not?
lovelihp 2006-09-01
  • 打赏
  • 举报
回复
楼上的也是通过修改注册表?
lionkings 2006-09-01
  • 打赏
  • 举报
回复
在ini檔或數據庫里設定好 某某條件手某某打印機。 程式中讀取ini或數據庫的資料確定當前要用哪一台打印機﹐然后直接設定即可。
我有一個現成的封裝對象﹐可以給你﹐注意把下面代碼拷貝成文本檔案﹐然后改名成n_chg_printer.sru﹐然后再導進你的pbl檔里去調用。

$PBExportHeader$n_chg_printer.sru
forward
global type n_chg_printer from nonvisualobject
end type
end forward

global type n_chg_printer from nonvisualobject
end type
global n_chg_printer n_chg_printer

type prototypes
FUNCTION ulong GetWindowsDirectoryA(ref string wdir, ulong buf) LIBRARY "kernel32.dll"
end prototypes

type variables
Private:
// the OS default printer name
string is_DefaultPrinter
end variables

forward prototypes
private function string of_getwinini ()
private function string of_getdefaultprinter ()
public function integer of_setdefaultprinter (string as_defaultprinter)
end prototypes

private function string of_getwinini ();/////////////////////////////////////////////////////////////////////////////////////////
// Purpose: Returns WIN.INI path
//
// Requirements: GetWindowsDirectoryA(ref string wdir, ulong buf) - declared as
// local external function
//
// Arguments: --
//
// Return values: path to win.ini
//
// Copyright ?1997 RAHO
/////////////////////////////////////////////////////////////////////////////////////////

ulong lu_Buf
string ls_WinDir

lu_Buf = 144
ls_WinDir = Space(144)

GetWindowsDirectoryA(ls_WinDir, lu_Buf)

return ls_WinDir + "\win.ini"
end function

private function string of_getdefaultprinter ();/////////////////////////////////////////////////////////////////////////////////////////
// Purpose: Returns the name of OS default printer.
//
// Requirements: --
//
// Arguments: --
//
// Return values: Name of default printer.
//
// Copyright ?1997 RAHO
/////////////////////////////////////////////////////////////////////////////////////////

string ls_DefaultPrinter
Environment lenv_Env

if GetEnvironment(lenv_Env) = 1 then
choose case lenv_Env.OSType
case WindowsNT!
// get it from registry
if RegistryGet("HKEY_CURRENT_USER/Software/Microsoft/WindowsNT/CurrentVersion/Windows", &
"Device", ls_DefaultPrinter) = -1 then
SetNull(ls_DefaultPrinter)
end if
case Windows!
// get it from INI file
ls_DefaultPrinter = ProfileString(of_GetWinINI(), "Windows", "Device", "error")
if ls_DefaultPrinter = "error" then SetNull(ls_DefaultPrinter)
end choose
else
// error geting environment
SetNull(ls_DefaultPrinter)
end if

return ls_DefaultPrinter
end function

public function integer of_setdefaultprinter (string as_defaultprinter);/////////////////////////////////////////////////////////////////////////////////////////
// Purpose: Sets the new default printer.
//
// Requirements: --
//
// Arguments: as_DefaultPrinter - new default printer
//
// Return values: 1 - success
// 0 - no changes needed
// -1 - fail
// -2 - given printer is not a valid printer name
//
// Copyright ?1997 RAHO
/////////////////////////////////////////////////////////////////////////////////////////

integer li_RetVal = 1
Environment lenv_Env
string ls_Buffer

// make changes
if GetEnvironment(lenv_Env) = 1 then
choose case lenv_Env.OSType
case WindowsNT!
// check if given printer is valid
if RegistryGet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", &
as_DefaultPrinter, ls_Buffer) <> 1 then return -2
// check for needed changes
if (as_DefaultPrinter + "," + ls_Buffer) = of_GetDefaultPrinter() then return 0
// set it in registry
return RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows", &
"Device", as_DefaultPrinter + "," + ls_Buffer)
case Windows!
// check if given printer is valid
ls_Buffer = ProfileString(of_GetWinINI(), "Devices", as_DefaultPrinter, "error")

if ls_Buffer = "error" then return -2
// check for needed changes
if (as_DefaultPrinter + "," + ls_Buffer) = of_GetDefaultPrinter() then return 0
// set it in INI file
if SetProfileString(of_GetWinINI(), "Windows", "Device", as_DefaultPrinter + "," + ls_Buffer) <> 1 then
return -1
else
RegistrySet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", &
"Default", regstring!, as_defaultprinter)
end if
end choose
else
// error geting environment
return -1
end if

return 1
end function
on n_chg_printer.create
TriggerEvent( this, "constructor" )
end on

on n_chg_printer.destroy
TriggerEvent( this, "destructor" )
end on

event constructor;/////////////////////////////////////////////////////////////////////////////////////////
// Purpose: Get the old default printer and store it.
//
// Requirements: is_DefaultPrinter
//
// Arguments: --
//
// Return values: --
//
// Copyright ?1997 RAHO
/////////////////////////////////////////////////////////////////////////////////////////

is_DefaultPrinter = of_GetDefaultPrinter()
is_DefaultPrinter = Left(is_DefaultPrinter,Pos(is_DefaultPrinter,",") - 1)
end event

event destructor;/////////////////////////////////////////////////////////////////////////////////////////
// Purpose: Revert default printer back to old one.
//
// Requirements: is_DefaultPrinter
//
// Arguments: --
//
// Return values: --
//
// Copyright ?1997 RAHO
/////////////////////////////////////////////////////////////////////////////////////////

of_SetDefaultPrinter(is_DefaultPrinter)
end event



//在pb代碼這樣調用﹕
// 設置當前的打印機
n_chg_printer luo_printer
luo_printer = Create n_chg_printer
luo_printer.of_setdefaultprinter('HP LaserJet 1020')
dw_1.print()
//..... 你的代碼
Awang_126 2006-09-01
  • 打赏
  • 举报
回复
你可以做个打印机的设置功能,允许用户设置那些任务是用A打印机,那些任务是用B打印机,然后将这些信息保存到配置文件中,最后在用户打印的时候由程序根据所要执行的任务自动设置用哪个打印机,在系统注册表中有保存了系统使用的默认打印机,只要对这个注册表项进行设置就可以了
AFIC 2006-09-01
  • 打赏
  • 举报
回复
pb自带的printsetup()函数即可选择打印机……
lovelihp 2006-08-12
  • 打赏
  • 举报
回复
程序中动态改 默认打印机
发财吧 2006-08-12
  • 打赏
  • 举报
回复
大仙的做法是可行的,这个我做过类似的程序,是好用的。不好用的原因可能是用源程序运行的,用编译后的就行了。
lsypenghong 2006-08-12
  • 打赏
  • 举报
回复
在设置里选择不行吗?
kojiang 2006-08-07
  • 打赏
  • 举报
回复
关注~~~~
ly_lei 2006-08-07
  • 打赏
  • 举报
回复
大仙的方法我试过了:不行。虽然在程序中将打印机修改过来了,但实际打印时操作系统还是调用的默认打印机来进行打印。我感觉应该改变操作系统的打印设置才行。

继续等待高手,继续思索……
luzhihg 2006-08-07
  • 打赏
  • 举报
回复
是数据窗口来打印的?
我是用pb9的,通常是这样。
//得出打印机列表

long ll_place
string ls_printers,ls_printer
boolean lb_end = true

ls_printers = PrintGetPrinters ( )

//
String ls_name, ls_driver, ls_port, ls_temp
Long ll_pc
//

do until lb_end = false
ll_place=pos (ls_printers, "~n" )
ls_printer = left (ls_printers, ll_place - 2)
ls_printers = mid(ls_printers,ll_place + 1 )
//
ll_pc=pos (ls_printer, "~t")

ls_name=left(ls_printer, ll_pc -1)

ls_temp=mid(ls_printer, ll_pc +1)

ll_pc=pos (ls_temp, "~t")

ls_driver=left(ls_temp, ll_pc -1)

ls_port=mid(ls_temp, ll_pc +1)
//
if ls_name <> "" then
ddlb_printer.additem(ls_name)
end if
if ll_place = 0 then
//
ll_pc=pos (ls_printers, "~t")

ls_name=left(ls_printers, ll_pc -1)

ls_temp=mid(ls_printers, ll_pc +1)

ll_pc=pos (ls_temp, "~t")

ls_driver=left(ls_temp, ll_pc -1)

ls_port=mid(ls_temp, ll_pc +1)
//用ddlb来放置打印机名称。
ddlb_printer.additem(ls_name)
lb_end = false
end if
loop


//
this.Object.Datawindow.Printer = "XXX打印机"
ly_lei 2006-08-05
  • 打赏
  • 举报
回复
阿发的提供的思路很好,略显麻烦。大仙的方法正在试用……
Paladin_china 2006-08-05
  • 打赏
  • 举报
回复
dw_1.Modify ("DataWindow.Printer='" + ls_printer + "'" )
ls_printer是你打印机的名称
你可以把你的打印机写在配制文件中,用ProfileString()方法读取你需要的打印机名称
wwwafa9 2006-08-05
  • 打赏
  • 举报
回复
给你一个思路:
获取系统安装的所有打印机,然后让用户选择用哪台打印机打印即可。

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧