Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27,
Цитата:
там же можно подсмотреть и команды печати
Там есть это:

rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_PrintTo /pt "%1" "%2" "%3" "%4"

Судя по описанию, последние два параметра не используются, первый это путь к файлу, а второй имя принтера, которое тоже нужно узнать. Но даже указав верное имя принтера, выводится диалог сохранения в файл *.xps - Хотя при вызове этой команды из контекстного меню изображения, сразу выводится диалог мастера печати. Интересно, что там передаётся в качестве второго параметра (или может быть всё же в качестве третьего/четвёртого?).

Цитата:
имена DLL и функции у тебя есть, почему бы не попробовать?
Я попробовал с "comdlg32.dll" (PrintDlg). Но просидев пару часов с MSDN, ничего не вышло, я видимо не так первожу значения структуры, а где подставлять имя файла я вовсе не нашёл, или там только hDC поддерживается?

Код: Выделить весь код
#Include <ScreenCapture.au3>

$hwnd = WinGetHandle("")
$hDC = __ScreenCapture_Capture()
$File = "C:\Temp\fog.png"

;Строем структуру (WORD это вроде char?)
$stFilePath = DllStructCreate('dword;hwnd;int;int;hwnd;dword;char;char;char;char;char;hwnd;lparam;ptr;ptr;int;int')

;Заполняем структуру
DllStructSetData($stFilePath, 1, DllStructGetSize($stFilePath))
DllStructSetData($stFilePath, 2, $hwnd)
DllStructSetData($stFilePath, 5, $hDC)

;Пытаемся показать диалог печати, безуспешно :(
$aRet = DllCall("comdlg32.dll", "int", "PrintDlg", "ptr", DllStructGetPtr($stFilePath))
ConsoleWrite($aRet[0])

;Функция возвращает Device context захваченного изображения
Func __ScreenCapture_Capture($sFileName = "", $iLeft = 0, $iTop = 0, $iRight = -1, $iBottom = -1)
    Local $iH, $iW, $hWnd, $hDDC, $hCDC, $hBMP

    If $iRight = -1 Then $iRight = _WinAPI_GetSystemMetrics($SM_CXSCREEN)
    If $iBottom = -1 Then $iBottom = _WinAPI_GetSystemMetrics($SM_CYSCREEN)
    If $iRight < $iLeft Then Return SetError(-1, 0, 0)
    If $iBottom < $iTop Then Return SetError(-2, 0, 0)

    $iW = $iRight - $iLeft
    $iH = $iBottom - $iTop
    $hWnd = _WinAPI_GetDesktopWindow()
    $hDDC = _WinAPI_GetDC($hWnd)
    $hCDC = _WinAPI_CreateCompatibleDC($hDDC)
    $hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iW, $iH)
    _WinAPI_SelectObject($hCDC, $hBMP)
    _WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, $iLeft, $iTop, $SRCCOPY)

    _WinAPI_ReleaseDC($hWnd, $hDDC)
    _WinAPI_DeleteDC($hCDC)

    Return $hCDC
EndFunc

Цитата:
тут вроде подробней расписано
Спасибо, будем смотреть.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 17:15, 24-02-2008 | #173