Try ... catch e - problem Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

effel
Posts: 49
Joined: 16 Jan 2018, 13:34

Try ... catch e - problem

04 Mar 2018, 16:46

hallo ahk gemeinde,
folgender code funktioniert bei mir einwandfrei, bis auf, wenn ich keine internetverbindung habe, dann kommt leider eine fehlermeldung.
ich habe den teil, der für das versenden der mail zuständig ist, wie ich es in einer anderen anfrage
https://autohotkey.com/boards/viewtopic.php?f=9&t=44265&p=201121#p201121
gelernt habe

Code: [Select all] [Download] GeSHi © Codebox Plus

Try {
......
}
catch e {
.....
}


eingepasst. aber irgendwo habe ich wohl doch einen fehler drin. ich sehe nicht mal die msgbox, welche das fehlen der internetverbindung anzeigen soll.



Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus




weil wohl nicht jeder den power director auf seinem rechner hat, habe ich die unwesentlichen teile gelöscht. dabei kommt dann folgender code heraus,

ich hoffe es ist so übersichtlich. folgender code funktioniert

nur wenn ich die verbindung zum internet trenne, kommt eine fehlermeldung

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

User avatar
divanebaba
Posts: 642
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: Try ... catch e - problem

04 Mar 2018, 18:17

Hallo.
Ob eine Verbindung vorliegt, prüfe ich mit folgender Funktion:

Code: [Select all] [Download] GeSHi © Codebox Plus

If ConnectedToInternet()
Msgbox Verbindung besteht
else
MsgBox Keine Verbindung
return

ConnectedToInternet(flag=0x40) {
Return DllCall("Wininet.dll\InternetGetConnectedState", "Str", flag,"Int",0)
}
Jetzt musst Du nur noch vor jedem Internetzugang ein If ConnectedToInternet() vorsetzen, dann ersparst Du Dir die Fehlermeldung, bzw. einen zum Scheitern verurteilten Zugriff auf das Internet.

Dein Try & Catch-Abschnitt im letzten Codebeispiel sollte, meiner Auffassung nach, niemals ausgeführt werden. Bist Du Dir sicher, auch nicht zuviel vom Originalcode weggelassen zu haben?
Der Übersichtlichkeit halber sollte man Code, der mit der AutoExecute-Sektion ausgeführt wird, möglichst oben platzieren. Dann erkennt man solche Abschnitte einfach besser.

[Starklichtbirne IQ >> 250!!] Dank deutscher Lehrerempfehlung, nur Süperdepp und Hartz4-Bezieher, statt Abitürient und Einkommensbezieher.
[Strong light bulb IQ >> 250!!] Thanks to german teacher's recommendation, willful and welfare recipient, instead of high school graduate and moneymaker.

Entering high school for foreign children is not prohibited in GERMANY, it's only made nearly impossible by government.
Virtually the only way - visiting high school abroad.
User avatar
gregster
Posts: 1172
Joined: 30 Sep 2013, 06:48

Re: Try ... catch e - problem

04 Mar 2018, 18:43

Yo, wenn du try (und catch) mit einer Funktionsdefinition verwendest, dann musst du es in die Funktion reinnehmen, anstatt zu versuchen, die Funktion darin einzuhüllen. Das was du im Moment machst, würd auch nicht funktionieren, wenn es in der autoexecute section stehen würde, bin ich überzeugt.
Last edited by gregster on 04 Mar 2018, 18:49, edited 1 time in total.
effel
Posts: 49
Joined: 16 Jan 2018, 13:34

Re: Try ... catch e - problem

04 Mar 2018, 18:48

@divanebaba danke für deine antwort, aber mein rechner ist mit einem router verbunden, der router bekommt sein internet von einem hotspot handy.

wenn ich die verbindung zum router bestehen lasse, jedoch das handy ausschalte, bekomme ich mit deinem code eine positive antwort, obwohl keine internetverbindung besteht

@gregster auch dir danke ich, aber ich verstehe nur bahnhof...
in einem anderen beispiel habe ich es im prinzip genau so gemacht, das läuft fehlerfrei

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus


hier wird eine google.html auf meiner platte gespeichert, wenn ich die verbindung zum netz trenne, kommt die msgbox mit dem hinweis, das ich keine verbindung habe.

dachte das kann ich auch mit dem emailcode so machen
User avatar
divanebaba
Posts: 642
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: Try ... catch e - problem

04 Mar 2018, 19:25

Hmm.
Sowas ähnliches sagte auch Masonjar13, aber ich habe ihn nicht richtig verstanden. Immerhin hat er mir einen Link gelassen, der angeblich funktionieren soll.
Versuche mal hiermit etwas anzufangen.

[Starklichtbirne IQ >> 250!!] Dank deutscher Lehrerempfehlung, nur Süperdepp und Hartz4-Bezieher, statt Abitürient und Einkommensbezieher.
[Strong light bulb IQ >> 250!!] Thanks to german teacher's recommendation, willful and welfare recipient, instead of high school graduate and moneymaker.

Entering high school for foreign children is not prohibited in GERMANY, it's only made nearly impossible by government.
Virtually the only way - visiting high school abroad.
User avatar
gregster
Posts: 1172
Joined: 30 Sep 2013, 06:48

Re: Try ... catch e - problem

04 Mar 2018, 19:53

effel wrote:@gregster auch dir danke ich, aber ich verstehe nur bahnhof...
in einem anderen beispiel habe ich es im prinzip genau so gemacht, das läuft fehlerfrei

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

Nein, der Unterschied ist, hier rufst du eine Funktion (nämlich ComObjCreate) auf mit einem bestimmten Parameter (hier: "WinHttp.WinHttpRequest.5.1") - also es wird versucht, die Funktion ordnungsgemäß aufzurufen und ein Fehler würde ggf. abgefangen.
In deinem Skript weiter oben rufst du die Funktion SendGmail(message,emailto) aber nicht auf, als du Try verwendest - sondern definierst sie (und in dem Moment wird die Funktion nicht ausgeführt und bei deinen tatsächlichen Funktionsaufrufen wird das try auch nicht angesprungen/durchlaufen, da es außerhalb der Funktion steht.). Also nicht:

Code: [Select all] [Download] GeSHi © Codebox Plus

try
{
NeFunktion(text)
{
msgbox %text%
}
return
}
sondern:

Code: [Select all] [Download] GeSHi © Codebox Plus

NeFunktion(text)
{
try
{
msgbox %text%
}
; catch ...
return
}
Dann kommt das try zum Tragen, wenn die Funktion gerufen und tatsächlich durchlaufen wird.
Oder eben beim Funktionsaufruf:

Code: [Select all] [Download] GeSHi © Codebox Plus

try
NeFunktion("DasisteinParameter")
Das wäre dann das gleiche Verfahren wie bei ComObjCreateWobei du innerhalb des eigentlichen Funktioncodes die Fehlerbehandlung ggf. noch stärker differenzieren könntest als beim simplen Funktionsaufruf. Bei letzterem wird eher das Gesamtergebnis des Aufrufs betrachtet.

Das ist im Prinzip dasselbe wie bei if und else - die würdest du ja bei der Definition der Funktion auch in den Funktionscode schreiben und nicht drumherum.
effel
Posts: 49
Joined: 16 Jan 2018, 13:34

Re: Try ... catch e - problem  Topic is solved

05 Mar 2018, 08:33

@gregster
meinst du das so? oder funktioniert es nur zufällig?
danke das ist klasse, habe das mit der funktion nie verstanden, bis jetzt wo ich sie auseinander genommen habe :D :D

so gehts auf jeden fall:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

User avatar
gregster
Posts: 1172
Joined: 30 Sep 2013, 06:48

Re: Try ... catch e - problem

05 Mar 2018, 08:41

Ja, hier nutzt du gosub, um zu einer Subroutine zu springen - das ist so ähnlich wie ein Funktionsaufruf (Funktionen haben allerdings standardmäßig lokale Variablen). Und korrekterweise verwendest du Try innerhalb der Subroutine und schreibst nicht

Dann wäre try nutzlos, da es nicht durchlaufen würde - gosub springt nämlich direkt zum Label SendGmail, und nicht zum Try, das im "Niemandsland" steht. Das wäre dann derselbe Fehler, denn du oben mit der Funktion gemacht hast.
User avatar
gregster
Posts: 1172
Joined: 30 Sep 2013, 06:48

Re: Try ... catch e - problem

05 Mar 2018, 08:50

Aber das gleiche kannst du mit einer Funktion machen - und das ist, was ich eigentlich meinte

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

Not tested ;)
effel
Posts: 49
Joined: 16 Jan 2018, 13:34

Re: Try ... catch e - problem

05 Mar 2018, 09:09

das ist noch besser für meinen zweck und funktioniert

cool, danke dir, habe heute viel gelernt :-)

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 3 guests