powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определить имя принтера по умолчанию
28 сообщений из 28, показаны все 2 страниц
Определить имя принтера по умолчанию
    #38140571
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа!

Пусть в системе установлено несколько принтеров с именами P1, P2, ... , PN.

Пусть на принтере Pi стоит птичка, то есть он назначен принтером по умолчанию.

Как программным путем (причем без диалога) определить имя принтера (Pi), который назначен принтером по умолчанию,
затем осуществить печать на некоторый другой принтер, и после этого опять назначить принтером по умолчанию первоначальный (Pi) ?
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38140633
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как определить не знаю, а вернуть так
Код: sql
1.
SET PRINTER TO DEFAULT


http://msdn.microsoft.com/en-us/library/6y8f2cxk(v=vs.80).aspx] http://msdn.microsoft.com/en-us/library/6y8f2cxk(v=vs.80).aspx
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38140694
Reese
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
set('PRINTER',2)
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38140711
Reese
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если точнее то так
set('PRINTER',2) - узнать текущий
SET PRINTER TO NAME "FAX" - Установить текущим для данного приложения принтер под названием Fax
APRINTERS(la_printers ) - создать массив со списком установленных принтеров

P.S. Кстати, все это есть в хелпе
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38140858
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги!

Спасибо за помощь.
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142028
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги!

Пытаюсь воспользоваться Вашими советами.
Но возникают проблемы.

Первоначально на принтере "Microsoft Office Document Image Writer" установлена птичка - он принтер по умолчанию.
Этот факт я могу зафиксировать так:
printer_po_umolchaniu = SET("Printer",2)

Затем для нужд разрабатываемой программы пишу:
naimenovanie_pdf_printera = "Bullzip PDF Printer"
SET PRINTER TO NAME (naimenovanie_pdf_printera)

После этого птичка действительно перемещается на "Bullzip PDF Printer"
Но вернуть ее с помощью SET PRINTER TO NAME (printer_po_umolchaniu)
на "Microsoft Office Document Image Writer" у меня не получается.

В чем проблема?
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142046
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAP,

Код: sql
1.
SET PRINTER TO DEFAULT
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142054
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, птичка перемещается после выполнения фрагмента программы, который дан по адресу:

http://www.sql.ru/forum/actualthread.aspx?tid=905318&hl=bullzip

После этого птичка "залипает"
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142063
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Jonny540 !

SET PRINTER TO DEFAULT

не срабатывает!
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142092
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAPУважаемый Jonny540 !

SET PRINTER TO DEFAULT

не срабатывает!Так вытащи команду из PRINTJOB :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	PRINTJOB 
		bzSettings = CreateObject("Bullzip.PDFPrinterSettings")
		WITH bzSettings
			.RemoveSettings(.t.)
			.SetValue("Output", lcDir+lcFileName )
			.SetValue("ShowPdf","no")
			.SetValue("ShowSettings","never")
			.SetValue("ShowProgress","no")
			.SetValue("ShowProgressFinished","no")
			.WriteSettings(.t.)
		ENDWITH  

		SET PRINTER TO NAME "Bullzip PDF Printer"
		REPORT FORM borgi_Org TO PRINTER 

*		SET PRINTER TO DEFAULT   
		RELEASE bzSettings
	ENDPRINTJOB  
		SET PRINTER TO DEFAULT   


...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142110
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540 !

Нет.
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142803
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAPПростите, птичка перемещается после выполнения фрагмента программы, который дан по адресу:
http://www.sql.ru/forum/actualthread.aspx?tid=905318&hl=bullzip
После этого птичка "залипает"Уважаемый UAP !
Прикинул на досуге (ночь длинная, смена скучная ), и вот что получилось:
- "птичка перемещается" - значит ваш фрагмент поменял принтер по умолчанию в Windows. , а не только для вашего приложения.
Ессно, что команда SET PRINTER TO DEFAULT теперь ничего не изменит.
- думаю, надо теперь программно грохнуть этот принтер, убрать его вообще из системы, правда нет гарантии, что восстановится предыдущий,
если их останется больше двух. RELEASE не помогает, может REMOVE OBJECT или что-то еще?

Разбирайтесь с кодом, он не должен менять принтер по умолчанию в Windows , т.е. "птичка" не должна перемещаться.
SET PRINTER TO NAME .... устанавливает принтер "по умолчанию" для данного приложения и никак не влияет на установки винды.
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142811
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня все работает.
Код: sql
1.
2.
3.
4.
5.
set Printer to name ('Microsoft XPS Document Writer') && Переключаем
? set("Printer", 3) && Проверяем

set Printer to name (set("Printer", 2)) && Возвращаем на принтер по умолчанию
? set("Printer", 3) && Проверяем
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142824
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Так у меня тоже работает :))
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38142923
может тебе есть смысл копнуть в сторону WMI?
здесь пример работы с Win32_Printer class (Windows) из фокса...
здесь описание этого класса
здесь пример с использованием WMI для принтеров и печати винды...

в принципе, используя этот инструментарий, принтерами можно крутить как угодно, а как это все сделать применительно к фоксу, я привел в первой ссылке...
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38143022
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КонецЦикламожет тебе есть смысл копнуть в сторону WMI?
здесь пример работы с Win32_Printer class (Windows) из фокса...


По-моему, эту функцию можно использовать и без скриптов, примерно так:
loWMI = GetObject("winmgmts:" + "{impersonationLevel=impersonate}!\\.\root\cimv2")
loItems = loWMI.ExecQuery("Select * From Win32_Printer")
FOR EACH loItem in loItems
IF loItem.Attributes and 4
RETURN loItem.WorkOffLine
ENDIF
ENDFOR

И у меня сейчас нет возможности проверить:
loItems = loWMI.ExecQuery('Select * From Win32_Printer Where ' + tcNamePrinter)
FOR EACH loItem IN loItems
loItem.SetDefaultPrinter()
ENDFOR
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38145654
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAP, КонецЦикла,

Чтобы установить принтер по умолчанию в Windows, вполне достаточно трех API-функций. :)
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146454
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги!
У меня ничего не получается с возвращением принтера по умолчанию после выполнения прилагаемого фрагмента.
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146472
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые пояснения.

В середине фрагмента я запускаю в невидимом режиме Word и осуществляю из него печать на PDF принтер, который только что назначен принтером по умолчанию.

Не знаю, можно ли из Word в этом фрагменте печатать на принтер с заданным именем, чтобы не переназначать принтер по умолчанию.

Тогда проблемы с переназначением принтера можно избежать вообще.
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146479
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как мы должны были узнать что ты из ворда печатаешь?

В ворде надо менять. Ворду без разницы какие у фокса настройки принтера. Ворд сам по себе.
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146499
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET PRINTER TO NAME думаю можно вообще убрать.

Проблема в чем конкретно выражается?
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146507
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если VFP9, то это
ON ERROR
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
      err = 0
      ON ERROR  err = err + 1
         * SET PRINTER TO NAME ('"' + printer_po_umolchaniu + '"')
         * Microsoft Office Document Image Writer
         printer_po_umolchaniu = 'Microsoft Office Document Image Writer'
         printer_po_umolchaniu = '"' + UPPER(printer_po_umolchaniu) + '"'
         SET PRINTER TO NAME (printer_po_umolchaniu)
      ON ERROR


лучше как-то так писать
TRY CATCH
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
err = 0
try
         * SET PRINTER TO NAME ('"' + printer_po_umolchaniu + '"')
         * Microsoft Office Document Image Writer
         printer_po_umolchaniu = 'Microsoft Office Document Image Writer'
         printer_po_umolchaniu = '"' + UPPER(printer_po_umolchaniu) + '"'
         SET PRINTER TO NAME (printer_po_umolchaniu)
catch to oErr
    err = err + 1
endtry

...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146537
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Есть некоторые сомнения, что ворд послушается. "Ворд сам по себе." (с) :)
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146554
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Dima T!

Спасибо за внимание.

Хочу обратить ваше внимание на то, что проблема заключается ИМЕННО В ТОМ, что при входе в программу я элементарно определяю имя принтера установленного в системе по умолчанию.
Затем я создаю и выполняю задание для печати на PDF принтер из невидимого Word (ибо хочу выполнить doc -> pdf).
При этом птичка перемещается с принтера по умолчанию на принтер PDF.
А вот вернуть птичку на прежнее место не удается.

По большому счету, мне нужна полностью free программа doc -> pdf (docx -> pdf), которую можно запускать в командной строке, чтобы в конечном счете ее можно было приладить к основной программе.
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146561
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UAPКоллеги!
У меня ничего не получается с возвращением принтера по умолчанию после выполнения прилагаемого фрагмента.Попробуй так:
Код: sql
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.
* до определения PDF-принтера, получаем настройки по умолчанию
cName=SET('PRINTER',2)
qe=APRINTERS(ap)
FOR i=1 TO qe
  IF UPPER(ap(i,1))==cName
    cPort=ap(i,2)
    EXIT
  ENDIF
ENDFOR
...

* после печати на PDF-принтере, восстанавливаем принтер по умолчанию
#DEFINE HKEY_CURRENT_USER  0x80000001
#DEFINE KEY_WRITE          0x00020006
#DEFINE REG_SZ             0x00000001

DECLARE Long RegSetValueExA IN Advapi32.dll AS RegSetValueEx Long, String, Long, Long, String, Long
DECLARE Long RegOpenKeyExA IN Advapi32.dll AS RegOpenKeyEx Long, String, Long, Long, Long @
DECLARE Long RegCloseKey IN Advapi32.dll Long

nHKey = 0
nReturn = RegOpenKeyEx(HKEY_CURRENT_USER, 'Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows', 0, KEY_WRITE, @nHKey)
IF nReturn = 0
  cMyText = cName+',winspool,'+cPort
  nLenMyText = LEN(cMyText)
  nReturn = RegSetValueEx(nHKey, 'Device', 0, REG_SZ, cMyText, nLenMyText)
  RegCloseKey(nHKey)
ELSE 
  MESSAGEBOX('Error: '+STR(nReturn))
ENDIF

...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146607
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540Dima T,

Есть некоторые сомнения, что ворд послушается. "Ворд сам по себе." (с) :)
я практически уверен что ворду пофиг на внутрифоксовые настройки, поэтому менять принтер надо или внутри ворда, или глобально в настройках виндовса.
UAPПри этом птичка перемещается с принтера по умолчанию на принтер PDF.
А вот вернуть птичку на прежнее место не удается.
Правильно понимаю что это в виндовых принтерах? не в фоксе.
Если так, то это проделки ворда.
Я бы так возвращать попробовал:
Код: sql
1.
LoWord.ActivePrinter = printer_po_umolchaniu
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146638
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tя практически уверен что ворду пофиг на внутрифоксовые настройки, поэтому менять принтер
надо или внутри ворда, или глобально в настройках виндовса.[/src]Так и я про те же!
...
Рейтинг: 0 / 0
Определить имя принтера по умолчанию
    #38146654
UAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Dima T!

Вот именно эта строчка помогла:

LoWord.ActivePrinter = printer_po_umolchaniu

Это все Ворд, это проделки Ворда.

Большое спасибо за подсказку!

Уважаемые коллеги, я сейчас начну новую тему о Биндере, прошу всех принять участие в обсуждении!
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определить имя принтера по умолчанию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]