Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Anfängerfragen zum Programmieren mit PureBasic.
OlderCoder
Beiträge: 134
Registriert: 18.03.2013 12:30
Wohnort: Bayerland
Kontaktdaten:

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von OlderCoder »

Antivir kurz deaktiviert. Keine Änderung, geht nach wie vor nicht.
Hätte mich auch gewundert. Wenn Antivir Alarm schlägt, dann merkt man das in aller Regel.

Mein Code ist im Prinzip noch genau derselbe, den ich oben schon mal gepostet habe, nur diesmal mit mySite und myTitle als Variablen anstelle der direkten Angabe von Titel und Parameter, und der Delay-Wert nach Aufruf des Browsers ist größer. ProgramRunning hab ich noch nicht eingebaut. Das ist für das Problem zunächst auch nicht relevant.
Das probeweise eingebaute Fenster hatte ich wieder auskommentiert. Macht auch keinen Unterschied, wenn ein Fenster aufgeht.
Hier noch mal, wenn's hilft:

Code: Alles auswählen

; WLAN ausschalten

; Variablen
EnableExplicit
Define MySite.s  = "-new-window http://speedport.ip/top_start_passwort.stm"
Define MyTitle.s = "Speedport W 504V Konfigurationsprogramm - Mozilla Firefox"

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
; If Not OpenWindow(0,0,0,200,150,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
;   MessageRequester("Fehler!","Das Fenster konnte nicht geöffnet werden!")
; EndIf

Delay(2000)
;While WindowEvent()<>0 : Wend

; Router-Seite im Firefox öffnen
;RunProgram("Firefox.exe","-new-window http://speedport.ip/top_start_passwort.stm","C:\Program Files (x86)\Mozilla Firefox")
RunProgram("Firefox.exe",MySite,"")

; Fenster maximieren
Delay(3000)
ShowWindow_(FindWindow_(0,MyTitle),#SW_MAXIMIZE)

; Passwort-Eingabe anklicken
Delay(1000)
maus(250,270,0,0,10)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP,0)

; Passwort eingeben
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_RETURN, #Null, #Null, #Null)
keybd_event_(#VK_RETURN, #Null, #KEYEVENTF_KEYUP, #Null)

; Netzwerk aufrufen
Delay(1000)
maus( 40,370,0,0,10)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP,0)

; WLAN aufrufen
Delay(800)
maus(240,355,0,0,10)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP,0)

; WLAN einschalten
Delay(800)
maus(335,253,0,0,10)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP,0)

; OK klicken
Delay(800)
maus(543,689,0,0,10)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP,0)

; Browserfenster schließen
maus(GetSystemMetrics_(#SM_CXSCREEN)-35,10,0,0,10)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP,0)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von RSBasic »

Ich weiß leider nicht, warum bei dir kein Firefox-Fenster erscheint, wenn du die EXE-Datei startest.
Alternativ kannst du mal stattdessen folgendes probieren:

Code: Alles auswählen

ShellExecute_(#Null, "open", "firefox.exe", "", "", #SW_SHOW)
Wenn du die EXE-Datei startest, besteht das Problem ebenfalls?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von Bisonte »

Also der Code von OlderCoder läuft bei mir tadellos (nach anpassung an Fritz und koords)...
Fenster geht auf, maustanz und eingabe... und am ende fenster zu.

Warum es nicht bei ihm geht ist mir schleierhaft.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
OlderCoder
Beiträge: 134
Registriert: 18.03.2013 12:30
Wohnort: Bayerland
Kontaktdaten:

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von OlderCoder »

RSBasic hat geschrieben:Ich weiß leider nicht, warum bei dir kein Firefox-Fenster erscheint, wenn du die EXE-Datei startest.
Alternativ kannst du mal stattdessen folgendes probieren:

Code: Alles auswählen

ShellExecute_(#Null, "open", "firefox.exe", "", "", #SW_SHOW)
Wenn du die EXE-Datei startest, besteht das Problem ebenfalls?
Ja, ebenfalls. Dann aber noch viel schlimmer.
Nach meinem ersten Mausklick macht die Maus eine Bewegung und tanzt dann endlos auf der Stelle. Nur mit dem Taskumschalter komme ich dann weiter. Dann kommt die nächste Mausbewegung, dann tanzt sie wieder usw.(ich hab schon an einen PC-Reset gedacht). Aber nach der letzten Mausbewegung beendet sich das Programm dann doch.
Und über die IDE wieder alles bestens....

Ojeh! Jetzt hab ich diese ShelExecute-Zeile wieder gegen die RunProgram-Variante getauscht. Über die IDE wieder alles gut.
Aber als exe gestartet war diesmal ein PC-Reset nötig, um das Diseaster zu beenden.
Es ist schwer zu beschreiben. Als wäre ein kleines Monster in meinem PC.
Der Firefox startet wieder erst mal gar nicht. Nach dem ersten Mausklick fährt die Maus wenige Male hin und her und bewegt sich dann wieder endlos wie eine Mücke am Badesee hin und her.
Normale Mausklicks können kein Programm maximieren, allenfalls schließen. Und bei jedem Mausklick fährt die Maus wieder ein paar Mal hin und her und zuckt dann wieder endlos. Das hab ich gefühlte 10 Minuten mitgemacht und dann auf Reset geklickt.
Ist gar nicht so ungefährlich, so eine Maus/Klick-Simulation. Man hat es nicht in der Hand, was passiert, wenn das Programm ausrastet.
Und dabei ist das Programm meiner Meinung nach recht einfach und geradlinig.
Wie kann denn sowas sein?
Jetzt fällt mir nur noch ein, das Programm zunächst aufs absolute Minimum zu reduzieren, jedes Mal die exe zu testen, und wenn es funzt, Stück für Stück das Programm wieder zu erweitern, um so den Fehler zu finden. Extrem zeitauwändig und mühsam.
Aber das Programm ist mein einziger gefundener Weg für das gesteckte Ziel.
Was ich auch noch tun werde, ist, die Prozedur für das Steuern der Maus auf das absolute Minimum zu reduzierne. Da passiert ja vielleicht das Missgeschick. (Wie oben schon mal erwähnt, ich brauche eigentlich keine gleichförmige Mausbewegung, sondern nur einen Sprung zur Koordinate.)
Die Möglichkeit, den Router zu steuern, ohne den Weg über das Kontrollfenster zu gehen, wird es vielleicht auch geben. Aber das ist sicher nicht einfach. Weiß da jemand etwas darüber? Nur, falls es gar nicht mehr klappen will.
OlderCoder
Beiträge: 134
Registriert: 18.03.2013 12:30
Wohnort: Bayerland
Kontaktdaten:

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von OlderCoder »

So, jetzt funzt es endlich auch mit der exe.
Mausbewegung aus der Prozedur entfernt, Prozedur wird dadurch viel kürzer.
Rest auskommentiert und dann Stück für Stück wieder eingebaut.
Tut.
Ich werde das Programm noch etwas verbessern und dann abschließend hier posten.
Hoffentlich bau ich nicht wieder irgendwo einen Code-Teufel ein.
OlderCoder
Beiträge: 134
Registriert: 18.03.2013 12:30
Wohnort: Bayerland
Kontaktdaten:

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von OlderCoder »

Die unendliche Geschichte.
Langsam hab ich keine Lust mehr.
Eine Zeitlang hat das Programm funktioniert.
Dann hab ich versucht, diese Delays irgendwie zu optimieren. So hab ich nach dem Vorschlag von RSBasic mit ProgramRunning überprüft, ob Firefox schon offen ist, anstatt mit einem Delay darauf zu warten. (Dass aber auch nicht reicht -> siehe unten)
Am liebsten wäre mir, wenn sie ganz verschwinden und durch eine Überprüfung, ob die Mausklicks erfolgreich waren (z.B. Pixeltest), ersetzt werden.
Plötzlich hab ich festgestellt, dass das Firefox-Fenster meistens nicht mehr maximiert wird. Statt dessen kommt dieser Windows-Ton, wenn eine Benutzer-Eingabe ins Leere greift. Das Programm wütet danach munter nach Plan weiter und schließt dann meist mein Pure-Basic-Fenster.
Es funktioniert nur dann, wenn das neue Firefox-Fenster bereits maximiert geöffnet wird (wenn das bestehende Firefox-Fenster auch schon maximiert ist)
Außerdem fand ich es seltsam, als das mit dem Maximieren noch geklappt hat, dass auch Delays, die weiter unten stehen, wenn sie kürzer werden, dafür sorgen, dass weiter oben bereits die Passwort-Eingabe scheitert d.h. die simulierten Tastatureingaben werden schon nicht angenommen, weil der Mausklick zu früh kommt. Wie kann denn das sein?
Und wie kann so ein einfaches Programm so viele Zicken machen?

Hier mein aktueller Code:

Code: Alles auswählen

; WLAN ausschalten

; Variablen
EnableExplicit
Define zeit.l ; Für Zeitkontrolle
Define prog.l ; Zeiger auf gestarteten Firefox
Define MySite.s  = "-new-window http://speedport.ip/top_start_passwort.stm" ; Parameterübergabe für Firefox
Define MyTitle.s = "Speedport W 504V Konfigurationsprogramm - Mozilla Firefox" ; Fenstertitel für Maximierung

Procedure maus(x, y, aktion1, aktion2)
  ; Mausmanipulation, Quelle Forum, abgespeckt
  ; x,y = Zielkoordinaten
  ; aktion1 = Mausklick links oder rechts
  ; aktion2 = Maustaste-Loslassen links oder rechts
  SetCursorPos_(x,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

; Router-Seite im Firefox öffnen
prog=RunProgram("Firefox.exe",MySite,"",#PB_Program_Open)
; Warten bis Firefox geöffnet, sonst nach 5 Sekunden Programm-Ende
zeit=Date()
While Not ProgramRunning(prog)
  If Date()-zeit>5 : End : EndIf
Wend  
; Fenster maximieren
ShowWindow_(FindWindow_(0,MyTitle),#SW_MAXIMIZE)

; Passwort-Eingabe anklicken
Delay(1000)
maus(250,270,0,0)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP)
; Passwort eingeben
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_x, #Null, #Null, #Null)
keybd_event_(#VK_x, #Null, #KEYEVENTF_KEYUP, #Null)
keybd_event_(#VK_RETURN, #Null, #Null, #Null)
keybd_event_(#VK_RETURN, #Null, #KEYEVENTF_KEYUP, #Null)
 
; Netzwerk aufrufen
maus( 40,370,0,0)
Delay(800)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP)
 
; WLAN aufrufen
Delay(800)
maus(240,355,0,0)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP)
 
; WLAN einschalten
Delay(800)
maus(335,253,0,0)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP)

; OK klicken
Delay(800)
maus(543,689,0,0)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP)
; 
; Browserfenster schließen
maus(GetSystemMetrics_(#SM_CXSCREEN)-35,10,0,0)
maus(DesktopMouseX(), DesktopMouseY(),#MOUSEEVENTF_LEFTDOWN,#MOUSEEVENTF_LEFTUP)
Das ist jetzt übrigens die WLAN-Ausschaltvariante. Ist aber egal, das Programm ist letztlich identisch bis auf die Koordinate des einen Mausklicks.

Edit:
Ein weiteres Delay an folgender Stelle verhindert das Problem:

Code: Alles auswählen

; Fenster maximieren
Delay(300)
ShowWindow_(FindWindow_(0,MyTitle),#SW_MAXIMIZE)
Ein Wert von 200 reicht noch nicht aus, 300 schon (d.h. halt nein, in der compilierten Version reicht auch 300 nicht, ich hab 600 genommen...)
Aber hier sollte eigentlich ein Delay verhindert werden. Dafür war ja das ProgramRunning() gedacht. Aber es geht nicht ohne.
Ich finde den Einsatz von Delay sehr gemurkst. Bei einem anderen Rechner sind vielleicht ganz andere Wert nötig.
Sind die Werte aber besonders groß, damit sie nie zu klein sind, dauert der gesamte Vorgang ewig.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von Kiffi »

das ist halt die Crux bei diesen Maus- und Tastatur-Simulationen. Mag ja sein,
dass die Delay-Zeiten zum Zeitpunkt des Entwickelns stimmen, aber das Starten
von Programmen und Anzeigen von Webseiten kann immer unterschiedlich lang
dauern (je nachdem, was Dein Rechner im Hintergrund grade zu tun hat).

Vielleicht mal ein anderer Lösungsansatz: Für den Ff gibts mit Sicherheit ein
Plugin, mit dem man automatisch Webseiten-Formulare bedienen kann. Würde
mich wundern, wenn man mit solch einem Plugin nicht auch Deinen Router
steuern könnte.

Grüße ... Kiffi
a²+b²=mc²
OlderCoder
Beiträge: 134
Registriert: 18.03.2013 12:30
Wohnort: Bayerland
Kontaktdaten:

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von OlderCoder »

Andere Lösungsansätze begrüße ich inzwischen sehr.
Ich werde mal nachschauen. Was mich etwas stört dabei ist der Gedanke, dass ich mein Router-Passwort dann praktisch einer Blackbox anvertraue. Das ist bei meinem Programm etwas anders. Vermutlich ist es nicht ganz so leicht, das Passwort aus einer exe zu extrahieren, die sich auf meinem Rechner befindet. Und ins Internet geht mein Programm auch nicht. Ich speicher auch sehr selten Passwörter im Browser ab.
(Sowas https://addons.mozilla.org/de/firefox/a ... ill-forms/, oder? Ich schau mal, was damit geht. Wenn man die Kommentare liest, scheint es aber jede Menge Probleme damit zu geben, und der Link für die Wiki tut nicht. Probleme, wo man hinschaut...)
Ich dachte aber noch an etwas anderes. Es gibt Scripte, mit denen man Website-Formulare bedienen kann.
Es gibt z.B. Leute, die damit Online-Spiele, verbotenerweise, automatisieren.
Wenn ich wüsste, wie so etwas geht, dann könnte ich mittels eines solchen selbst geschriebenen Scripts die notwendigen Daten selbst an den Router schicken, ohne den Umweg über diese Mausgeschichte zu gehen.

Getestet:
iMacros (Plugin für Firefox) - kein Erfolg, Aufzeichnung bricht nach wenigen Schritten ab
Zuletzt geändert von OlderCoder am 16.05.2013 11:08, insgesamt 1-mal geändert.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von Josh »

Ich habe momentan auch keine Ahnung wie ich es genau lösen würde, weil ich mich mit dem Webzeugs noch nicht beschäftigt habe. Als Lösungsansatz würde ich folgendes versuchen:

Dein Browser macht doch auch nichts anderes, als dass er durch Aufruf der Seite Daten empfängt. Es sollte ein leichtes sein, diese Daten von deinem Programm (ohne Verwendung eines Browsers) abzurufen.

Als nächsten Schritt würde ich versuchen herauszufinden, welche Daten dein Browser mit den ausgefüllten Feldern zurückschickt. Wenn du das hast, kannst du das von deinem Programm aus (wiederum ohne Verwendung eines Browsers) genau so machen.

Ob das so zu realisieren ist, keine Ahnung. Aber ich würde jede andere Lösung bevorzugen, bevor ich mit dem Mausrumgehüpfe was mache.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Router-Konfig.-Aufruf scheitert an Sicherheitsabfrage

Beitrag von RSBasic »

Bezüglich des Vorschlags von Josh empfehle ich dir die folgende Anwendung: Fiddler
Damit kannst du die GETs und POSTs aufzeichnen. Dann kannst du die einzelnen Sende-Vorgänge der notwendigen Daten Schritt für Schritt in deiner Anwendung einbauen.
Du stellst einfach eine eigene Verbindung zur Seite her und kannst anhand des Protokolls die Daten fürs Login senden und dein WLAN an-/abschalten.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten