MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Windows, Anwendungen & Co. > Windows Automatisierung
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 21.01.2015, 11:01   #1
mischma
MOF User
MOF User
Traurig Fenster finden 'hinter' Win7 Sperrbildschirm

Hallo Zusammen,

ich habe in Outlook ein AddIn integriert, welches den Posteingang kontrolliert und dann div. Aktionen startet.

Es wird z.B. ein VBscript gestartet, welches auf ein bestimmtes Fenster ('Drucken' des Standarddruckers FreePDF) wartet.

Wird das Fenster gefunden, wird ENTER gedrückt usw.

Solange der Windows-Sperrbildschirm deaktiv ist, funktioniert alles prima.

Wenn der Sperrbildschirm aktiviert wurde klappt das leider nicht mehr, da anscheinend das Fenster 'Drucken' hinter dem 'Sperrbildschirm' liegt.

Melde ich mich wieder an, sehe ich das Fenster 'Drucken'´. Bestätige ich es mit ENTER, läut das Script ohne Fehler weiter.

Wer weiß Rat?

Vielen Dank und Grüsse, Mike
Angehängte Grafiken
Dateityp: jpg System schläft.jpg (55,3 KB, 10x aufgerufen)

__________________

c
mischma ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.04.2015, 17:29   #2
surogat
Neuer Benutzer
Neuer Benutzer
Standard

Hat das benutzte Programm keine Kommandozeilenschalter zum Erledigen solcher Druck-Jobs?
surogat ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 28.04.2015, 15:10   #3
mischma
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Surogat,

habe es mittlerweile wie folgt gelöst:

Code:

Option Explicit

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
   ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _
   ByVal hwnd As Long, _
   ByVal wIndx As Long) As Long

Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" ( _
   ByVal hwnd As Long) As Long

Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
   ByVal hWnd1 As Long, _
   ByVal hWnd2 As Long, _
   ByVal lpsz1 As String, _
   ByVal lpsz2 As String) As Long

Public Declare Sub Sleep Lib "kernel32" ( _
   ByVal dwMilliseconds As Long)

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
   ByVal hwnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Integer, _
   ByVal lParam As Any) 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 Const FreePDF_FORM = "ThunderRT5Form"
Private Const FreePDF_FENSTER = "FreePDF 4.04"
Private Const FreePDF_TEXTBOX = "ThunderRT5TextBox"
Private Const FreePDF_BUTTON = "ThunderRT5CommandButton"
Private Const FreePDF_BUTTONTEXT = "&Ablegen"
Private Const GWL_STYLE = -&H10
Private Const WS_VISIBLE = &H10000000
Private Const WS_BORDER = &H800000
Private Const WM_SETTEXT = &HC
Private Const BM_CLICK = &HF5       ' MAUSKLICK
Private Const WM_KEYDOWN = &H100    ' KEYDOWN
Private Const VK_RETURN = &HD       ' ENTER
Private Const VK_MENU = &H12        ' ALT

Public Sub SendeText(sFile As String)
   Dim lHwnd_Window  As Long
   Dim lHwnd_TextBox As Long
   Dim lHwnd_Button  As Long
   Dim sText As String
        
   ' Ermittle Handle für FreePDF-Fenster
   Do
      lHwnd_Window = FindWindow(FreePDF_FORM, FreePDF_FENSTER)
      Sleep 1000
   Loop Until lHwnd_Window <> 0
       
   If (GetWindowLong(lHwnd_Window, GWL_STYLE) And (WS_VISIBLE Or WS_BORDER)) = _
       (WS_VISIBLE Or WS_BORDER) And GetWindowTextLength(lHwnd_Window) <> 0 Then
      
      '********************************************************************************************
      ' Ermittle Handle für TextBox im FreePDF-Fenster
      Do
         lHwnd_TextBox = FindWindowEx(lHwnd_Window, ByVal 0&, FreePDF_TEXTBOX, vbNullString)
      Loop Until lHwnd_TextBox <> 0
      
      ' Wenn Handle für TextBox gefunden...Text senden
      SendMessage lHwnd_TextBox, WM_SETTEXT, 0&, sFile
      Sleep 1000
      '********************************************************************************************
      ' Ermittle Handle für Button im FreePDF-Fenster
      Do
         lHwnd_Button = FindWindowEx(lHwnd_Window, ByVal 0&, FreePDF_BUTTON, FreePDF_BUTTONTEXT)
      Loop Until lHwnd_Button <> 0
      
      ' Wenn Handle für Button gefunden...Mausklick senden
      PostMessage lHwnd_Button, BM_CLICK, 0, 0
      Sleep 1000
      '********************************************************************************************
      ' Ermittle Handle für Fenster 'Speichern unter'
      Do
         lHwnd_Window = FindWindow("#32770", "Speichern unter")
         Sleep 100
      Loop Until lHwnd_Window <> 0
      
      ' Wenn Handle für Fenster 'Speichern unter' gefunden...Enter drücken
      PostMessage lHwnd_Window, WM_KEYDOWN, 13, 0
      '********************************************************************************************
      ' Warten bis Fenster 'Speichern unter' weg ist
      Do
         lHwnd_Window = FindWindow("#32770", "Speichern unter")
         Sleep 100
      Loop Until lHwnd_Window = 0
      '********************************************************************************************
      ' Warten bis Fenster 'FreePDF 4.04' weg ist
      Do
         lHwnd_Window = FindWindow(FreePDF_FORM, FreePDF_FENSTER)
         Sleep 100
      Loop Until lHwnd_Window = 0
      '********************************************************************************************
      ' AdobeReader-Fenster schliessen
      Call KillAdobe
      '********************************************************************************************
      ' Warten bis Fenster 'Adbobe Reader' weg ist
      Do
         lHwnd_Window = FindWindow("AcrobatSDIWindow", "Adobe Reader")
         Sleep 1000
      Loop Until lHwnd_Window = 0
      '********************************************************************************************
   End If
End Sub

Private Function KillAdobe()
   Dim wmi, wmiq, qresult, process
   
   Set wmi = GetObject("winmgmts:")
   wmiq = "select * from Win32_Process where name='AcroRd32.exe'"

   Set qresult = wmi.execQuery(wmiq)

   For Each process In qresult
      On Error Resume Next
      process.Terminate (1)
      On Error GoTo 0
   Next

   Set wmi = Nothing
   Set wmiq = Nothing
   Set qresult = Nothing
End Function
Grüsse, Mike

__________________

c
mischma ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.