Можно ли как-то понять, что возвращает API запущенная через rundll32.exe? - VB
Формулировка задачи:
Задача - печать файла (пусть будет картинка "C:\path\mypict.tif") на заданный принтер "MyPrinterName".
Решение #1. Метод "printto". Реализация:
Метод имеет недостатки. В реестре может не оказаться ключа
HKEY_CLASSES_ROOT\TIFImage.Document\shell\printto\command
И на 8-ке/8.1 в 99 случаев из 100 печать не сработает.
Но shimgvw.dll есть везде и всегда, поэтому правильнее
Print an image using ShellExecute (CSShellPrintImageWithShellExecute)
Косвенно: делаю проверку на GDI-совместимость.
Но иконки (ico) например на GDI проходят, а на XP ImageView_PrintTo их не печатает. Т.е. такая проверка замороченная и не точная.
Пытался вызывать ImageView_PrintTo декларируя ее как обычную API -должна же она что-то возвращать - ничего не получается-не работает, только через rundll32.exe.
Т.е. printto не надежен в плане гарантии печати (но ошибку в случае не печати ShellExecute возвращает четко).
А здесь печатает четко (то что должен печатать), но не возвращает результат (где гарантия что в ф-цию не подсунут текстовуху переименованную в jpg).
Как выкручиваться?
Решение #1. Метод "printto". Реализация:
Метод имеет недостатки. В реестре может не оказаться ключа
HKEY_CLASSES_ROOT\TIFImage.Document\shell\printto\command
И на 8-ке/8.1 в 99 случаев из 100 печать не сработает.
Но shimgvw.dll есть везде и всегда, поэтому правильнее
Print an image using ShellExecute (CSShellPrintImageWithShellExecute)
Решение #2. использовать shimgvw.dll в лоб
:Проблема. ret всегда больше 32, даже если печать не удалась.
А мне надо знать результат НАПЕЧАТАЛИ УСПЕШНО либо ОШИБКА. Как узнать?
Косвенно: делаю проверку на GDI-совместимость.
Но иконки (ico) например на GDI проходят, а на XP ImageView_PrintTo их не печатает. Т.е. такая проверка замороченная и не точная.
Пытался вызывать ImageView_PrintTo декларируя ее как обычную API -должна же она что-то возвращать - ничего не получается-не работает, только через rundll32.exe.
Т.е. printto не надежен в плане гарантии печати (но ошибку в случае не печати ShellExecute возвращает четко).
А здесь печатает четко (то что должен печатать), но не возвращает результат (где гарантия что в ф-цию не подсунут текстовуху переименованную в jpg).
Как выкручиваться?
Решение задачи: «Можно ли как-то понять, что возвращает API запущенная через rundll32.exe?»
textual
Листинг программы
Public Declare Function ImageView_PrintTo Lib "shimgvw.dll" Alias "ImageView_PrintToA" _ (ByVal hwnd As Long, ByVal hinst As Long, ByVal lpszCmdLine As String, ByVal nCmdShow As Long) As Long ImageView_PrintTo 0, 0, "/pt " & Chr(34) & "C:\path\mypict.tif" & Chr(34) & " " & Chr(34) & "MyPrinterName" & Chr(34), 0
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д