Автор | Сообщение |
|
| Администратор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 20.09.05 08:39. Заголовок: Когда не включен сетевой принтер
Программа перед формированием отчета опрашивает параметры принтера, и, если компьютер, к которому он подключен, еще не включен, возникает gpf Какой функцией (может из winapi) определить, что в системе нет установленных принтеров ? Даже PrnGetName() дает gpf Клиент такого не понимает и не любит, программа не работает и все тут !
|
|
|
Ответов - 13
[только новые]
|
|
|
| постоянный участник
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 20.09.05 11:20. Заголовок: Re:
Pasha, можете мне выслать исходный код функции PrnGetName(), я посмотрю его? У меня лишь FW 2.1c, а вы, как я понимаю, работаете с более поздней версией. vlad.moscow@mail.ru
|
|
|
|
| Администратор
|
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 20.09.05 14:03. Заголовок: Re:
Я посмотрел сырцы - там с 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. Это и буду анализировать Отбой, всем спасибо
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 21.09.05 18:14. Заголовок: Re:
2 Pasha: если припрёт, то могу показать код, "добывающий" название установленного принтера -- в win9x и в winnt/2k/xp необходимо пользоваться разными функциями.. оно у меня работает в "печаталке" rec3p.exe
|
|
|
|
| постоянный участник
|
Пост N: 332
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.09.07 21:42. Заголовок: Re:
_sergey пишет: цитата: | если припрёт, то могу показать код, "добывающий" название установленного принтера -- в win9x и в winnt/2k/xp необходимо пользоваться разными функциями.. оно у меня работает в "печаталке" |
| А как это реализовать на чистом хХарборе ??? Приперло !!! Дайте пожалуйста этот код .... И подскажите как получить список всех принтеров установленных на компе.
|
|
|
|
| постоянный участник
|
Пост N: 28
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.09.07 21:54. Заголовок: Re:
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. Сам я использовал первые две правда... Работают. :)
|
|
|
|
| постоянный участник
|
Пост N: 29
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.09.07 21:56. Заголовок: Re:
ЗЫ: мы, кажись, не в тему. Базар про ФайвВин.
|
|
|
|
| |
Пост N: 7327
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.04.21 15:34. Заголовок: Pasha пишет: Програ..
Pasha пишет: цитата: | Программа перед формированием отчета опрашивает параметры принтера, и, если компьютер, к которому он подключен, еще не включен, возникает gpf |
| Паша как решил вопрос ?
|
|
|
|
| Администратор
|
Пост N: 4016
Зарегистрирован: 23.05.05
|
|
Отправлено: 24.04.21 14:20. Заголовок: Это же было 16 лет н..
Это же было 16 лет назад. Сейчас посмотрел код - да, анализирую getprintdefault, и если там 0 - отрубаю средства печати
|
|
|
|
| |
Пост N: 7328
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.04.21 19:39. Заголовок: Pasha Я так понял п..
Pasha Я так понял просто её в Harbour не портировать..... Пока обошелся WIN_PRINTERSTATUS на сетевом принтере если сеть не доступна или сам принтер , то выдает 33554432 А вот на локальном всегда НОЛЬ даже если он выключен :) Печаль
|
|
|
|
| Администратор
|
Пост N: 4017
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.04.21 08:05. Заголовок: Можно сделать такой ..
Можно сделать такой аналог: #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( "" ); } Правда выключенный локальный принтер так тоже не ловится. Но задача меня была другая - ловить ситуацию, когда принтера по умолчанию нет. А если принтер выключен, но его параметры опрашиваются и задание на печать формируется - то все ok
|
|
|
|
| |
Пост N: 7331
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.04.21 11:54. Заголовок: Pasha Попробую спас..
Pasha Попробую спасибо
|
|
|
|
|
| постоянный участник
|
Пост N: 1659
Зарегистрирован: 09.10.06
|
|
Отправлено: 28.04.21 19:39. Заголовок: Dima пишет: Я так п..
Dima пишет: цитата: | Я так понял просто её в Harbour не портировать..... |
| А win_PrinterGetDefault() из hbwin не подходит?
|
|
|
|
| |
Пост N: 7332
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.04.21 19:51. Заголовок: Петр пишет: А win_P..
Петр пишет: цитата: | А win_PrinterGetDefault() из hbwin не подходит? |
| Подходит , в качестве определения дефолтного принтера. Паша выложил в принципе тоже самое. Речь шла о готовности принтера.......
|
|
|
|