Checkbox eines Windowsfenster Status abfragen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    Checkbox eines Windowsfenster Status abfragen

    Moin Moin

    Ich bin gerade dabei ein kleines Programm zu schreiben, das mein Pc ein bisschen aufräumen soll.

    Das sieht so momentan aus:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short
    3. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    4. If GetAsyncKeyState(Keys.F10) Then
    5. My.Computer.Keyboard.SendKeys(RichTextBox1.Text)
    6. My.Computer.Keyboard.SendKeys("{Enter}")
    7. Timer1.Interval = 1000
    8. My.Computer.Keyboard.SendKeys("{Enter}")
    9. End If
    10. End Sub
    11. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    12. If GetAsyncKeyState(Keys.F9) Then
    13. Dim programm As Long
    14. programm = Shell("cmd.exe", AppWinStyle.NormalFocus)
    15. End If
    16. End Sub
    17. Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
    18. If GetAsyncKeyState(Keys.F11) Then
    19. My.Computer.Keyboard.SendKeys(RichTextBox2.Text)
    20. My.Computer.Keyboard.SendKeys("{Enter}")
    21. End If
    22. End Sub
    23. End Class


    Schoen ists nicht, aber es macht was es soll.

    Edit:
    Hier mal ein Bild zum besseren verständnis:


    So, aber beim 2. Schritt kommt ein Windowsfenster, wo man Checkboxen anklicken soll, die dem Pc die einzelnen Bereiche auswählen lässt, wo er nach Müll suchen soll.
    Das muss man Manuell machen.
    Jetzt ist meine Frage, ob es irgendwie möglich ist, den Status der einzelnen Checkboxen auszulesen und gegebenfalls zu aktivieren, ohne die Maus zu benutzen ?! ?!

    Danke schonmal

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mikelanchello“ ()

    Ich verstehe irgendwie nicht was du meinst!

    Meinste es so:

    VB.NET-Quellcode

    1. CheckBox1.Checked = True
    2. 'z.b. in nem Button


    Oder willst du ne abfrage machen zb so:

    VB.NET-Quellcode

    1. If CheckBox1.Checked = True Then
    2. 'Das was geschehen soll
    3. End If


    Falls es nicht richtig sein sollte dann erklär es mal bitte genauer.
    Wenn es sich um eine CheckedListBox handelt (wie es aussieht), kannst du entweder bei der Erstellung der Einträge Checked auf True setzen

    VB.NET-Quellcode

    1. CheckedListBox1.Items.Add("Eintrag", True)

    oder im nachhinein über die eine Schleife

    VB.NET-Quellcode

    1. For i = 0 To CheckedListBox1.Items.Count - 1
    2. CheckedListBox1.SetItemChecked(i, True)
    3. Next


    Wenn es sich um normale Checkboxen handelt (beispielsweise in einer Groupbox)

    VB.NET-Quellcode

    1. For Each c As CheckBox In GroupBox1.Controls
    2. c.Checked = True
    3. Next


    PS: @Techniker .Checked ist bereits ein boolscher Wert, ihn nocheinmal mit =True zu prüfen ist überflüssig ;)
    Nun es gibt zwei Möglichkeiten die mir in Sinn kämen:

    1. Du erstellst zwei Bilder, einmal wo eine Checkbox ausgewählt ist und eine ohne. Dann suchst du dir die Bildschirmkoordinaten der einzelnen Checkboxes, machst ein Screenshot davon und vergleichst die Bilder im Code. Ich kam darauf da ich neulich irgendwo so etwas ähnliches im Code gesehen hatte.

    2. Du schaust nach ob diese Einstellungen irgendwo, beispielsweise in der Registry, gespeichert werden und liest diese aus.

    Ob das beides jetzt funktioniert oder eine saubere Methode ist, ist eine andere Frage - Zumindest kann man sie in Betracht ziehen, wenn es sonst keine weiteren Vorschläge gibt.

    Hatschi schrieb:

    Nun es gibt zwei Möglichkeiten die mir in Sinn kämen:

    1. Du erstellst zwei Bilder, einmal wo eine Checkbox ausgewählt ist und eine ohne. Dann suchst du dir die Bildschirmkoordinaten der einzelnen Checkboxes, machst ein Screenshot davon und vergleichst die Bilder im Code. Ich kam darauf da ich neulich irgendwo so etwas ähnliches im Code gesehen hatte.

    2. Du schaust nach ob diese Einstellungen irgendwo, beispielsweise in der Registry, gespeichert werden und liest diese aus.

    Ob das beides jetzt funktioniert oder eine saubere Methode ist, ist eine andere Frage - Zumindest kann man sie in Betracht ziehen, wenn es sonst keine weiteren Vorschläge gibt.

    Auf das erste bin ich auch schonmal gekommen, aber das scheint mir nicht gerade eine gute Lösung zu sein, da die Koordinaten ja dann nur von meinem Pc sind und ich das Programm dann niemanden weitergeben kann. Somit würde das rausfallen.
    Was ich aber evenutell versuchen werde, wenn es keine richtige Lösung gibt ist mit Pixelearch zu arbeiten. Wird zwar um einiges schwerer, aber dürfte dann eigentlich auch seinen Dienst tun.

    Stimmt, das mit der Registry könnt ich mal nachschauen, aber ich trau mich nicht so recht an die Registry. Das ist ein Bereich, wo ich mich noch nie so wirklich mit auseinander gesetzt habe.
    Achso entschuldige, ich dachte du würdest es für dich selbst schreiben, da du meintest "was meinen PC aufräumen soll".
    Das ist jetzt zwar nur Theorie aber probier doch mal das:

    1. Das Fenster "Einstellungen für..." bekommen
    2. Die Position des Fensters ermitteln
    3. Die Positionen der Checkbox ermitteln

    Das schöne ist, das Fenster ist immer gleich groß, somit müsstest du lediglich wissen wo dieses Fenster sich befindet.
    Dann könntest du das Programm auch weitergeben und zur Not baust du eine Abfang-funktion ein, wenn der Screenshot nicht mit deinen beiden Screenshots übereinstimmt, gar nichts machen.

    Ich halte das beides selbst für keine saubere Lösung, aber es kommt auch darauf an was du mit meinem Programm letztendlich anstellen willst.
    Vielleicht meldet sich nochmal ein Experte mit einer besseren Idee. Viel Glück ;)