none
MsgBox / InputBox über fremden Fenstern erscheinen lassen RRS feed

  • Frage

  • Juhu. :-)

    Ich beschäftige mich gerade mit dem Fernsteuern von fremdem Fenstern, genauer gesagt mit proAlpha (einem ERP-System).

    Das funktioniert auch sehr schön soweit, ich suche mit FindWindow u.dgl. nach den Fenstern/Feldern lese Inhalte und setze Tastenfolgen via keybd_event ab.

    Das heißt während mein Makro läuft ist das fremde Fenster aktiv.

    Nun möchte ich gerne eine MsgBox / InputBox erzeugen die dann über dem fremden Fenster angezeigt wird, also ohne das Excel wieder zum aktiven Task wird.

    Hat da jemand was fertiges?

    Ich hab schon ein wenig probiert, meine bisherigen Ansätze sind hier:

    http://answers.microsoft.com/de-de/office/forum/officeversion_other-excel/msgbox-inputbox-%C3%BCber-fremden-fenstern/a3c7a904-4bca-4fa4-9199-b70835480baa

    Kommentare, Anregungen, Ideen sind erwünscht.

    Andreas.

    Freitag, 27. Januar 2012 18:09

Antworten

  • Hallo Andreas,
    Excel im Hintergrund mit VBA bringen:
     
    Const SWP_NOSIZE As Long = &H1
    Const SWP_NOMOVE As Long = &H2
    Const SWP_NOZORDER As Long = &H4
    Const SWP_NOREDRAW As Long = &H8
    Const SWP_NOACTIVATE As Long = &H10
    Const SWP_FRAMECHANGED As Long = &H20
    Const SWP_SHOWWINDOW As Long = &H40
    Const SWP_HIDEWINDOW As Long = &H80
    Const SWP_NOCOPYBITS As Long = &H100
    Const SWP_NOOWNERZORDER As Long = &H200
    Const SWP_NOSENDCHANGING As Long = &H400
    Const SWP_DEFERERASE As Long = &H2000
    Const SWP_ASYNCWINDOWPOS As Long = &H4000
    
    
    Const HWND_TOP = 0
    Const HWND_BOTTOM = 1
    Const HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2
    
     
    Private Declare Sub SetWindowPos Lib "user32" ( _
         ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
         ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
         
    Sub SendExcelToBack()
    
        SetWindowPos Application.hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOACTIVATE
        
    End Sub
    
    

    Viele Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 31. Januar 2012 10:27
  • Der Haken beim dem sch... ERP-System ist das Du 10 bis 20 Fenster auf dem Bildschirm hast um überhaupt alle Informationen sehen und eingeben zu können.

    D.h. gebe ich in ein Fenster was ein, dann beruht diese Eingabe ggf. auf Informationen die ich in einem anderen Fenster sehen kann.

    Wenn ich nun Excel in den Vordergrund bringe, dann sehe ich im Hintergrund Excel, dann das Fenster in die ich gerade die Eingabe mache und darüber meine MsgBox. Aber die anderen Fenster nicht mehr.

    In dem anderen Thread hatte Dimo schon die Idee Excel einfach unsichtbar zu machen, ich könnte mir ggf. auch vorstellen zu Beginn meines Scripts Excel zu minimieren, aber das ist nicht besonders schön. Warum habe ich in meiner Antwort an Dimo vom 28.1. geschrieben.

    Siehst Du eine Möglichkeit per VBA das Excelfenster wieder in den Hintergrund zu bringen?

    Andreas.

    Sonntag, 29. Januar 2012 07:01

Alle Antworten

  • Hallo!

    Warum möchtest du das?

    Ich erinnere mal an das EVA-Prinzip. Entweder die Instanz die ein anderes Programm fernsteuert fordert Benutzeran- oder mehr -eingaben für sich selbst oder aber das ferngesteuerte Programm (im Rahmen der Fernsteuerung) bedarf dieses Mittels.

    Warum also sollte eine fremde Eingabebox über mir, dem ferngesteuerten Programm, erscheinen müssen; was kratzt mich wenn ein anderes Programm sich mal in den Vordergrund bringt um Daten zu verlangen?

    Eric March


    Eric March »Ein Unterschied der keinen Unterschied bewirkt ist kein Unterschied.«
    Samstag, 28. Januar 2012 19:11
  • Der Haken beim dem sch... ERP-System ist das Du 10 bis 20 Fenster auf dem Bildschirm hast um überhaupt alle Informationen sehen und eingeben zu können.

    D.h. gebe ich in ein Fenster was ein, dann beruht diese Eingabe ggf. auf Informationen die ich in einem anderen Fenster sehen kann.

    Wenn ich nun Excel in den Vordergrund bringe, dann sehe ich im Hintergrund Excel, dann das Fenster in die ich gerade die Eingabe mache und darüber meine MsgBox. Aber die anderen Fenster nicht mehr.

    In dem anderen Thread hatte Dimo schon die Idee Excel einfach unsichtbar zu machen, ich könnte mir ggf. auch vorstellen zu Beginn meines Scripts Excel zu minimieren, aber das ist nicht besonders schön. Warum habe ich in meiner Antwort an Dimo vom 28.1. geschrieben.

    Siehst Du eine Möglichkeit per VBA das Excelfenster wieder in den Hintergrund zu bringen?

    Andreas.

    Sonntag, 29. Januar 2012 07:01
  • Hallo Andreas,
    Excel im Hintergrund mit VBA bringen:
     
    Const SWP_NOSIZE As Long = &H1
    Const SWP_NOMOVE As Long = &H2
    Const SWP_NOZORDER As Long = &H4
    Const SWP_NOREDRAW As Long = &H8
    Const SWP_NOACTIVATE As Long = &H10
    Const SWP_FRAMECHANGED As Long = &H20
    Const SWP_SHOWWINDOW As Long = &H40
    Const SWP_HIDEWINDOW As Long = &H80
    Const SWP_NOCOPYBITS As Long = &H100
    Const SWP_NOOWNERZORDER As Long = &H200
    Const SWP_NOSENDCHANGING As Long = &H400
    Const SWP_DEFERERASE As Long = &H2000
    Const SWP_ASYNCWINDOWPOS As Long = &H4000
    
    
    Const HWND_TOP = 0
    Const HWND_BOTTOM = 1
    Const HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2
    
     
    Private Declare Sub SetWindowPos Lib "user32" ( _
         ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
         ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
         
    Sub SendExcelToBack()
    
        SetWindowPos Application.hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOACTIVATE
        
    End Sub
    
    

    Viele Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 31. Januar 2012 10:27
  • Vielen Dank, das bringt mich weiter.

    Andreas.

    Mittwoch, 1. Februar 2012 16:40