Есть задача напечатать ПостСкрипт файл из WebBrowser. Установил драйвер принтера, который в состоянии печатать постскрипт, программно выбираю этот принтер как дефолтовый и посылаю команду печати.
Порт принтера установлен в "FILE:" Открывается окошко и просят ввести имя файла. Есть ли способ это обойти? Пробовал создавать новый порт принтера с полным путем файла. Работает, но как-то не эстетично, плюс в таком случае нужно програмно опять таки открыть настройки принтера и найти КУДА же уйдет печать. Хотелось бы оставить портом "FILE" но указать имя файла.
а если конец света завтра? и твоей прогой так никто и не воспользуется? сделай англ и русс на остальное забей
Да, находишь хендел окошка, как показал выше...
потом, перебираешь дочерние хенделы этого окна...
и PostMassage нажимаешь на кнопку...
Я писал не так давно что-то похожее...
'Модуль автоматического реагирования на диалоги
'Написано HACKER'ом 0x.07.06
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function SetTimer& Lib "user32" (ByVal hwnd&, ByVal nIDEvent&, ByVal uElapse&, ByVal lpTimerFunc&
Private Declare Function KillTimer& Lib "user32" (ByVal hwnd&, ByVal nIDEvent&
Private Me_hwnd As Long
Private GoodWindow As Boolean
Private Type AnswerWindow
NameWindow As String
NameButtonToPress As String
End Type
Public ArrAnswerWindow() As AnswerWindow
Private Function EnumElement_(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim c As Long, t As Long, I As Byte
Dim sText As String
Dim sClass As String
sClass = Space$(128)
c = GetClassName(hwnd, sClass, 128)
If c > 0 Then
sClass = Left$(sClass, c)
sText = Space$(128)
t = GetWindowText(hwnd, sText, 128)
sText = Left$(sText, t)
For I = LBound(ArrAnswerWindow) To UBound(ArrAnswerWindow)
If Trim$(sClass) Like "*Button*" Then
sText = Replace(sText, "&", ""
If Trim(sText) = Replace(ArrAnswerWindow(I).NameButtonToPress, "&", "" Then
Call PostMessage(hwnd, WM_LBUTTONDOWN, 0, 0)
Call PostMessage(hwnd, WM_LBUTTONUP, 0, 0)
GoodWindow = True
End If
End If
Next I
If GoodWindow = False Then
Call PostMessage(wHwnd, WM_CLOSE, 0, 0)
End If
End If
EnumElement_ = 1
End Function
Private Sub EnumElement(hWndParent As Long)
EnumChildWindows hWndParent, AddressOf EnumElement_, 0&
End Sub
Private Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
Dim I As Byte
Dim wHwnd As Long
GoodWindow = False
For I = LBound(ArrAnswerWindow) To UBound(ArrAnswerWindow)
wHwnd = FindWindow(vbNullString, ArrAnswerWindow(I).NameWindow)
If wHwnd > 0 Then Call EnumElement(wHwnd)
Next
End Sub
Public Sub StartAutoAnswerDialog(FormHwnd As Long, Optional Interval As Long = 5000)
Me_hwnd = FormHwnd
SetTimer FormHwnd, 1, Interval, AddressOf TimerProc
End Sub
Public Sub StopAutoAnswerDialog()
KillTimer hwnd, 1
End Sub
пользоваться так:
Private Sub Form_Load()
ReDim ArrAnswerWindow(4)
ArrAnswerWindow(0).NameWindow = "Internet Explorer Script Error"
ArrAnswerWindow(0).NameButtonToPress = "Yes"