(Gast)
n/a Beiträge
|
Re: DFÜ-Verbindung aufbauen, ohne DFÜ-Eintrag zu nutzen
25. Apr 2005, 19:23
Ich habe da mal ganz schnell etwas vorbereitet. Im Anhang befindet sich das vollständige Projekt und die Includedateien.
Der Einfachheit halber ist es ein Konsolenprogramm, weil das den Code auf das nötigste beschränkt.
Das ist ab jetzt PUBLIC DOMAIN. Darf also beliebig weiterverwendet werden.
Einschränkungen: Dieser Quelltext funktioniert unverändert maximal unter NT4/2000 und Nachfolgern, jedoch nicht unter Win9x. Für letzteres wären Anpassungen notwendig.
Getestet wurde er mit Delphi 4 Pro unter Windows 2000.
Delphi-Quellcode:
program MiniDialer;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows;
{$INCLUDE Ras.pas}
function ListRASDevices(var NumDevices: DWORD): LPRASDEVINFOA; // Must be freed with GlobalFree()
var
Buffer, temp: LPRASDEVINFOA;
NumDev, SizeNeeded: DWORD;
i: Integer;
begin
result := nil;
RasEnumDevices(nil, @SizeNeeded, @NumDev);
Buffer := LPRASDEVINFOA(GlobalAlloc(GPTR, SizeNeeded));
if Assigned(Buffer) then
begin
Buffer^.dwSize := sizeof(RASDEVINFOA);
RasEnumDevices(Buffer, @SizeNeeded, @NumDev);
temp := Buffer;
// Iterate through devices!
for i := 0 to NumDev - 1 do
begin
Writeln(Format('%d -> %s [%s]', [i + 1, temp^.szDeviceName, temp^.szDeviceType]));
// Go to next entry in the list
temp := LPRASDEVINFOA(DWORD(temp) + sizeof(RASDEVINFOA));
end;
// Return buffer. It MUST BE FREED using GlobalFree()!
NumDevices := NumDev;
result := Buffer;
end;
end;
function CreatePbkEntry(
Phonebook,
EntryName,
DeviceName,
DeviceType,
NumberToDial,
Username,
Password: string
): Boolean;
var
dwError: DWORD;
pbk: PChar;
EntryParams: RASENTRYA;
DialParams: RASDIALPARAMSA;
begin
result := False;
if (Length(EntryName) > 0) then
begin
if (Length(PhoneBook) > 0) then
pbk := @PhoneBook[1]
else
pbk := nil;
dwError := RasValidateEntryName(pbk, @EntryName[1]);
if (dwError = ERROR_SUCCESS) then
begin
ZeroMemory(@EntryParams, sizeof(EntryParams));
// Parameters of RAS entry
EntryParams.dwSize := sizeof(EntryParams);
EntryParams.dwfOptions := RASEO_ModemLights or RASEO_SwCompression;
EntryParams.dwFramingProtocol := RASFP_Ppp;
EntryParams.dwfNetProtocols := RASNP_Ip;
lstrcpy(@EntryParams.szLocalPhoneNumber[0], @NumberToDial[1]);
lstrcpy(@EntryParams.szDeviceName[0], @DeviceName[1]);
lstrcpy(@EntryParams.szDeviceType[0], @DeviceType[1]);
dwError := RasSetEntryProperties(
pbk,
@EntryName[1],
@EntryParams,
sizeof(EntryParams),
nil,
0);
// Upon success set the password and username
if (dwError = ERROR_SUCCESS) then
begin
ZeroMemory(@DialParams, sizeof(DialParams));
// Dial parameters of an entry
DialParams.dwSize := sizeof(DialParams);
lstrcpy(@DialParams.szEntryName[0], @EntryName[1]);
lstrcpy(@DialParams.szUserName[0], @Username[1]);
lstrcpy(@DialParams.szPassword[0], @Password[1]);
dwError := RasSetEntryDialParams(pbk, @DialParams, false);
if (dwError <> ERROR_SUCCESS) then
Writeln('RasSetEntryDialParams() Fehler: ', dwError); // FIXME: Andere Fehlerbehandlung
end;
if (dwError <> ERROR_SUCCESS) then
Writeln('RasSetEntryProperties() Fehler: ', dwError); // FIXME: Andere Fehlerbehandlung
end; // FIXME: Fehlerbehandlung
end; // FIXME: Fehlerbehandlung
end;
var
devices, temp: LPRASDEVINFOA;
i, numdev: DWORD;
Device, DeviceType: string;
begin
// Initialisiere die Include-Datei, bzw. die enthaltenen APIs
InitRAS();
Writeln('Wähle ein Gerät, über welches die Verbindung erfolgen soll:');
devices := ListRASDevices(numdev);
Write('Gib die Zahl des Eintrags an: ');
Readln(i);
// Find the device chosen
if (i > 0) and (i <= numdev) then
begin
i := i - 1;
temp := LPRASDEVINFOA(DWORD(devices) + sizeof(RASDEVINFOA) * i);
SetString(Device, temp^.szDeviceName, lstrlen(@temp^.szDeviceName[0]));
SetString(DeviceType, temp^.szDeviceType, lstrlen(@temp^.szDeviceType[0]));
Writeln(Format('Folgendes Gerät gewählt: %s [%s]', [Device, DeviceType]));
GlobalFree(HGLOBAL(devices)); // Free buffer with RAS devices
end
else
begin
Writeln('Ungültiges Gerät ausgewählt!');
GlobalFree(HGLOBAL(devices)); // Free buffer with RAS devices
ExitProcess(0);
end;
CreatePbkEntry('',
'Testeintrag',
Device,
DeviceType,
'0193670',
'msn@easysurfer-power.de',
'msn'
);
Writeln('Press ENTER to quit'); Readln;
end.
|