From: Steve Tuckner Date: 2003-07-08T07:15:49+09:00 Subject: [WIN32OLE]: Using Events This is a multi-part message in MIME format. ------=_NextPart_000_0318_01C344AB.6131DCE0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hello all, I am trying to use Win32OLE to control a windows printer driver that will be used to capture the printer output from applications to create TIFF files. Below is my long winded explanation of what I am trying to do. Any ideas at all would be welcome. Thanks, Steve Tuckner Using the nifty Simple OLE browser from the WIN32OLE web page, I was able to learn that this driver has three "interfaces" to play with. They are: BiPrnDrv Abort AboutBox EndDoc --------------------------- (what EndDoc output looks like) Class BiPrnDrv GUID : {E5B71FF3-4946-4DCC-863E-F16B8F864A66} PROGID : BIPRNDRV.BiPrnDrvCtrl.1 DESCRIPTION : Black Ice Message Capture Control Event FUNC VOID EndDoc Dispatch ID : 3 DESCRIPTION : arg1 - BSTR GroupFileName [] Event Interface : _DBiPrnDrvEvents ----------------------------- InitCapture StarDoc StartPage _DBiPrnDrv AboutBox GetIDsOfNames GetTypeInfo GetTypeInfoCount InitCapture Invoke PrinterName ----------------------------- (What PrinterName entry looks like) Dispatch _DBiPrnDrv GUID : {8FE2BEA5-0F7F-4758-B6A4-68F86C74AA2D} PROGID : DESCRIPTION : Dispatch interface for BiPrnDrv Control DISPATCH BSTR PrinterName ----------------------------- UseCopyData _DBiPrnDrvEvents Abort EndDoc ----------------------------- (What EndDoc looks like) Dispatch _DBiPrnDrvEvents GUID : {68E14ECB-14D9-4C9D-9470-C05348FED4CC} PROGID : DESCRIPTION : Event interface for BiPrnDrv Control FUNC VOID EndDoc Dispatch ID : 3 DESCRIPTION : arg1 - BSTR GroupFileName [] ----------------------------- EndPage GetIDsOfNames GetTypeInfo GetTypeInfoCount Invoke StartDoc StartPage Below is my code to try and get the printing events to be noticed by me. They have very little doc (the vendor I got it from on the interface, but do have sample code in VB and Delphi. Even so I have not be able to get it to work. I can get the AboutBox to come up so that much works. Below is my Ruby code and below that is the example VB code. I don't know much about OLE but I have done some scripting of Outlook. I am completely new to OLE events. Any ideas at all would be welcome on where I should go from here (aside from talking to the vendor I acquired this driver from who has probably never heard of Ruby before). I also tried setting the printer name but that seemed to have no effect. I don't understand the difference between the first two interfaces or how it was even possible to set the PrinterName against the first interface when it is part of the second. ----------------------------------------------------------------------- (My ruby code) require "win32ole" printer = WIN32OLE.new("BIPRNDRV.BiPrnDrvCtrl.1") ev = WIN32OLE_EVENT.new(printer, "_DBiPrnDrvEvents") ev.on_event {|*args| print "default handler\n"} ev.on_event("StartDoc") { print "in start doc\n"} ev.on_event("StartPage") {|page_num| print "printing page #{page_num}\n"} ev.on_event("EndDoc") { print "in end doc\n"} ev.on_event("EndPage") { print "in end page\n"} while true WIN32OLE_EVENT.message_loop end ----------------------------------------------------------------------- (VB sample code) VERSION 5.00 Object = "{6ADA10EC-D372-4FE7-863C-BA84E3B89F76}#1.0#0"; "BIPRNDRV.OCX" Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX" Begin VB.Form Form1 BorderStyle = 3 'Fixed Dialog Caption = "Message capture sample" ClientHeight = 3195 ClientLeft = 45 ClientTop = 330 ClientWidth = 4680 Icon = "BiCapture.frx":0000 LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 3195 ScaleWidth = 4680 ShowInTaskbar = 0 'False StartUpPosition = 3 'Windows Default Begin VB.CommandButton Exit Cancel = -1 'True Caption = "E&xit" Height = 375 Left = 1320 TabIndex = 5 Top = 2640 Width = 1815 End Begin VB.ListBox List1 Height = 1425 ItemData = "BiCapture.frx":030A Left = 120 List = "BiCapture.frx":030C TabIndex = 4 Top = 960 Width = 4455 End Begin MSComDlg.CommonDialog CommonDialog1 Left = 120 Top = 2640 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.Frame Frame1 Caption = "Current Printer" Height = 735 Left = 120 TabIndex = 1 Top = 120 Width = 4455 Begin VB.CommandButton ChangePrinter Caption = "Change Printer" Height = 375 Left = 3000 TabIndex = 2 Top = 240 Width = 1215 End Begin VB.Label CurrentPrinter Height = 255 Left = 240 TabIndex = 3 Top = 360 Width = 2535 End End Begin BIPRNDRVLib.BiPrnDrv BiPrnDrv1 Height = 615 Left = 3960 TabIndex = 0 Top = 2520 Width = 615 _Version = 65536 _ExtentX = 1085 _ExtentY = 1085 _StockProps = 0 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub BiPrnDrv1_EndDoc(ByVal GroupFileName As String) List1.AddItem "EndDoc message was received." List1.AddItem "The Group File is: " & GroupFileName List1.TopIndex = List1.ListCount - 1 End Sub Private Sub BiPrnDrv1_EndPage(ByVal ImageFileName As String) List1.AddItem "EndPage message was received." List1.AddItem "The Image File is:" & ImageFileName List1.TopIndex = List1.ListCount - 1 End Sub Private Sub BiPrnDrv1_StarDoc(ByVal GroupFileName As String) List1.AddItem "StartDoc message was received." List1.AddItem "The Group File is: " & GroupFileName List1.TopIndex = List1.ListCount - 1 End Sub Private Sub BiPrnDrv1_StartPage(ByVal PageNumber As Long) List1.AddItem "StartPage message was received." List1.AddItem "The current page number is: " & Str(PageNumber) List1.TopIndex = List1.ListCount - 1 End Sub Private Sub ChangePrinter_Click() CommonDialog1.ShowPrinter BiPrnDrv1.PrinterName = Printer.DeviceName CurrentPrinter.Caption = Printer.DeviceName List1.AddItem "Please print with the " & BiPrnDrv1.PrinterName & " printer." End Sub Private Sub Exit_Click() Unload Form1 End Sub Private Sub Form_Load() BiPrnDrv1.PrinterName = "Black Ice Color" CurrentPrinter.Caption = "Black Ice Color" List1.AddItem "Please print with the " & BiPrnDrv1.PrinterName & " printer." End Sub ------=_NextPart_000_0318_01C344AB.6131DCE0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hello = all,
 
I am = trying to use=20 Win32OLE to control a windows printer driver that will be used to = capture the=20 printer output from applications to create TIFF files. Below is my long = winded=20 explanation of what I am trying to do. Any ideas at all would be=20 welcome.
 
Thanks,
 
Steve = Tuckner
 
 
Using = the nifty=20 Simple OLE browser from the WIN32OLE web page, I was able to learn that = this=20 driver has three "interfaces" to play with.
 
They=20 are:
 
BiPrnDrv
  =20 Abort
  =20 AboutBox
  =20 EndDoc
--------------------------- (what EndDoc output looks=20 like)
Class =20 BiPrnDrv
  GUID : = {E5B71FF3-4946-4DCC-863E-F16B8F864A66}
 =20 PROGID : BIPRNDRV.BiPrnDrvCtrl.1
  DESCRIPTION : Black Ice = Message=20 Capture Control
 
Event = FUNC VOID=20 EndDoc
  Dispatch ID : 3
  DESCRIPTION :
  = arg1 - BSTR=20 GroupFileName []
 
  Event=20 Interface :=20 _DBiPrnDrvEvents
-----------------------------
  =20 InitCapture
  =20 StarDoc
   StartPage
_DBiPrnDrv
  =20 AboutBox
   GetIDsOfNames
  =20 GetTypeInfo
  =20 GetTypeInfoCount
  =20 InitCapture
  =20 Invoke
  =20 PrinterName
----------------------------- (What PrinterName entry looks=20 like)
Dispatch =20 _DBiPrnDrv
  GUID : = {8FE2BEA5-0F7F-4758-B6A4-68F86C74AA2D}
 =20 PROGID :
  DESCRIPTION : Dispatch interface for BiPrnDrv=20 Control
 

  DISPATCH BSTR PrinterName
-----------------------------
  =20 UseCopyData
_DBiPrnDrvEvents
  =20 Abort
  =20 EndDoc
----------------------------- (What EndDoc looks=20 like)
Dispatch =20 _DBiPrnDrvEvents
  GUID :=20 {68E14ECB-14D9-4C9D-9470-C05348FED4CC}
  PROGID :
  = DESCRIPTION=20 : Event interface for BiPrnDrv Control
 
FUNC = VOID=20 EndDoc
  Dispatch ID : 3
  DESCRIPTION :
  = arg1 - BSTR=20 GroupFileName []
-----------------------------
  =20 EndPage
   GetIDsOfNames
  =20 GetTypeInfo
  =20 GetTypeInfoCount
   Invoke
  =20 StartDoc
  =20 StartPage
 
 
Below = is my code to=20 try and get the printing events to be noticed by me.  They have = very little=20 doc (the vendor I got it from on the interface, but do have sample code = in VB=20 and Delphi. Even so I have not be able to get it to work. I can get the = AboutBox=20 to come up so that much works. Below is my Ruby code and below that is = the=20 example VB code. I don't know much about OLE but I have done some = scripting of=20 Outlook. I am completely new to OLE events. Any ideas at all would be = welcome on=20 where I should go from here (aside from talking to the vendor I = acquired this=20 driver from who has probably never heard of Ruby before). I also tried = setting=20 the printer name but that seemed to have no effect. I don't understand = the=20 difference between the first two interfaces or how it was even possible = to set=20 the PrinterName against the first interface when it is part of the=20 second.
 
---------------------------------------------------------------= --------=20 (My ruby code)
require=20 "win32ole"
 
printer =3D=20 WIN32OLE.new("BIPRNDRV.BiPrnDrvCtrl.1")
ev = =3D=20 WIN32OLE_EVENT.new(printer, "_DBiPrnDrvEvents")
ev.on_event {|*args| = print=20 "default handler\n"}
ev.on_event("StartDoc") { print "in start=20 doc\n"}
ev.on_event("StartPage") {|page_num| print "printing page=20 #{page_num}\n"}
ev.on_event("EndDoc") { print "in end=20 doc\n"}
ev.on_event("EndPage") { print "in end = page\n"}
 
while = true
 =20 WIN32OLE_EVENT.message_loop
end
 
---------------------------------------------------------------= --------=20 (VB sample code)
 
VERSION=20 5.00
Object =3D "{6ADA10EC-D372-4FE7-863C-BA84E3B89F76}#1.0#0";=20 "BIPRNDRV.OCX"
Object =3D = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0";=20 "COMDLG32.OCX"
Begin VB.Form Form1
  =20 BorderStyle     =3D   3  'Fixed=20 Dialog
   = Caption        =20 =3D   "Message capture sample"
  =20 ClientHeight    =3D   3195
  =20 ClientLeft      =3D   = 45
  =20 ClientTop       =3D   = 330
  =20 ClientWidth     =3D   = 4680
  =20 Icon           =20 =3D   "BiCapture.frx":0000
  =20 LinkTopic       =3D  =20 "Form1"
   MaxButton      =20 =3D   0   'False
  =20 MinButton       =3D   = 0  =20 'False
   ScaleHeight     = =3D  =20 3195
   ScaleWidth      = =3D  =20 4680
   ShowInTaskbar   =3D   = 0  =20 'False
   StartUpPosition =3D   3  'Windows = Default
   Begin VB.CommandButton Exit=20
     =20 Cancel          = =3D  =20 -1  'True
     =20 Caption         =3D   = "E&xit"
     =20 Height          = =3D  =20 375
     =20 Left           =20 =3D   1320
     =20 TabIndex        =3D  =20 5
     =20 Top           &nb= sp;=20 =3D   2640
     =20 Width           = =3D  =20 1815
   End
   Begin VB.ListBox List1=20
     =20 Height          = =3D  =20 1425
     =20 ItemData        =3D  =20 "BiCapture.frx":030A
     =20 Left           =20 =3D   120
     =20 List           =20 =3D   "BiCapture.frx":030C
     =20 TabIndex        =3D  =20 4
     =20 Top           &nb= sp;=20 =3D   960
     =20 Width           = =3D  =20 4455
   End
   Begin MSComDlg.CommonDialog=20 CommonDialog1
     =20 Left           =20 =3D   120
     =20 Top           &nb= sp;=20 =3D   2640
     =20 _ExtentX        =3D  =20 847
     =20 _ExtentY        =3D  =20 847
     =20 _Version        =3D  =20 393216
   End
   Begin VB.Frame Frame1=20
     =20 Caption         =3D   = "Current=20 Printer"
     =20 Height          = =3D  =20 735
     =20 Left           =20 =3D   120
     =20 TabIndex        =3D  =20 1
     =20 Top           &nb= sp;=20 =3D   120
     =20 Width           = =3D  =20 4455
      Begin VB.CommandButton = ChangePrinter=20
        =20 Caption         =3D   = "Change=20 Printer"
        =20 Height          = =3D  =20 375
        =20 Left           =20 =3D   = 3000
        =20 TabIndex        =3D  =20 2
        =20 Top           &nb= sp;=20 =3D   240
         = Width           = =3D  =20 1215
      = End
     =20 Begin VB.Label CurrentPrinter=20
        =20 Height          = =3D  =20 255
        =20 Left           =20 =3D   240
         = TabIndex        =3D  =20 3
        =20 Top           &nb= sp;=20 =3D   360
         = Width           = =3D  =20 2535
      End
   = End
  =20 Begin BIPRNDRVLib.BiPrnDrv BiPrnDrv1
      = Height          = =3D  =20 615
     =20 Left           =20 =3D   3960
     =20 TabIndex        =3D  =20 0
     =20 Top           &nb= sp;=20 =3D   2520
     =20 Width           = =3D  =20 615
     =20 _Version        =3D  =20 65536
     =20 _ExtentX        =3D  =20 1085
     =20 _ExtentY        =3D  =20 1085
      = _StockProps    =20 =3D   0
   End
End
Attribute VB_Name =3D=20 "Form1"
Attribute VB_GlobalNameSpace =3D False
Attribute = VB_Creatable =3D=20 False
Attribute VB_PredeclaredId =3D True
Attribute VB_Exposed = =3D=20 False
 
Private Sub=20 BiPrnDrv1_EndDoc(ByVal GroupFileName As String)
List1.AddItem = "EndDoc message=20 was received."
List1.AddItem "The Group File is: " &=20 GroupFileName
List1.TopIndex =3D List1.ListCount - 1
End=20 Sub
 
Private Sub=20 BiPrnDrv1_EndPage(ByVal ImageFileName As String)
List1.AddItem = "EndPage=20 message was received."
List1.AddItem "The Image File is:" &=20 ImageFileName
List1.TopIndex =3D List1.ListCount - 1
End=20 Sub
 
Private Sub=20 BiPrnDrv1_StarDoc(ByVal GroupFileName As String)
List1.AddItem = "StartDoc=20 message was received."
List1.AddItem "The Group File is: " &=20 GroupFileName
List1.TopIndex =3D List1.ListCount - 1
End=20 Sub
 
Private Sub=20 BiPrnDrv1_StartPage(ByVal PageNumber As Long)
List1.AddItem = "StartPage=20 message was received."
List1.AddItem "The current page number is: " = &=20 Str(PageNumber)
List1.TopIndex =3D List1.ListCount - 1
End=20 Sub
 
Private Sub=20 ChangePrinter_Click()
CommonDialog1.ShowPrinter
BiPrnDrv1.PrinterN= ame =3D=20 Printer.DeviceName
CurrentPrinter.Caption =3D=20 Printer.DeviceName
List1.AddItem "Please print with the " &=20 BiPrnDrv1.PrinterName & " printer."
End Sub
 
Private Sub=20 Exit_Click()
Unload Form1
End Sub
 
Private Sub=20 Form_Load()
BiPrnDrv1.PrinterName =3D "Black Ice=20 Color"
CurrentPrinter.Caption =3D "Black Ice Color"
List1.AddItem = "Please=20 print with the " & BiPrnDrv1.PrinterName & " printer."
End=20 Sub
 
 
------=_NextPart_000_0318_01C344AB.6131DCE0--