Fenster soll weg!

Hallo,

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.

Vielen Dank für Hilfe!
Chris

Hallo,

vielleicht kannst du die MSG von vornherein unterdrücken? Ggf. durch einen Startparameter?!

/olli

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.

Hi Oliver,
Das wäre zu schön :smile: Geht leider nicht.
Chris

Leider wird es da kein OS Feature geben. Vielleicht kann man das mit nem 3rd Party Programm oder VB unterdrücken?

Ich verschieb den Artikel …

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 :smile:)

Wie heißt das Programm eigentlich?
Fenstertitel der Messagebox?

Gruß
Reinhard

Hallo Reinhard,

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.

Oder Rainer hat das in seiner Zauberkiste …

Bau ich gleich mal. :smile:

Gruß Rainer

Hallo,

ich hab’ mal etwas gebastelt. :smile:

Erst mal der Quellcode, das ist nicht viel.

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

Ich hab’s verpackt, liegt als Installationspaket bereit.
http://www.win-home.de/Autoklick.zip

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.

[Ball zurück]

Reicht das so? Fragen, Wünsche …?

Gruß Rainer

Hallo Rainer!

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.

Grüße Chris

Hi Chris,

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. :smile:

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

Das ist schon alles, mehr braucht VB dafür nicht.

Viel Spaß damit! :smile:

Gruß Rainer

Hallo Rainer,

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 :wink:
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 :wink:

Dann waere das Proggi eigentlich perfekt, wenn du die Parameter in der Form programmiert c:\DeinProggi /P DeinProgramm /I 1000

MfG Alex

Hi Alex,

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 :wink:

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 :wink:

Ich kann ja die Option durch einen Slider ersetzen, dann darf da auch 777 stehen. :smile:

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. :smile:

Gruß Rainer

OT Nachfrage FAQ:3000
Hallo Alex,

dann ist aber das Textfeld überfluessig!

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ß :smile:)

Das Proggi in den NTA legen anstatt zu minimieren :wink:

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.?

Gruß
Reinhard

Hallo Reinhard,

dann ist aber das Textfeld überfluessig!

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ß :smile:)

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 :wink:

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

Hallo Reinhard,

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ß :smile:)

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 :wink:

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 :wink:

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 :smile:

MfG Alex