Ich habe ein Programm, das mehrere Stunden rechnet. Leider erscheint ab und zu ein Popup mit einer unwichtigen Nachricht. Diese muß per Hand weggeklickt werden. Das nervt.
Frage: Gibt es ein Programm, das automatisch dieses Fenster wegbekommt? Es handelt sich um eine gewöhliche MessageBox mit einem eindeutigen Titel.
Wenn das Popup von einem eigenständigen Programm generiert wird, einfach bei den Zugriffsrechten für den Benutzer „System“ das „Ausführen und Lesen“ untersagen.
Ansonsten können sowas meist die etwas besseren Macro-Programme anhand von Fensternamen bestimmte Aktionen ausführen.
Ich habe ein Programm, das mehrere Stunden rechnet. Leider
erscheint ab und zu ein Popup mit einer unwichtigen Nachricht.
Diese muß per Hand weggeklickt werden. Das nervt.
Frage: Gibt es ein Programm, das automatisch dieses Fenster
wegbekommt? Es handelt sich um eine gewöhliche MessageBox mit
einem eindeutigen Titel.
Hallo Chris,
wie startest du das Programm?
Man könnte es in einer VB.Exe starten, vorher einen Timer starten, der alle X Zeitabstände alle Fentser durchgeht und wenn ein bestimmtes sichtbar ist, dieses abschießt.
Dies geht mit API-Aufrufen, also kann man das auch, wenn du kein VB hast aber MS-Office, mit Vba.
Wenn bei dir VBS erlaubt ist auch wahrscheinlich mit VBS.
Das kannst du schnell testen, nimm einen Teteditor (notepad o.ä.) und erstelle eine Datei namens Test.vbs
Inhalt der Datei:
Msgbox „Huhu“
dann doppelklicke auf die Datei buw. start–Ausführen–Pfad/Test.vbs
Kommt da eine Msgbox?
Code für das Fensterschließen findet man wahrscheinlich im Internet durch Suche nach:
zeitgesteuert Messagebox
o.ä.
Oder Rainer hat das in seiner Zauberkiste bzw. schreibt mal kurz diesen Dreizeiler, mal die Deklarationen weglassend )
Wie heißt das Programm eigentlich?
Fenstertitel der Messagebox?
Man könnte es in einer VB.Exe starten, vorher einen Timer
starten, der alle X Zeitabstände alle Fentser durchgeht und
wenn ein bestimmtes sichtbar ist, dieses abschießt.
Dies geht mit API-Aufrufen, also kann man das auch, wenn du
kein VB hast aber MS-Office, mit Vba.
Ja, mir VB6/VBA das Fenster suchen und einen Klick auf den Button ist kein Problem.
Wenn bei dir VBS erlaubt ist auch wahrscheinlich mit VBS.
Das kannst du schnell testen, nimm einen Teteditor (notepad
o.ä.) und erstelle eine Datei namens Test.vbs
Nein VBS reicht nicht. Mit VBS kann man kiene API aufrufen.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM\_CLOSE = &H10
Private Sub Command1\_Click()
If Trim(Text1.Text) "" Then
If Option1(0).Value = True Then Timer1.Interval = 100
If Option1(1).Value = True Then Timer1.Interval = 1000
If Option1(2).Value = True Then Timer1.Interval = 10000
If Option1(3).Value = True Then Timer1.Interval = 60000
Timer1.Enabled = True
Else
MsgBox "Bitte den Titel des gesuchten Fensters eingeben "
End If
End Sub
Private Sub Command2\_Click()
Timer1.Enabled = False
End Sub
Private Sub Timer1\_Timer()
Dim WinWnd As Long, Fenster As String, RetVal As Long, lpClassName As String
Fenster = Trim(Text1.Text)
WinWnd = FindWindow(vbNullString, Fenster)
If WinWnd 0 Then
PostMessage WinWnd, WM\_CLOSE, 0&, 0&
End If
End Sub
Wenn es Dir nicht gefällt oder Du es nicht mehr brauchst, lässt es sich auch einfach mit der Windows-Funktion wieder deinstallieren.
Nach der Installation das Programm einfach mit ‚Start -> Programme -> Autiklick -> Autoklick‘ starten.
Dann in das beschriftete Textfeld den Titel der gesuchten Messagebox eintippen, den Interval eingeben, wie oft das Fenster gesucht werden soll (längere Intervalle entlasten den Prozessor) und auf Start klicken.
Zum Beenden erst auf Stopp klicken und dann das Fenster schließen.
Mit VBA kenne ich mich nicht gut genug aus, wenn Du eine VBA-Lösung vorziehst, müsste Reinhard den Code nach VBA umschreiben.
Danke schön, genau was ich so lange gesucht habe. Ein Sternchen von mir.
Du hast es ja schon zu Berühmtheit hier im Forum gebracht.
Wenn ich mir etwas wünschen könne, dann dass man das Programm mit einem Parameter für den Fenstertitel starten kann um es in den Autostart zu schieben. Ich kann leider kein Visual Basic.
Danke schön, genau was ich so lange gesucht habe. Ein
Sternchen von mir.
Danke! Schön daß es passt.
Du hast es ja schon zu Berühmtheit hier im Forum gebracht.
Ach was, ich moderiere das Brett hier nur. So ungewöhnlich ist es nicht, daß man den Moderator kennt.
Wenn ich mir etwas wünschen könne, dann dass man das Programm
mit einem Parameter für den Fenstertitel starten kann um es in
den Autostart zu schieben.
Ja kalr, ich hatte ja um Wünsche gebeten.
Lade und installiere das Programm noch einmal.
Startest Du es jetzt ohne Parameter, verhält es sich wie bisher.
Startest Du es mit Parameter, wird der Parameter als Suchstring in das Textfeld eingetragen, die Überwachung gestartet und das Fenster minimiert.
Noch der Quellcode dazu:
Private Sub Form\_Load()
Me.Show
If Command "" Then
Text1.Text = Command
Call Command1\_Click
Me.WindowState = vbMinimized
End If
End Sub
dann ist aber das Textfeld überfluessig!
Ein kleiner Verbesserungsvorschlag.
Den Parameter überprüfen, in das Textfeld schreiben.
Das Proggi in den NTA legen anstatt zu minimieren
Optional noch einbauen das man auch noch den Intervall angeben kann und dann entsprechend die Checkbox selektieren. Musst nur aufpassen wenn dann eine ungültige Eingabe gemacht wurde, wie zum bsp. 700 und dann in dem Falle aufrunden auf 1000
Dann waere das Proggi eigentlich perfekt, wenn du die Parameter in der Form programmiert c:\DeinProggi /P DeinProgramm /I 1000
klar, zu verbessern gibt es fast immer etwas.
Ich habe hier kein großes Projekt gebaut, das ich vermarkten will, das ist nur ein kleines Tool, das mit geringem Aufwand seinen Zweck erfüllen soll.
dann ist aber das Textfeld überfluessig!
Wiesso? Man kann das Prg mit Parameter starten, muss man aber nicht.
Dann muss man den Suchstring selbst eintippen.
Ein kleiner Verbesserungsvorschlag.
Den Parameter überprüfen, in das Textfeld schreiben.
Das Proggi in den NTA legen anstatt zu minimieren
Wer ist NTA? Tray? Könnte man auch tun, ja.
Optional noch einbauen das man auch noch den Intervall angeben
kann und dann entsprechend die Checkbox selektieren. Musst nur
aufpassen wenn dann eine ungültige Eingabe gemacht wurde, wie
zum bsp. 700 und dann in dem Falle aufrunden auf 1000
Ich kann ja die Option durch einen Slider ersetzen, dann darf da auch 777 stehen.
Dann waere das Proggi eigentlich perfekt, wenn du die
Parameter in der Form programmiert c:\DeinProggi /P
DeinProgramm /I 1000
Das ist richtig gut.
@Chris! Wollen wir das noch einbauen? Und wie siehst Du Annos Vorschlag ‚Trayicon‘? Sinnvoll? Dann dauert es etwas länger.
Dazu muss ich erst ein Icon entwerfen, ich bin nicht der große Künstler. Um das Trayicon zu realisieren käme dann mehr als doppelt so viel Code dazu, wie bisher das ganze Programm benötigt.
sehe ich genauso, ich sehe das sowieso unruhig wenn Rainer da immer mehr einbaut weil es könnte ja mal der Tag kommen wo ich das nach Vba umstricken will/muß )
Das Proggi in den NTA legen anstatt zu minimieren
Klingt gut, ähem was issen das dieses NTA?
Dann waere das Proggi eigentlich perfekt, wenn du die
Apropos Programm perfekt, wolltest du nicht die FAQ:3000 noch ergänzen um Features wie Dateiinhalte suchen usw.?
sehe ich genauso, ich sehe das sowieso unruhig wenn Rainer da
immer mehr einbaut weil es könnte ja mal der Tag kommen wo ich
das nach Vba umstricken will/muß )
weisso ist das Textfeld überflüssig? Dann muss man das Prg zwingend mit Parameter starten, so ist das nur eine Option, das gefällt mir besser.
Das Proggi in den NTA legen anstatt zu minimieren
Klingt gut, ähem was issen das dieses NTA?
Ich glaube ein Trayicon. Dann liegt das PRG nicht in der Taskleiste, sondern nur in einem kleinen Icon, wie alle anderen Überwachungsprogramme auch. Für VBA ist das dann aber eher nichts.
Von aktuellen Stand mal noch der vollständige Quellcode für Dich, so viel ist das noch nicht.
Gruß Rainer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM\_CLOSE = &H10
Private Sub Command1\_Click()
If Trim(Text1.Text) "" Then
If Option1(0).Value = True Then Timer1.Interval = 100
If Option1(1).Value = True Then Timer1.Interval = 1000
If Option1(2).Value = True Then Timer1.Interval = 10000
If Option1(3).Value = True Then Timer1.Interval = 60000
Timer1.Enabled = True
Else
MsgBox "Bitte den Titel des gesuchten Fensters eingeben "
End If
End Sub
Private Sub Command2\_Click()
Timer1.Enabled = False
End Sub
Private Sub Form\_Load()
Me.Show
If Command "" Then
Text1.Text = Command
Call Command1\_Click
Me.WindowState = vbMinimized
End If
End Sub
Private Sub Timer1\_Timer()
Dim WinWnd As Long, Fenster As String, RetVal As Long, lpClassName As String
Fenster = Trim(Text1.Text)
WinWnd = FindWindow(vbNullString, Fenster)
If WinWnd 0 Then
PostMessage WinWnd, WM\_CLOSE, 0&, 0&
End If
End Sub
sehe ich genauso, ich sehe das sowieso unruhig wenn Rainer da
immer mehr einbaut weil es könnte ja mal der Tag kommen wo ich
das nach Vba umstricken will/muß )
Naja die Grenzen sind denke ich mal relativ schnell erreicht. Ich dachte Rainer oder der Ursprungsposter will, das in VB als eigenstaendiges Proggi haben?
Das Proggi in den NTA legen anstatt zu minimieren
Klingt gut, ähem was issen das dieses NTA?
Ups da habe ich mich verhauen. Ich meinte natuerlich TNA ( Taskbar Notification Area) Das ist der Bereich auf dem PC, wo auch die Uhr erscheint
Dann waere das Proggi eigentlich perfekt, wenn du die
Apropos Programm perfekt, wolltest du nicht die FAQ:3000 noch
ergänzen um Features wie Dateiinhalte suchen usw.?
Richtig. Aber Reinhard, eine geaenderte Version habe ich hier bereits gepostet. Da konnte man optional auch die Suche noch nach Dateiinhalten machen. Rainer sollte mal fix drueberschauen ob das so geht und dann evtl. die FAQ ändern. Aber er hat derzeit auf Arbeit ne Menge Stress wie er sagte und hat es sicherlich noch net geschafft. Ich denke aber mal das er sich die Tage dazu mal aeussern wird