PDA

View Full Version : آیا به ویندوز دستور چاپ داده شده است ؟



S_VB.max
شنبه 26 خرداد 1386, 21:56 عصر
سلام
من می خوام وقتی که دستور پرینت از هر برنامه ای مثل word ، Adobe Reader و ... به ویندوز داده شد برنامه متوجه شود بعد یه دستور دلخواه را اجرا کنم
چجوری می تونم اینکار را بکنم ؟

majidghost
شنبه 26 خرداد 1386, 22:49 عصر
وقتی میخواد پرینت بگیره مسلما یه سری مسیج بین پنچره ها رد و بدل میشه ... .

noorsoft
یک شنبه 27 خرداد 1386, 05:26 صبح
از API مربوط به چاپگر SPOOL استفاده کن

__siavash__
یک شنبه 27 خرداد 1386, 08:54 صبح
سلام
من می خوام وقتی که دستور پرینت از هر برنامه ای مثل word ، Adobe Reader و ... به ویندوز داده شد برنامه متوجه شود بعد یه دستور دلخواه را اجرا کنم
چجوری می تونم اینکار را بکنم ؟
من دقیقا نمیدونم
اما شاید با توابع GetMessage یا PeekMessage بشه این کارو انجام داد.

S_VB.max
یک شنبه 27 خرداد 1386, 20:29 عصر
با تشکر از توجه شما مشکلم حل شد http://qsmile.com/qsimages/76.gif

__siavash__
یک شنبه 27 خرداد 1386, 23:03 عصر
با تشکر از توجه شما مشکلم حل شد http://qsmile.com/qsimages/76.gif
میشه بگی چه طوری این کارو کردی ؟؟

S_VB.max
دوشنبه 28 خرداد 1386, 18:12 عصر
باید وضعیت jobهای پرینتر را در هر لحظه مونیتورینگ کرد هر وقت یک job جدید توی صف چاپ اومد به منزله اینه که دکمه زده شده


Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" _
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA" (ByVal _
hPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long, ByVal Level As _
Long, pJob As Any, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) _
As Long

Private Sub Timer_Timer()

Dim hPrinter As Long, lngResult As Long, lngJobsCount As Long
Dim lngJobsFirstJob As Long, lngJobsEnumJob As Long, lngJobsLevel As Long
Dim lngJobsNeeded As Long, lngJobsReturned As Long
Dim byteJobsBuffer() As Byte

List1.Clear

lngResult = OpenPrinter("äÇã �ÑäÊÑ", hPrinter, ByVal vbNullString)

lngJobsEnumJob = 99 ' total number of print jobs to enumerate
lngJobsLevel = 1

lngResult = EnumJobs(hPrinter, lngJobsFirstJob, lngJobsEnumJob, lngJobsLevel, _
ByVal vbNullString, 0, lngJobsNeeded, lngJobsReturned)

' Check out the number of jobs will be returned
If lngJobsNeeded > 0 Then

ReDim byteJobsBuffer(lngJobsNeeded - 1)
ReDim udtJobInfo1(lngJobsNeeded - 1)

lngResult = EnumJobs(hPrinter, lngJobsFirstJob, lngJobsEnumJob, _
lngJobsLevel, byteJobsBuffer(0), lngJobsNeeded, lngJobsNeeded, _
lngJobsReturned)

' Check out the number of jobs returned
If lngJobsReturned > 0 Then
For lngJobsCount = 0 To lngJobsReturned - 1
List1.AddItem "Job " & List1.ListCount
Next
End If

End If

End Sub