![]() |
[RAS] Verbindungsaufbau abbrechen
Hallo,
ich stelle mit Hilfe einer Ras-Funktion eine Internetverbindung her. Nun ist es aber so, dass manchmal, aus welchen Gründen auch immer, keine Verbindung hergestellt werden kann. Dies merke ich daran, dass ich lange Zeit, etwa 20 Sekunden, warten muss. Nun weiss ich aber aus Erfahrung, dass, wenn schon nach 5 Sekunden keine Verbindung besteht, ich die Aktion abbrechen könnte, ich aber nicht weiss wie. Hier ist mein Code zum Aufbau der Verbindung:
Delphi-Quellcode:
Nun habe ich schon versucht mit RasHangUp(Main.ConnectionID); während der Aktion den Aufbau zu unterbrechen, war aber nur aus Hilflosigkeit geschehen, da ich keinen anderen Weg weiss. Darum hoffe ich, jemand hier zu finden, der mir einen Rat geben könnte.
{--[Dial]----------------------------------------------------------------------}
function Dial(Entry: String): Boolean; var RasDialParams : TRasDialParams; Connection : DWORD; begin RasHangUp(Main.ConnectionID); // Main-ConnectionID ist die Verbindungs-ID FillChar(RasDialParams, SizeOf(RasDialParams), 0); RasDialParams.dwSize := SizeOf(RasDialParams); StrPCopy(RasDialParams.szEntryName, Entry); StrPCopy(RasDialParams.szUserName, '*****'); StrPCopy(RasDialParams.szPassword, '*****'); Main.ConnectionID := 0; Connection := RasDial(nil, nil, RasDialParams, 0, nil, Main.ConnectionID); // hier wird Verbingung aufgebaut If Connection = 0 then Result := True Else begin RasHangUp(Main.ConnectionID); Result := False; end; end; Gruß Mazel |
Re: [RAS] Verbindungsaufbau abbrechen
Keiner eine Idee?
|
Re: [RAS] Verbindungsaufbau abbrechen
Also ich verwende die Komponente RASComm (leider keine ahnung mehr, wo ich die her habe, ist schon ein paar Jährchen her) und frage den Parameter RasConnState ab:
Delphi-Quellcode:
So etwas müßte es bei Deinen Ras-Funktionen doch eigentlich auch geben? :gruebel:
procedure TsMain.rasCommDial(Sender: TObject; RASConnState, ErrorCode: Longint;
status, device, modem: string); begin StatusBar1.Panels[0].Text := 'Gerät: ' + Modem; Log(status); if (errorcode <> 0) then begin Log(rasComm.RASGetError(errorCode)+'['+inttostr(errorcode)+']'); Dialerror := errorcode; DialingIsDone := true; rasComm.RASHangUp; exit; end; if (RasConnState = RASCS_DISCONNECTED) then begin DialError := 0; DialingIsDone := true; rasComm.RASHangUp; ... end; |
Re: [RAS] Verbindungsaufbau abbrechen
Hallo,
danke erstmal. :) Ich vermute, dass es sowas gibt, aber ich wusste nicht nach was ich suchen soll. Ich habe nach allen möglichen Funktionen gesucht aber nicht nach RasConnState. :wall: Ich schau mir die RAS-Funktionen heute Nachmittag nochmal an (bin grad in der Schule). Ich werde sicher etwas finden. Gruß Mazel |
Re: [RAS] Verbindungsaufbau abbrechen
Ich habe eben mal nachgeschaut, RasConnectionState ist vorhanden, jedoch bringt mir das momentan nicht viel, weil ich nicht den Verbindungsaufbau abfangen kann. Also ich kann zwar den Status abfragen, aber mein Programm reagiert erst wieder, nachdem entweder Verbindung oder keine Verbindung möglich ist.
Ich habe schon an verschiedenen Stellen Application.ProcessMessages eingebaut um den Button in der Form zu betätigen, leider ohne Erfolg. Die Funktion RasDial ist also das Problem, an die ich nicht heran komme. Gruß Mazel |
Re: [RAS] Verbindungsaufbau abbrechen
Also, mit dieser Routine wird der markierte Eintrag aus der RasList(TListView) angewählt:
Delphi-Quellcode:
Wenn ich den Prozess des Wählens unterbrechen will, betätige ich den Stop-Button:
procedure TsMain.DialEntries;
begin // Logbuch leeren und einblenden. LogBuch.items.clear; SwitchToExplorer(false); DialingIsDone := false; Dialerror := 0; sMain.PlayWaveSound('ERING'); repeat Log('- Wähle: '+RasList.ItemFocused.Caption); rasComm.RASDialEntry(RasList.ItemFocused.Caption); repeat application.processmessages; until DialingIsDone; if (Dialerror <> 0) then begin DialIngIsDone := false; Break; end; until DialingIsdone; if (Dialerror <> 0) then begin ShowMessage('Es konnte keine Verbindung hergestellt werden'); SwitchToExplorer(true); end; end;
Delphi-Quellcode:
Entscheidend ist dabei die Variable DialingIsDone: wenn ich die auf True setze, wird das Einwählen sofort abgebrochen.
procedure TsMain.StopBtnClick(Sender: TObject);
begin Screen.Cursor := crHourglass; // Parallelprozeß abbrechen. DialError := 0; DialingIsDone := true; // Verbindung abbrechen. rasComm.RASHangUp; Log('Verbindung wird getrennt'); BulbOff(true); LogBuch.refresh; ShowMessage('Verbindung wurde getrennt.'); SwitchToExplorer(true); ... end; |
Re: [RAS] Verbindungsaufbau abbrechen
Ich habe versucht, meinen Code so umzubauen, dass er deinem ähnelt und so eventuell funktioniert.
Leider ohne Erfolg. Das Programm wartet leider solange, bis RasDial ein Wert zurück liefert. Daher kann ich in diesem Zeitabschnitt nichts mit der Form unternehmen. Dein rasComm.RASDialEntry würde mein RasDial entsprechen, nun verstehe ich nicht, warum bei mir solange auf ein Wert gewartet wird. Bei dir scheint es so zu sein, dass deine Repeat-Until Schleife sofort ausgeführt wird und wenn DialingIsDone gesetzt ist, die Schleife verlassen wird. Soweit komme ich wie geschrieben nicht, die Schleife wird bei mir erst nachdem RasDial ausgeüfhrt wurde abgehandelt, was mir aber aufgrund des Themas nichts nützt. |
Re: [RAS] Verbindungsaufbau abbrechen
Hhhmmm, ich habe mir mein Programm noch einmal genauer angesehen und muss mich daher etwas korrigieren:
Wenn ich den Stop-Button betätige, dauert es während des Verbindungsaufbaus doch etwas länger, bis das Einwählen abgebrochen wird, bzw. muss ich manchmal nach dem Beenden des Wählvorgangs noch einmal den Button drücken, da das Programm vorher offenbar nicht reagiert hat. Ich würde diese Verzögerung aber der RAS-Api zuweisen, da kann man meiner Ansicht nach programmiertechnisch nicht viel ändern. :gruebel: |
Re: [RAS] Verbindungsaufbau abbrechen
Dann wird es wohl so bleiben müssen wie es ist. Ich kann sicher noch etwas die Zeit verkürzen aber mehr ist wahrscheinlich wirklich nicht möglich.
Ich danke dir trotzdem für deinen Mühen hincapie :wink: Gruß Mazel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz