关于修改默认打印机的问题

tfe 2003-01-10 09:53:53
同一个语句
string printer
printer="abc"
registryset("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device",printer+",winspool,FILE:")
我放在
cb_1的clicked script里就可以执行。
在cb_1的clicked script里调用函数print_rp(printer)
我把它放在print_rp里,就执行不了。
为什么?

...全文
99 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pearl2002 2003-01-10
  • 打赏
  • 举报
回复
9x或NT下动态设置默认打印机
作者:流方

Windows 9x或NT下动态设置默认打印机

下面将讨论如何在程序中动态设置打印机
原理:windows 9x中,修改注册表及win.ini;
Windows NT中,直接修改注册表即可。

Windows95 样例:
/******************************************************************
变量设置:
li_rtn = WIN.INI 修改成功标记
ls_default = 默认打印机名称
ls_driver = 打印机驱动程序
ls_port = 打印端口
ls_key = 打印机设置的注册表键值

对象:
sle_def = 默认打印机
sle_def2 = 默认打印机的端口几驱动
sle_new = 新打印机名称
sle_new2 = 新打印机的端口几驱动

*******************************************************************/
//变量声明:
int li_rtn
string ls_default, ls_driver, ls_port, ls_printer, ls_key

//第一步:得到当前打印机的名称
RegistryGet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", "default", ls_default)
sle_def.text = ls_default

//第二步:得到当前打印机的驱动及端口
ls_key = "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers\"+ sle_def.text
RegistryGet(ls_key, "Printer Driver", ls_driver)
RegistryGet(ls_key, "Port", ls_port)
sle_def2.text = ls_driver + "," + ls_port

//第三步:设置一个新的打印机
int li_rtn
li_rtn = RegistrySet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", "default", sle_new.text)
if li_rtn = 1 then
 Messagebox('Setting new printer name','Successful')
else
 Messagebox('Setting new printer name','Failed')
end if

//第四步:得到新打印机的驱动及端口
ls_printer = sle_new.text
ls_key = "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers\"+ ls_printer
RegistryGet(ls_key, "Printer Driver", ls_driver)
RegistryGet(ls_key, "Port", ls_port)
sle_new2.text = ls_driver + "," + ls_port

//第五步:设置新的默认打印机名称、驱动及端口到 WIN.INI 文件中
ls_printer = sle_new.text + "," + sle_new2.text
li_rtn = SetProfileString("c:\windows\win.ini", "Windows", "device", ls_printer)
if li_rtn = 1 then
 Messagebox("Win.ini Update", "Successful")
else
 Messagebox("Warning", "An error has occurred")
end if

Windows NT 样例

//第一步:得到当前打印机的名称
string ls_default
RegistryGet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows", "Device", ls_default)
sle_def.text = ls_default

//第二步:设置一个新的打印机
int li_rtn
li_rtn = RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows", &"Device", sle_new.text)
if li_rtn = 1 then
 Messagebox("Setting new printer name", "Successful")
else
 Messagebox("Setting new printer name", "Failed")
end if


tfe 2003-01-10
  • 打赏
  • 举报
回复
能不能不改默认打印机,而指定在哪个打印机打印?
我是用水晶报表的。
好象它有个指定打印机名的属性。
xuebuctxy 2003-01-10
  • 打赏
  • 举报
回复
GetWindowsDirectoryA是API函数
我记得好象不用改win.ini,改了注册表就行了,我在vb里用函数改过,我运行完查看了win.ini 好象没有改动,时间长了,记不清了
至于函数没有执行,pb有这个bug,你debug时a值改变了吗,如果没变就应该是bug的原因,改动一下程序再保存更新一下就行了
killerdanny 2003-01-10
  • 打赏
  • 举报
回复
Function long GetWindowsDirectoryA(REF string Buffer, long Size) library "kernel32.dll"
tfe 2003-01-10
  • 打赏
  • 举报
回复
killerdanny
getwindowsdirectorya是什么?
我用的是pb6.5
帮助里找不到这个。
还有windows要改win.ini的吗?
那改了用不用重启?
我现在的要求是,连续打n张报表,根据报表中一个变量来决定使用哪个打印机。
客户的操作系统是98

xuebuctxy
我有一件事觉得很怪。
为什么我debug里,
它进不到我的函数里。
如a=fun1(a,b,c)
它执行到这里就直接运行,并不跟踪进入fun1执行。
而是返回一个a值给我。
xuebuctxy 2003-01-10
  • 打赏
  • 举报
回复
语句不执行?debug试试
killerdanny 2003-01-10
  • 打赏
  • 举报
回复
public subroutine setprinter (string printername, string driver, string port);// Function used to set the default printer based on the choice maded on the print
// dialog box..
// Arguments:

// PrinterName => Name of the new printer
// Driver => Driver of the new printer
// Port => Port of the new printer

Environment Env
string ls_WinDir

GetEnvironment(Env)

Choose Case Env.OSType
Case Windows!
RegistrySet("HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers", "Default", PrinterName)
ls_WinDir = Space(260)
GetWindowsDirectoryA(ls_WinDir,260) // GetWindows directory
SetProfileString(ls_WinDir + "\WIN.INI","Windows","Device",PrinterName + "," + Driver + "," + Port)
Case WindowsNT!
RegistrySet("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows","Device", PrinterName)
End Choose
end subroutine
tfe 2003-01-10
  • 打赏
  • 举报
回复
谢谢大家。
我试过了。
98下虽然改了打印机(指定打印机成功),
但那个默认打印机的图标不会变,我想可能和没有重新装入win.ini文件有关吧。
不过无所谓。
功能能实现就好了。

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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