|
|
|
||||||||||||
|
|
Собственный, легко управляемый и профессионально разработанный сайт – необходимый элемент любого бизнеса. Находитесь ли Вы в командировке, в дороге, дома или на отдыхе имея компьютер, подключенный к сети Internet, Вы получаете доступ к управлению Вашим сайтом! |
|||
Смена активного принтера в Windows 2000 средствами Visual BasicСтатьи → Программирование на VisualBasicПроблему программного изменения активного принтера можно по праву отнести в раздел FAQ - часто задаваемых вопросов, настолько часто о ней задаются вопросы в форумах и почтовых конференциях. Данный материал, основанный на информации из Microsoft Knowlegde Base, детализирует решение этой проблемы для Windows NT/Windows 2000, а также для Win9x. Традиционный подход к установке принтера "по умолчанию", который должен работать согласно документации, состоит в том, чтобы, перебирая коллекцию Printers, найти требуемый принтер и назначить его объекту Printer. На самом деле это не работает как заявлено. Название принтера изменится, но вывод будет производиться на первоначальное устройство, которое до этого использовалось по умолчанию. В Win9x установленные принтеры перечислены в win.ini в разделе PrinterPorts, принтер по умолчанию указан в разделе Device. Поэтому различная документация просто предлагает изменить значения этого ключа. Но если вы посмотрите содержимое win.ini в системе WinNT/2000, то обнаружите, что файл не содержит никакой информации об установленных и активном принтерах. По умолчанию, при использовании GetProfileString / WriteProfileString или GetPrivateProfileString / WritePrivateProfileString под WinNT/2000, API сначала смотрит значения системного реестра в секции: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping в поисках ini-файла. Если значение не было найдено, то используется "физический" ini-файл. В случае, если подключ win.ini был найден в системном реестре под ключом, указанным выше, то далее проверяется значение PrinterPorts, которое указывает, где в реестре хранятся данные об установленных принтерах (например, "USR:Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts"). Найдя данный ключ, вы увидите перечень принтеров, которые доступны на данном компьютере. Таким образом, используя функции работы с реестром можно получить данные о принтерах прямо отсюда, а не из обычного текстового файла конфигурации, как в Win9x. Обратите внимание, перед их использованием, что смена активного принтера произойдет во всей системе, а не только в вашем приложении. Поэтому после смены принтера было бы логичнее создать функцию, позволяющую восстановить первоначальные настройки системы перед завершением работы вашей программы. Чтобы на деле увидеть как работать с описываемыми ключами, ниже приводится готовый пример. Создайте новый проект, добавьте на его форму список List1 и кнопку Command1. Затем запустите проект, откройте папку "Printers" (в русских версиях - "Принтеры") и нажимая на кнопку, смотрите как изменяется активный принтер. Option Explicit Private Const HWND_BROADCAST As Long = &HFFFF Private Declare Function GetProfileString Lib "kernel32" _ Private Declare Function WriteProfileString Lib "kernel32" _ Private Declare Function SendMessage Lib "user32" _ Private Sub Form_Load() Private Sub Command1_Click() Private Sub List1_Click() Private Sub SetDefaultPrinter(ByVal PrinterName As String, _ 'Строим строку для принтера 'Сохранить информацию о новом принтере в секции 'Заставить все приложения перезагрузить INI-файл End Sub Private Sub GetDriverAndPort(ByVal Buffer As String, _ Dim posDriver As Long 'Имя драйвера идет вначале строки If posDriver > 0 Then If posPort > 0 Then End Sub 'Создаем listbox из данных win.ini Dim success As Long ret = Space$(8102) 'Возращаемая строка является списком, разделенным ret = Left$(ret, success) End If 'вернем число принтеров (кол-во элементов) End Function Private Function StripNulls(startstr As String) As String Dim pos As Long pos = InStr(startstr$, Chr$(0)) If pos Then End Function Private Sub SetDefaultPrinterWinNT() Dim Buffer As String If List1.ListIndex > -1 Then 'Получить информацию из файла WIN.INI о принтере, Call GetProfileString("PrinterPorts", _ 'Получить имя драйвера и порта If DriverName "" And PrinterPort "" Then End If End Sub Источник: http://relib.com 16.02.2006 |
VSESMI.ru — новости в СМИ.
Tur-Hotel.ru — отзывы об отелях
|
|
Copyright © 2002—2012 ООО "Хостмэйк" Телефон в Москве: +7 (495) 223-46-50 Телефон в Санкт-Петербурге: +7 (812) 448-38-90 Тел./Факс: +7 (8636) 237-836 E-mail: 2006 |