Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Работа с процессами Добавлено: 22.12.08 07:31  

Автор вопроса:  vbSerGanT
Привет. Может быть кто встречался с такими вопросами: Человек отправил какой нибудь файл на печать из какой нибудь программы. Надо отловить название файла, количество страниц, время и дату распечатки. И если это возможно скопировать файл в какую нибудь папку. Если файл находится в запороленном архиве попытаться его оттуда вынуть. Заранее спасибо...

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #1 Добавлено: 22.12.08 10:08
Вообще, отправляются на печать не файлы, а сформированные через StartDoc документы. А отловить можно, например, с помощью EnumJobs в цикле.


Ответить

Номер ответа: 2
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #2
Добавлено: 22.12.08 14:48
+1. смотри МСДН: http://msdn.microsoft.com/en-us/library/ms535514(VS.85).aspx

Ответить

Номер ответа: 3
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #3 Добавлено: 22.12.08 15:34
Вот, накидал такую болванку на VBNET. Для начала - сойдет.
  1.  
  2.     Private Structure SYSTEMTIME
  3.         Dim wYear As Short
  4.         Dim wMonth As Short
  5.         Dim wDayOfWeek As Short
  6.         Dim wDay As Short
  7.         Dim wHour As Short
  8.         Dim wMinute As Short
  9.         Dim wSecond As Short
  10.         Dim wMilliseconds As Short
  11.     End Structure
  12.  
  13.     Private Structure JOB_INFO_1
  14.         Dim JobId As Integer
  15.         Dim pPrinterName As Integer
  16.         Dim pMachineName As Integer
  17.         Dim pUserName As Integer
  18.         Dim pDocument As Integer
  19.         Dim pDatatype As Integer
  20.         Dim pStatus As Integer
  21.         Dim Status As Integer
  22.         Dim Priority As Integer
  23.         Dim Position As Integer
  24.         Dim TotalPages As Integer
  25.         Dim PagesPrinted As Integer
  26.         Dim Submitted As SYSTEMTIME
  27.     End Structure
  28.  
  29.     Private Structure JOB_INFO_2
  30.         Public PrinterJobId As Integer
  31.         Public pPrinterName As Integer
  32.         Public PrinterName As Integer
  33.         Public PrinterUserName As Integer
  34.         Public PrinterDocument As Integer
  35.         Public PrinterNotifyName As Integer
  36.         Public PrinterDatatype As Integer
  37.         Public PrintProcessor As Integer
  38.         Public PrinterParameters As Integer
  39.         Public PrinterDriverName As Integer
  40.         Public PrinterDevMode As Integer
  41.         Public PrinterStatus As Integer
  42.         Public PrinterSecurityDescriptor As Integer
  43.         Public pStatus As Integer
  44.         Public PrinterPriority As Integer
  45.         Public Position As Integer
  46.         Public StartTime As Integer
  47.         Public UntilTime As Integer
  48.         Public TotalPages As Integer
  49.         Public Size As Integer
  50.         Public Submitted As SYSTEMTIME
  51.         Public time As Integer
  52.         Public PagesPrinted As Integer
  53.     End Structure
  54.  
  55.  
  56.     Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" (ByVal hPrinter As IntPtr, ByVal FirstJob As Int32, ByVal NoJobs As Int32, ByVal Level As Int32, ByVal pJob As Byte(), ByVal cdBuf As Int32, ByRef pcbNeeded As Int32, ByRef pcReturned As Int32) As Long
  57.     Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, ByRef phPrinter As IntPtr, ByVal pDefault As Int32) As Long
  58.     Private Declare Function ClosePrinter Lib "winspool.drv" Alias "ClosePrinter" (ByVal hPrinter As IntPtr) As Long
  59.     Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As JOB_INFO_1, ByVal Source() As Byte, ByVal Length As Int32)
  60.  
  61.  
  62.     Private trd As New Threading.Thread(AddressOf trdproc)
  63.     Private ext As Boolean = True
  64.  
  65.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  66.         trd.Start()
  67.     End Sub
  68.     Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Disposed
  69.         ext = False
  70.     End Sub
  71.     Private Sub trdproc()
  72.         Dim defprinter As String
  73.         Do While ext
  74.             defprinter = "Microsoft Office Document Image Writer" ' TODO: EnumPrinters
  75.             ListJobs(defprinter)
  76.             trd.Sleep(10)
  77.         Loop
  78.     End Sub
  79.  
  80.  
  81.  
  82.  
  83.     Private Function ListJobs(ByVal PrinterName As String) As Boolean
  84.         Dim hPrinter As IntPtr
  85.         Dim byteneed As Int32, count As Int32
  86.         Dim pjobinfo() As Byte
  87.         Dim jinfo1() As JOB_INFO_1 ' >> EnumJobs( , , , 1, , , , )
  88.         'Dim jinfo2() As JOB_INFO_2' >> EnumJobs( , , , 2, , , , )
  89.  
  90.         If Not CBool(OpenPrinter(PrinterName, hPrinter, 0)) Then Return False
  91.  
  92.         If Not CBool(EnumJobs(hPrinter, 0, -1, 1, pjobinfo, 0, byteneed, count)) Then  ' выяснить размер pjobinfo
  93.             ClosePrinter(hPrinter)
  94.             Return False
  95.         End If
  96.  
  97.         If CBool(byteneed) Then ' есть задания печати
  98.             ReDim pjobinfo(byteneed - 1)
  99.             If Not CBool(EnumJobs(hPrinter, 0, -1, 1, pjobinfo, byteneed, byteneed, count)) Then ' заполнить pjobinfo
  100.                 ClosePrinter(hPrinter)
  101.                 Return False
  102.             End If
  103.  
  104.             ReDim jinfo1(count - 1)
  105.             Dim numbr As String
  106.             Dim docnam As String
  107.  
  108.             For i As Integer = 0 To count - 1
  109.                 CopyMemory(jinfo1(i), pjobinfo, byteneed) 'заполнить структуры заданий печати
  110.                 numbr = jinfo1(i).JobId.ToString
  111.                 docnam = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(New IntPtr(jinfo1(i).pDocument))
  112.                 'TODO: писать в лог по уникальному JobId
  113.             Next
  114.             ClosePrinter(hPrinter)
  115.         End If
  116.  
  117.     End Function

Ответить

Номер ответа: 4
Автор ответа:
 vbSerGanT



Вопросов: 6
Ответов: 22
 Профиль | | #4 Добавлено: 23.12.08 06:29
Это все хорошо, спасибо огромное. а как насчет скопировать файл

Ответить

Номер ответа: 5
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #5 Добавлено: 23.12.08 08:03
Повторить, что отправляются на печать не файлы? :)
Хотя можно реализовать сохранение в файл "предварительного просмотра" того, что было отправлено на печать.

Ответить

Номер ответа: 6
Автор ответа:
 vbSerGanT



Вопросов: 6
Ответов: 22
 Профиль | | #6 Добавлено: 24.12.08 04:50
Конкретнее можно, заранее спасибо

Ответить

Номер ответа: 7
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #7 Добавлено: 24.12.08 07:41
http://www.undocprint.org/winspool/spool_files

Ответить

Номер ответа: 8
Автор ответа:
 vbSerGanT



Вопросов: 6
Ответов: 22
 Профиль | | #8 Добавлено: 30.12.08 05:44
А примерчик возможно

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам