momentan sehe ich mich häufig gezwungen, bei meinem Router das WLAN ein- und wieder ausschalten, weil ich das WLAN ab und zu am Tag brauche und es aber nicht im Dauerbetrieb laufen lassen möchte.
Da mir hierbei das Prozedere Seite im Browser öffnen - Passwort eingeben - Netzwerkseite anklicken - WLAN-Einstellungen anklicken - WLAN ein- oder ausschalten - OK klicken allmählich auf den Wecker geht und ich auch kein andere Möglichkeit gefunden habe, wollte ich diesen Vorgang mit PureBasic automatisieren.
Jetzt gibt es Leute, die so etwas auf der Datenebene umsetzen und der Ziel-Site entsprechende Daten schicken. Darüber hab ich absolut keine Ahnung.
Und so hab ich statt dessen versucht, über Maus- und Tastatur-Simulation per API das Problem zu lösen. Das hatte bei anderen Programmen schon recht gut geklappt.
Mein Programm dazu sieht bisher so aus:
Code: Alles auswählen
; WLAN einschalten
; Variablen
EnableExplicit
Global eventid.l
Global screenbreite.w=GetSystemMetrics_(#SM_CXSCREEN)
Global screenhoehe.w=GetSystemMetrics_(#SM_CYSCREEN)
Procedure maus(x, y, aktion1, aktion2, v)
; manipuliert die Maus (aus Forum)
; x u. y sind Zielkoordinaten, die in Geschwindigkeit v erreicht werden. aktion1 steht für
; einen Mausklick links oder rechts,,
; aktion2 für das Maustaste-Loslassen links oder rechts
Define t
x=Abs(x)
y=Abs(y)
Protected a.l, b.l, sa.l, sb.l
t=0 ; Für weitere Verzögerung
Repeat
a=x-DesktopMouseX()
b=y-DesktopMouseY()
sa=1
sb=1
If a < 0
sa=-1
EndIf
If b < 0
sb=-1
EndIf
If DesktopMouseX() = x
sa=0
EndIf
If DesktopMouseY() = y
sb=0
EndIf
SetCursorPos_(DesktopMouseX()+sa, DesktopMouseY()+sb)
t=t+1 ; für Verzögerung hochzählen
If t=30 ; erst jetzt verzögern, weil sonst zu langsam; je höher t, desto schneller
Delay(Abs(v))
t=0
EndIf
Until DesktopMouseX() = x And DesktopMouseY() = y
If aktion1 <> 0 : mouse_event_(aktion1, x, y, 0, 0) : EndIf
If aktion2 <> 0 : mouse_event_(aktion2, x, y, 0, 0) : EndIf
BlockInput_(#False)
ProcedureReturn #True
EndProcedure
; Fenster
If Not OpenWindow(0,0,0,800,600,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
MessageRequester("Fehler!","Das Fenster konnte nicht geöffnet werden!")
EndIf
; Webfenster öffnen
WebGadget(1,0,0,750,550,"https://speedport.ip/top_start_passwort.stm")
; Sicherheitsfrage beantworten
Delay(500)
maus(screenbreite/2-120,screenhoehe/2+135,0,0,10)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP,0)
; weitere Maßnahmen für die nötigen Eingaben für das WLAN folgen
; Warten auf Schließen
Repeat
EventID=WaitWindowEvent(10)
Until EventID = #PB_Event_CloseWindow
Die Prozedur maus() stammt aus einem Forum und bewegt hier die Maus.
Leider macht mir allerdings ein unerwartetes Problem einen Strich durch die Rechnung.
Anstatt die Router-Site einfach anzuzeigen, spuckt das Web-Gadget (Firefox tut das dagegen nicht) zunächst ein Sicherheits-Warnfenster mit folgendem Inhalt aus:
"Die Identität dieser Website oder die Integrität dieser Verbindung kann nicht überprüft werden.
Das Sicherheitszertifiktat stammt von einer vertrauenswürdigen Zertifizierungsinstitution.
Das Sicherheitszertifikat ist abgelaufen oder noch nicht gültig.
Der auf dem Sicherheitszertifikat angegebene Name ist gültig und stimmt mit dem Namen der gewünschten site überein.
Möchten sie den Vorgang fortsetzen?
Ja - Nein - Zertifikat anzeigen"
Na gut, denk ich, dann gibt es eben noch einen weiteren simulierten Mausklick auf die Ja-Schaltfläche dieses Fensters.
Aber genau das ist nicht mehr möglich, da die Programm-Ausführung meines PB-Programms solange anhält, bis ich selbst diese Schaltfläche angeklickt habe.
Jetzt weiß ich nicht mehr weiter.
Ich hab es dann noch irgendwie mit einem Thread versucht, der die Site aufruft. Ist mir aber nicht gelungen. Auch hier wartet das Programm brav auf meinen Mausklick.
Was kann ich jetzt noch tun?
Bitte helft mir.
Danke und Gruß
OlderCoder