1 / 1 / 0
Регистрация: 10.03.2020
Сообщений: 56
1

WinAPI: получение DC принтера

21.03.2020, 18:23. Показов 792. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!
Мне надо распечатать документ на принтере с помощью api функций. Проблема в том, что когда я создаю DC, то мой дебаггер вылетает из программы с исключением после выполнения функции CreateDC.
НО если я меняю "WINSPOOL" на "DISPLAY", то функция отрабатывает нормально, но после выполнения функции StartPage получается ошибка INVALID_HANDLER. В чем может быть дело? Вроде, всё по msdn инструкции делаю..
Спасибо!
Assembler
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
32
33
34
35
36
37
.386
.model flat,stdcall
 
include ..\INCLUDE\kernel32.inc
include ..\INCLUDE\user32.inc
include ..\INCLUDE\masm32rt.inc
include ..\INCLUDE\avicap32.inc
include ..\INCLUDE\winspool.inc
 
includelib ..\LIB\kernel32.lib
includelib ..\LIB\user32.lib
includelib ..\LIB\avicap32.lib
includelib ..\LIB\vfw32.lib
includelib ..\LIB\winspool.lib
 
.data
buf dd 128 dup(?)
file1 db "AAAA.bmp",0
winsp db "WINSPOOL",0
Docinfo DOCINFO <sizeof DOCINFOA, file1, NULL, NULL, 0>
devm DEVMODE <>
 
printerName db "HP Ink Tank Wireless 410 series",0
hPrinter dd ?
.code
start:
 
invoke CreateDC, ADDR winsp, ADDR printerName, NULL, NULL
mov ebx, eax
invoke StartDoc, ebx, ADDR Docinfo
;invoke StartPage, ebx
;invoke EndPage, ebx
invoke EndDoc, ebx
invoke DeleteDC, ebx
 
invoke ExitProcess,0
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2020, 18:23
Ответы с готовыми решениями:

WinApi C++ не знаю, как подключить контекст принтера
Не знаю, как подключить контекст принтера. Использую Visual Studio 2008. Нужно подключить...

Получение информации о выделенном элементе TreeView WinAPI
Доброго времени суток; Не могу получить структуру из поля lParam структуры TV_ITEM; Делаю...

Получение WinAPI сообщения для экрана блокировки системы и диспетчера задач в Win 8
Доброе время суток всем. Поискал по форуму подобный вопрос, и похоже что нужного ответа не нашел....

Получение состояние принтера
Доброго времени суток. Возникла небольшая проблема связанная как обычно с недостатком практики....

1
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,121
Записей в блоге: 12
22.03.2020, 15:13 2
Зачем плодить темы об одном и том же?
Есть же про принтер уже ваша же тема: Как получить дескриптор принтера?

Цитата Сообщение от klaustrofob Посмотреть сообщение
если я меняю "WINSPOOL" на "DISPLAY", то функция отрабатывает нормально
Цитата Сообщение от klaustrofob Посмотреть сообщение
Вроде, всё по msdn инструкции делаю..
Вроде?

pwszDriver

A pointer to a null-terminated character string that specifies either DISPLAY or the name of a specific display device. For printing, we recommend that you pass NULL to lpszDriver because GDI ignores lpszDriver for printer devices.
Откуда вообще этот WINSPOOL взялся?

pwszDevice

A pointer to a null-terminated character string that specifies the name of the specific output device being used, as shown by the Print Manager (for example, Epson FX-80). It is not the printer model name. The lpszDevice parameter must be used.

To obtain valid names for displays, call EnumDisplayDevices.

If lpszDriver is DISPLAY or the device name of a specific display device, then lpszDevice must be NULL or that same device name. If lpszDevice is NULL, then a DC is created for the primary display device.
Можно попробовать указать NULL в обоих местах. Если не получится, то EnumDisplayDevices...

Вообще, хорошей практикой является проверка результатов работы функций и проверка GetLastError в случае ошибки (правда, здесь MSDN про неё ничего не пишет).
Вы знаете, что возвращает CreateDC? Может, NULL? А StartDoс?
0
22.03.2020, 15:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2020, 15:13
Помогаю со студенческими работами здесь

Получение mac адреса принтера
Доброго времени суток, форумчане! Есть задача получить mac-адрес принтера подключенного к ПК....

Получение Access Tokens в C# (WinAPI)
Здравствуйте! В качестве тестового задания мне нужно получить права пользователей и групп (Access...

Получение системного времени посредством WinAPI
Не удаётся вывести на консоль системное время. В функции WinAPI возникает ошибка: illegal...

Получение дескриптора окна не используя WinApi
Здравствуйте форумчани. Возникла казалось бы элементарная задача. Получить дескриптор окна зная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru