Hallo Zusammen,
ich möchte einen Druck automatisieren von SAP heraus. Funktioniert auch soweit ganz gut bis auf eine einzige Sache, bei der ich nicht weiterkomme und im internet nichts gefunden habe.
Folgendes passiert, das Druckfenster öffnet sich, es wird eine Message gesendet, dass es OK ist und dann erscheint der Savefiledialog wo die PDF (als druck) gespeichert werden soll. Und hier mein Thema...
ich bekomme es nicht hin, den Dateinamen festzulegen... es wird immer nur der erste Buchstabe in die editierbare Combobox geschrieben. Hier der code.
der Fehler liegt hier:
Kann mir jemand helfen wie ich den kompletten Dateinamen in die Combobox einfügen kann?
Vielen Dank
ich möchte einen Druck automatisieren von SAP heraus. Funktioniert auch soweit ganz gut bis auf eine einzige Sache, bei der ich nicht weiterkomme und im internet nichts gefunden habe.
Folgendes passiert, das Druckfenster öffnet sich, es wird eine Message gesendet, dass es OK ist und dann erscheint der Savefiledialog wo die PDF (als druck) gespeichert werden soll. Und hier mein Thema...
ich bekomme es nicht hin, den Dateinamen festzulegen... es wird immer nur der erste Buchstabe in die editierbare Combobox geschrieben. Hier der code.
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Imports System.Text
- Public Class Class1
- Private Const SW_RESTORE As Integer = 9
- Private Const WM_COMMAND As Integer = &H111
- Private Const WM_SETTEXT As UInteger = &HC
- Private Const IDOK As Integer = 1 ' ID der OK-Schaltfläche oder Save
- <DllImport("user32.dll")>
- Private Shared Function SendMessage(hWnd As IntPtr, msg As Integer, wParam As IntPtr, lParam As IntPtr) As IntPtr : End Function
- <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
- Private Shared Function SendMessageA(hWnd As IntPtr, Msg As Integer, wParam As IntPtr, lParam As IntPtr) As IntPtr : End Function
- <DllImport("user32.dll", CharSet:=CharSet.Auto)>
- Private Shared Function FindWindowEx(hWndParent As IntPtr, hWndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr : End Function
- <DllImport("user32.dll")>
- Private Shared Function ShowWindow(hWnd As IntPtr, nCmdShow As Integer) As Boolean : End Function
- <DllImport("user32.dll", CharSet:=CharSet.Auto)>
- Private Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean : End Function
- <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
- Private Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr : End Function
- <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
- Private Shared Function GetClassName(hWnd As IntPtr, lpClassName As StringBuilder, nMaxCount As Integer) As Integer : End Function
- Public Async Sub PrintSAPQuote(QuoteNo As String)
- Dim windowTitle As String = "Print"
- Dim windowClass As String = "#32770"
- Dim printWindowHandle As IntPtr
- Dim ActualTime As DateTime = DateTime.Now
- Do Until printWindowHandle <> IntPtr.Zero
- printWindowHandle = FindWindow(windowClass, windowTitle)
- If ActualTime.AddSeconds(10) < DateTime.Now Then Exit Do
- Loop
- If printWindowHandle <> IntPtr.Zero Then
- Else
- MessageBox.Show("Druckfenster nicht gefunden.")
- Exit Sub
- End If
- ShowWindow(printWindowHandle, SW_RESTORE)
- SetForegroundWindow(printWindowHandle)
- SendMessage(printWindowHandle, WM_COMMAND, IDOK, IntPtr.Zero)
- Await Task.Delay(2000)
- Dim dialogHandle As IntPtr
- ActualTime = DateTime.Now
- Do Until dialogHandle <> IntPtr.Zero
- dialogHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "#32770", "Save Print Output As")
- If ActualTime.AddSeconds(8) < DateTime.Now Then Exit Do
- Loop
- If dialogHandle <> IntPtr.Zero Then
- Else
- MessageBox.Show("Druckfenster nicht gefunden.")
- Exit Sub
- End If
- If dialogHandle <> IntPtr.Zero Then
- Dim comboBoxHandle As IntPtr = FindComboBox(dialogHandle)
- If comboBoxHandle <> IntPtr.Zero Then
- ShowWindow(dialogHandle, SW_RESTORE)
- SetForegroundWindow(dialogHandle)
- Dim newText As IntPtr
- newText = Marshal.StringToCoTaskMemUni("Test")
- SendMessageA(comboBoxHandle, WM_SETTEXT, IntPtr.Zero, newText)
- Marshal.FreeCoTaskMem(newText)
- Else
- Exit Sub
- End If
- End If
- SendMessage(dialogHandle, WM_COMMAND, 1, IntPtr.Zero)
- End Sub
- Private Function FindComboBox(parentHandle As IntPtr) As IntPtr
- Dim childHandle As IntPtr = IntPtr.Zero
- Dim className As New StringBuilder(256)
- Do
- childHandle = FindWindowEx(parentHandle, childHandle, Nothing, Nothing)
- If childHandle <> IntPtr.Zero Then
- GetClassName(childHandle, className, className.Capacity)
- If className.ToString() = "ComboBox" Then
- Return childHandle
- End If
- Dim subComboBoxHandle As IntPtr = FindComboBox(childHandle)
- If subComboBoxHandle <> IntPtr.Zero Then
- Return subComboBoxHandle
- End If
- End If
- Loop While childHandle <> IntPtr.Zero
- Return IntPtr.Zero
- End Function
- End Class
der Fehler liegt hier:
Kann mir jemand helfen wie ich den kompletten Dateinamen in die Combobox einfügen kann?
Vielen Dank