Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определить имя принтера по умолчанию / 25 сообщений из 28, страница 1 из 2
06.02.2013, 17:58
    #38140571
UAP
UAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить имя принтера по умолчанию
Господа!

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

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

Как программным путем (причем без диалога) определить имя принтера (Pi), который назначен принтером по умолчанию,
затем осуществить печать на некоторый другой принтер, и после этого опять назначить принтером по умолчанию первоначальный (Pi) ?
...
Рейтинг: 0 / 0
06.02.2013, 18:38
    #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
06.02.2013, 19:26
    #38140694
Reese
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить имя принтера по умолчанию
set('PRINTER',2)
...
Рейтинг: 0 / 0
06.02.2013, 19:39
    #38140711
Reese
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить имя принтера по умолчанию
А если точнее то так
set('PRINTER',2) - узнать текущий
SET PRINTER TO NAME "FAX" - Установить текущим для данного приложения принтер под названием Fax
APRINTERS(la_printers ) - создать массив со списком установленных принтеров

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

Спасибо за помощь.
...
Рейтинг: 0 / 0
07.02.2013, 16:20
    #38142028
UAP
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
07.02.2013, 16:28
    #38142046
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить имя принтера по умолчанию
UAP,

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

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

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

SET PRINTER TO DEFAULT

не срабатывает!
...
Рейтинг: 0 / 0
07.02.2013, 16:44
    #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
07.02.2013, 16:49
    #38142110
UAP
UAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить имя принтера по умолчанию
Jonny540 !

Нет.
...
Рейтинг: 0 / 0
08.02.2013, 07:50
    #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
08.02.2013, 08:02
    #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
08.02.2013, 08:33
    #38142824
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить имя принтера по умолчанию
Dima T,

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

в принципе, используя этот инструментарий, принтерами можно крутить как угодно, а как это все сделать применительно к фоксу, я привел в первой ссылке...
...
Рейтинг: 0 / 0
08.02.2013, 11:16
    #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
11.02.2013, 11:17
    #38145654
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить имя принтера по умолчанию
UAP, КонецЦикла,

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

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

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

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

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

Проблема в чем конкретно выражается?
...
Рейтинг: 0 / 0
11.02.2013, 17:13
    #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
11.02.2013, 17:26
    #38146537
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить имя принтера по умолчанию
Dima T,

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

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

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

По большому счету, мне нужна полностью free программа doc -> pdf (docx -> pdf), которую можно запускать в командной строке, чтобы в конечном счете ее можно было приладить к основной программе.
...
Рейтинг: 0 / 0
11.02.2013, 17:38
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определить имя принтера по умолчанию / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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