Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   печать из буфера (http://forum.oszone.net/showthread.php?t=209416)

cher 19-06-2011 21:33 1697759

печать из буфера
 
есть в буфере текст.в текстовый документ его вставлять неохота/неинтересно...
как из cmd вывести на печать на принтер по умолчанию в количестве 1 копии?
так чтоб "запоминаемо" было.
длинный скрипт ниасилю :)

Iska 19-06-2011 22:19 1697786

cher, чистый текст, неформатированный?

cher 19-06-2011 22:21 1697788

Iska, да.

ferget 19-06-2011 22:27 1697795

http://soft.oszone.net/program/7092/NirCmd

и вот

http://forum.oszone.net/thread-150063.html

cher 19-06-2011 22:39 1697800

ferget, а внаглую без использования сторонних утилит и без замысловатого варианта во второй ссылке?

ferget 19-06-2011 22:46 1697805

нет в cmd инструмента для работы с буфером обмена

cher 19-06-2011 22:50 1697809

Цитата:

Цитата ferget
нет в cmd инструмента для работы с буфером обмена »

:o блин... вроде чисто интуитивно должно быть...
т.е в любом случае надо создавать txt. а это полностью снимает вопрос темы :(

-а если вставить текст в cmd? не прокатит?

ferget 20-06-2011 00:07 1697855

есть такое

echo ZZZZ > prn:

но вроде надо принтер настраивать

Iska 20-06-2011 00:39 1697870

Цитата:

Цитата ferget
нет в cmd инструмента для работы с буфером обмена »

Вроде как в Vista+ есть: «clip.exe» (в более ранних входил в состав «Resource Kit'ов»), но для помещения в буфер обмена.

Можно попробовать использовать получение содержимого буфера обмена посредством «mshta.exe»: CMD/BAT: использование mshta.exe, перенаправление во временный файл, печать и удаление временного файла. Например:
читать дальше »
Код:

@echo off
setlocal

call :TempFileName

MSHTA.EXE "javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();" 1>"%TempFileName%"
notepad.exe /p "%TempFileName%"
del "%TempFileName%"

endlocal
exit /b 0

rem ==========================================================================
rem Функция TempFileName()
rem ==========================================================================
:TempFileName
        setlocal enableextensions enabledelayedexpansion

:NextName
        set sTempFileName=%temp%\temp%random%.tmp

        if exist %sTempFileName% goto :NextName

        set sProcName=%~0

        endlocal & set %sProcName:~1%=%sTempFileName%
        exit /b 0
rem ==========================================================================


amel27 20-06-2011 06:40 1697925

Цитата:

Цитата ferget
есть такое
echo ZZZZ > prn:
но вроде надо принтер настраивать »

перенаправить локальный порт (LPT1) на сетевой принтер через NET USE

если установлен .NET
батник "компилируется" в EXE (сабж)
читать дальше »
Код:

for /f "delims=" %%a in ('dir /s/a-d/b/od "%windir%\Microsoft.NET\Framework\vbc.exe"') do set "vbc=%%a"
(echo Imports System.IO
 echo Imports System.Drawing.Printing
 echo Imports System.Runtime.InteropServices
 echo Module Test
 echo ^<StructLayout^(LayoutKind.Sequential, CharSet:=CharSet.Unicode^)^> Structure DOCINFOW
 echo ^<MarshalAs^(UnmanagedType.LPWStr^)^> Public pDocName    As String
 echo ^<MarshalAs^(UnmanagedType.LPWStr^)^> Public pOutputFile As String
 echo ^<MarshalAs^(UnmanagedType.LPWStr^)^> Public pDataType  As String
 echo End Structure
 echo ^<DllImport^("winspool.Drv",EntryPoint:="OpenPrinterW",SetLastError:=True,CharSet:=CharSet.Unicode,ExactSpelling:=True,CallingConvention:=CallingConvention.StdCall^)^> Public Function OpenPrinter^(ByVal src As String,ByRef hPrinter As IntPtr,ByVal pd As Long^) As Boolean
 echo End Function
 echo ^<DllImport^("winspool.Drv",EntryPoint:="ClosePrinter",SetLastError:=True,CharSet:=CharSet.Unicode,ExactSpelling:=True,CallingConvention:=CallingConvention.StdCall^)^> Public Function ClosePrinter^(ByVal hPrinter As IntPtr^) As Boolean
 echo End Function
 echo ^<DllImport^("winspool.Drv",EntryPoint:="StartDocPrinterW",SetLastError:=True,CharSet:=CharSet.Unicode,ExactSpelling:=True,CallingConvention:=CallingConvention.StdCall^)^> Public Function StartDocPrinter^(ByVal hPrinter As IntPtr,ByVal level As Int32,ByRef pDI As DOCINFOW^) As Boolean
 echo End Function
 echo ^<DllImport^("winspool.Drv",EntryPoint:="EndDocPrinter",SetLastError:=True,CharSet:=CharSet.Unicode,ExactSpelling:=True,CallingConvention:=CallingConvention.StdCall^)^> Public Function EndDocPrinter^(ByVal hPrinter As IntPtr^) As Boolean
 echo End Function
 echo ^<DllImport^("winspool.Drv",EntryPoint:="StartPagePrinter",SetLastError:=True,CharSet:=CharSet.Unicode,ExactSpelling:=True,CallingConvention:=CallingConvention.StdCall^)^> Public Function StartPagePrinter^(ByVal hPrinter As IntPtr^) As Boolean
 echo End Function
 echo ^<DllImport^("winspool.Drv",EntryPoint:="EndPagePrinter",SetLastError:=True,CharSet:=CharSet.Unicode,ExactSpelling:=True,CallingConvention:=CallingConvention.StdCall^)^> Public Function EndPagePrinter^(ByVal hPrinter As IntPtr^) As Boolean
 echo End Function
 echo ^<DllImport^("winspool.Drv",EntryPoint:="WritePrinter",SetLastError:=True,CharSet:=CharSet.Unicode,ExactSpelling:=True,CallingConvention:=CallingConvention.StdCall^)^> Public Function WritePrinter^(ByVal hPrinter As IntPtr,ByVal pBytes As IntPtr,ByVal dwCount As Int32,ByRef dwWritten As Int32^) As Boolean
 echo End Function
 echo Sub Main^(^)
 echo Dim ps As New System.Drawing.Printing.PrinterSettings
 echo Dim szPrinter As String = PS.PrinterName
 echo Dim szString  As String = My.Computer.Clipboard.GetText
 echo Dim dwCount As Int32 = szString.Length^(^)
 echo Dim pBytes As IntPtr = Marshal.StringToCoTaskMemAnsi^(szString^)
 echo Dim di As DOCINFOW
 echo di.pDocName="Clipboard RAW Printing"
 echo di.pDataType = "RAW"
 echo Dim hPrinter As IntPtr
 echo Dim dwWritten As Int32
 echo If OpenPrinter^(szPrinter,hPrinter,0^) Then
 echo If StartDocPrinter^(hPrinter,1,di^) Then
 echo If StartPagePrinter^(hPrinter^) Then
 echo WritePrinter^(hPrinter,pBytes,dwCount,dwWritten^)
 echo EndPagePrinter^(hPrinter^)
 echo End If
 echo EndDocPrinter^(hPrinter^)
 echo End If
 echo ClosePrinter^(hPrinter^)
 echo End If
 echo Marshal.FreeCoTaskMem^(pBytes^)
 echo End Sub
 echo End Module
)>"%~n0.tmp"
"%vbc%" "%~n0.tmp" /out:"%~n0.exe"
del "%~n0.tmp" "%~f0"& exit


источник: How to send raw data to a printer by using Visual Basic .NET


Время: 22:30.

Время: 22:30.
© OSzone.net 2001-