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
Цитата:
тут вроде подробней расписано
|
Спасибо, будем смотреть.