|
|
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
Подскажите, как можно при старте программы автоматически, без вызова диалоговых окон, у принтера "по умолчанию" установить (изменить) необходимый формат бумаги и лоток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 11:01:40 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
См. объект Printer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 11:41:15 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
Наверное мой вопрос немного некорректен. Мне необходимо, чтобы у "принтера по умолчанию" реально изменялся формат бумаги. Т.е, чтобы после завершения работы программы на принтере был установлен заданный формат. Да, программа работает под Win 2000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 16:36:01 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
В таком случае пошарь в реестре на предмет ключей, в которых хранятся настройки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2005, 17:09:33 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
Совет насчет "пошарить в реестре" неудачен. Все настройки принтера хронятся в глобальной бинарной структуре DEVMODE. Шарить в ней - гиблое дело. Сам хотел бы найти способ. С DEVMODE работает функция PrintDlg. Попробуй освоить, может что и выйдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2005, 21:21:31 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
Самое веселое, что я "шарюсь" в реестре по настоящее время с нулевым результатом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2005, 22:06:37 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
2 kLeon: То есть содержимое DEVMODE содержится в реестре в формате DWORD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2005, 12:39:56 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
Переменная DevMode представляет собой структуру объемом 1172 байта (по крайней мере в моем реестре). При этом у некоторых принтеров эта переменная отсутствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 09:59:11 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
большинство принтеров позволяют выставлять размер бумаги непосредственно только перед печатью через соответствующий диалог настроек драйвера принтера, который может быть вызван, как было указано ранее, через вызов API PrintDlg с использованием DEVMODE И эта настройка будет активно, как правило, в течении работы программы, которая вызвала данный диалог. Не всегда можно установить настройки ориентации страницы для дефолтного принтера для всей системы вцелом. См. документацию по своему принтеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 12:47:40 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
Вот простая тестовая программулька для установки размера бумаги дефолтного принтера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2005, 13:02:16 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
Выполнение функции CopyMemory pInfo, printerinfo_data(0), Len(pInfo) приводит к ошибке "Out of memory". Похоже из-за значения printerinfo_data(0). По описанию это переменная Sourse объявленной функции. Вообще-то идеология понятна. Далее попробую вытащить DevMode или функцией PrintDlg или с помощью объекта Printer. Кстати, передача параметра по значению (ByVal) функции CopyMemory также вызывает ошибку, нужно использовать ByRef (или вообще не указывать, так как ByRef принимается по умолчанию). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 00:43:36 |
|
||
|
Изменение настроек принтера "по умолчанию"
|
|||
|---|---|---|---|
|
#18+
Я тоже "уперся" в CopyMemory. И хотя в конце концов она заработала, настройки принтера "по умолчанию" не изменились. Интересно, что не так сделал? Так как у меня на всех компьютерах только WIN 2000, поэтому я сделал следующее. Информация о принтере по умолчанию хранится в реестре в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows в переменной Device. Настройки всех принтеров хранятся в разделах HKEY_CURRENT_USER\Printers\DevModePerUser (для локальных) и в HKEY_CURRENT_USER\Printers\Connections\.... (для сетевых). В первом случае имя переменной с настройками совпадает с именем Devic'а, а во втором имеет название "DevMode". Структура этой переменной (REG_BINARY) такая же как и Private Type DEVMODE dmDeviceName As String dmSpecVersion As Integer dmDriverVersion As Integer dmSize As Integer dmDriverExtra As Integer dmFields As Long dmOrientation As Integer dmPaperSize As Integer dmPaperLength As Integer dmPaperWidth As Integer dmScale As Integer dmCopies As Integer dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer dmDuplex As Integer dmYResolution As Integer dmTTOption As Integer dmCollate As Integer dmFormName As String * CCHFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Integer dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type, по крайней мере у меня :) Таким образом необходимый мне параметр - формат и лоток числятся на позициях 79-80 и 89-90. После замены этих параметров "загоняю их" обратно в реестр. После этого все "перегружаем" функцией SendMessage. В общем все работает. Текст программы (прошу прощение за небрежность) приблизительно следующий (без "перегрузки" после изменения реестра) Const HKEY_CURRENT_USER = &H80000001 Const KEY_ALL_ACCESS = &H3F Const REG_SZ = 1 Const REG_BINARY = 3 Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _ Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _ ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" _ Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _ ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, _ ByVal cbData As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32.dll" _ Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _ ByVal lpReserved As Long, lpType As Long, lpData As Any, _ LpcbData As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" _ (ByVal hKey As Long) As Long Function GetRegString(hKey As Long, strSubKey As String, _ strValueName As String) As String Dim strSetting As String Dim lngDataLen As Long Dim hSubKey As Long If RegOpenKeyEx(hKey, strSubKey, 0, KEY_ALL_ACCESS, hSubKey) = 0 Then strSetting = Space(1180) lngDataLen = Len(strSetting) If RegQueryValueEx(hSubKey, strValueName, ByVal 0, _ REG_BINARY, ByVal strSetting, lngDataLen) = 0 Then If lngDataLen > 1 Then GetRegString = Left(strSetting, lngDataLen) End If End If RegCloseKey hSubKey End If End Function Public Sub SetRegString(hKey As Long, strSubKey As String, _ ByVal strValueName As String, strSetting As String, Reg As Long) Dim hNewHandle As Long Dim lpdwDisposition As Long If RegOpenKeyEx(hKey, strSubKey, 0, KEY_ALL_ACCESS, hSubKey) = 0 Then If RegSetValueEx(hSubKey, strValueName, 0, Reg, _ ByVal strSetting, Len(strSetting)) <> 0 Then "....." End If Else "......" End If RegCloseKey hNewHandle End Sub Sub Main() Dim a As String Dim Razdel As String Dim NameParametr As String ' определяем принтер по умолчанию (сетевой или локальный) If Mid(PrinterName, 1, 1) = "\" Then Razdel = "Printers\Connections\" + Replace(PrinterName, "\", ",", 1) NameParametr = "DevMode" Else Razdel = "Printers\DevModePerUser" NameParametr = PrinterName End If 'считываем настройки принтера a = GetRegString(HKEY_CURRENT_USER, Razdel, NameParametr, REG_BINARY) ' длина переменной настроек у меня 1172 байта ' устанавливаем необходимые параметры (коды форматов для каждого принтера свои) If Format = "A4" Then a = Mid(a, 1, 78) + Chr(KodA4) + Mid(a, 80, 1093) If Format = "A6" Then a = Mid(a, 1, 78) + Chr(KodA6) + Mid(a, 80, 1093) ' и т.д. можно менять и другие параметры SetRegString HKEY_CURRENT_USER, Razdel, NameParametr, a, REG_BINARY ' Дальше SendMessage (если надо, конечно :)) ) End Sub Большое спасибо всем оветившим за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 15:14:59 |
|
||
|
|

start [/forum/topic.php?fid=60&gotonew=1&tid=2167907]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
11ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 373ms |

| 0 / 0 |
