Форум » FiveWin » Когда не включен сетевой принтер » Ответить

Когда не включен сетевой принтер

Pasha: Программа перед формированием отчета опрашивает параметры принтера, и, если компьютер, к которому он подключен, еще не включен, возникает gpf Какой функцией (может из winapi) определить, что в системе нет установленных принтеров ? Даже PrnGetName() дает gpf Клиент такого не понимает и не любит, программа не работает и все тут !

Ответов - 13

Григорьев Владимир: Pasha, можете мне выслать исходный код функции PrnGetName(), я посмотрю его? У меня лишь FW 2.1c, а вы, как я понимаю, работаете с более поздней версией. vlad.moscow@mail.ru

Pasha: Я посмотрел сырцы - там с 2.1 ничего не менялось Вот текст: CLIPPER PRNGETNAME( PARAMS ) // () --> cPrinter { LPDEVNAMES lpDevNames; PrinterInit(); lpDevNames = (LPDEVNAMES) GlobalLock( pd.hDevNames ); _retc( ( LPSTR ) lpDevNames + lpDevNames->wDeviceOffset ); GlobalUnlock( pd.hDevNames ); } и PrinterInit: static void PrinterInit( void ) { if( ! bInit ) { bInit = TRUE; _bset( ( char * ) &pd, 0, sizeof( PRINTDLG ) ); pd.lStructSize = sizeof( PRINTDLG ); pd.hwndOwner = GetActiveWindow(); pd.Flags = PD_RETURNDEFAULT ; pd.nMinPage = 1; pd.nMaxPage = 65535; PrintDlg( &pd ); } } а pd - это static - структура static far PRINTDLG pd; static far BOOL bInit = FALSE; Я уже нашел функцию: GetPrintDefault(), которая, если принтер выключен, возвращает 0. Это и буду анализировать Отбой, всем спасибо

_sergey: 2 Pasha: если припрёт, то могу показать код, "добывающий" название установленного принтера -- в win9x и в winnt/2k/xp необходимо пользоваться разными функциями.. оно у меня работает в "печаталке" rec3p.exe


Andrey: _sergey пишет: если припрёт, то могу показать код, "добывающий" название установленного принтера -- в win9x и в winnt/2k/xp необходимо пользоваться разными функциями.. оно у меня работает в "печаталке" А как это реализовать на чистом хХарборе ??? Приперло !!! Дайте пожалуйста этот код .... И подскажите как получить список всех принтеров установленных на компе.

PSP: Andrey пишет: А как это реализовать на чистом хХарборе ??? И подскажите как получить список всех принтеров установленных на компе. GetDefaultPrinter() Retrieves the name of a computer's default printer. GetPrinters() Retrieves information about available printers. PrinterExists() Checks if a particular printer is installed. PrinterPortToName() Retrieves the name of the printer connected to a printer port. PrintFileRaw() Prints a file to a Windows printer in RAW mode. Сам я использовал первые две правда... Работают. :)

PSP: ЗЫ: мы, кажись, не в тему. Базар про ФайвВин.

Dima: Pasha пишет: Программа перед формированием отчета опрашивает параметры принтера, и, если компьютер, к которому он подключен, еще не включен, возникает gpf Паша как решил вопрос ?

Pasha: Это же было 16 лет назад. Сейчас посмотрел код - да, анализирую getprintdefault, и если там 0 - отрубаю средства печати

Dima: Pasha Я так понял просто её в Harbour не портировать..... Пока обошелся WIN_PRINTERSTATUS на сетевом принтере если сеть не доступна или сам принтер , то выдает 33554432 А вот на локальном всегда НОЛЬ даже если он выключен :) Печаль

Pasha: Можно сделать такой аналог: [pre]#include "hbapi.h" #include <Windows.h> HB_FUNC( PRNDEFAULTNAME ) { PRINTDLG pd; LPDEVNAMES lpDevNames; LPDEVMODE lpDevMode; memset( ( char * ) &pd, 0, sizeof( PRINTDLG ) ); pd.lStructSize = sizeof( PRINTDLG ); pd.hwndOwner = GetActiveWindow(); pd.Flags = PD_RETURNDEFAULT ; pd.nMinPage = 1; pd.nMaxPage = 65535; PrintDlg( &pd ); if( pd.hDevNames ) { lpDevNames = (LPDEVNAMES) GlobalLock( pd.hDevNames ); hb_retc( ( LPSTR ) lpDevNames + lpDevNames->wDeviceOffset ); GlobalUnlock( pd.hDevNames ); } else hb_retc( "" ); } [/pre] Правда выключенный локальный принтер так тоже не ловится. Но задача меня была другая - ловить ситуацию, когда принтера по умолчанию нет. А если принтер выключен, но его параметры опрашиваются и задание на печать формируется - то все ok

Dima: Pasha Попробую спасибо

Петр: Dima пишет: Я так понял просто её в Harbour не портировать..... А win_PrinterGetDefault() из hbwin не подходит?

Dima: Петр пишет: А win_PrinterGetDefault() из hbwin не подходит? Подходит , в качестве определения дефолтного принтера. Паша выложил в принципе тоже самое. Речь шла о готовности принтера.......



полная версия страницы