Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Как программно создать Dial-Up соединение ?   Найти похожие ветки 

 
Style ©   (2005-04-21 15:26) [0]

Функции которая это делает, я так и не нашел.

Хочется просто создать стандартное DialUp соединениеи вписать в него логин, пароль и телефон.

В XP, NT 2000 у меня получилось подправить rasphonebook.pbk и добавить туда свое соединение. Затем, вызвать стандартный диалог (подключения) и помощью SendMessage нужым окнам, заполнить его логин, пароль...
Но вот в 95/98, соединения хранятся в непонятном для меня виде в реестре и создать их самому у меня так и не получилось :(

Может кто чего подскажет по этому поводу?
Заранее благодарен.


 
Ученик   (2005-04-21 23:26) [1]

Наверно, поможет RasSetEntryProperties, по поиску можно найти примеры использования, на www.torry.net скорее всего есть бесплатные компоненты с исходниками (RAS)


 
Style ©   (2005-04-22 09:59) [2]


> Наверно, поможет RasSetEntryProperties, по поиску можно
> найти примеры использования, на www.torry.net скорее всего
> есть бесплатные компоненты с исходниками (RAS)


Нет, это не то..
Сначала Entry нужно создать. в RASAPI есть функция, но она вызывает стандартный диалог добавления подключения.. А мне нужно ручками создать Entry.


 
Style ©   (2005-04-22 15:08) [3]

Люди, ну помогите плиз, очень нужно!


 
Ученик   (2005-04-22 22:05) [4]

The RasSetEntryProperties function changes the connection information for an entry in the phone book or creates a new phone-book entry.


 
Raider ©   (2005-04-23 00:34) [5]

ftp://delphi-jedi.org/api/RAS.zip, пример прилагается.


 
Style ©   (2005-05-12 12:50) [6]

>>Ученик   (22.04.05 22:05) [4]
>>The RasSetEntryProperties function changes the connection >>information for an entry in the phone book or creates a new >>phone-book entry.

Смотрю хелп по WinApi -
Так же там написано что эта функция не работает в Win95.

У кого нито хоть получилось создать подключение в Win98 или в 95 с помощью RAS.
В общем я замучался и конкретного примера не нашел -
пришлось разобраться в алгоритме как Microsoft хранит и шифрует соединения покрайней мере в 98 винде в реестре :0)

В общем так мона создавать соединения в 98. Пока заполняю только имя соединения модем и телефон.


uses Ras, Registry;

const

Head =  #$41+#$42+#$30+#$32+#$07+#$00+#$00+#$00+#$20+#$00+#$00+#$00+#$21+#$00+#$00+#$00
      +#$07+#$00+#$00+#$00+#$2B+#$00+#$00+#$00+#$27+#$00+#$00+#$00+#$37+#$00+#$00+#$00
      +#$00;

Connect = #$50+#$50+#$50+#$00+#$0C+#$00+#$00+#$00+#$05+#$00+#$00+#$00+#$07+#$00+#$00+#$00+#$9C+#$00+#$00+#$00+#$08+#$01+#$00+#$00;

Tail =  #$6D+#$6F+#$64+#$65+#$6D+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00
      +#$00+#$00+#$00+#$6C+#$00+#$00+#$00+#$03+#$00+#$01+#$00+#$08+#$00+#$08+#$00+#$60
      +#$00+#$00+#$00+#$01+#$00+#$00+#$00+#$1C+#$00+#$00+#$00+#$00+#$C2+#$01+#$00+#$15
      +#$20+#$00+#$00+#$00+#$00+#$0A+#$00+#$0A+#$00+#$08+#$00+#$00+#$11+#$13+#$00+#$00
      +#$00+#$38+#$7E+#$06+#$00+#$00+#$00+#$30+#$00+#$00+#$00+#$30+#$00+#$00+#$00+#$30
      +#$00+#$00+#$00+#$30+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$3C
      +#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$01+#$00+#$00+#$00+#$90
      +#$01+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00+#$00;

type
 TForm1 = class(TForm)
   Label1: TLabel;
   Label2: TLabel;
   edName: TITEdit;
   edPhone: TITNumericEdit;
   btnOK: TITButton;
   procedure btnOKClick(Sender: TObject);
 private
   procedure CreateConnection(Name, Phone: string);
   function GetControlSumm(ConnectionName: string): byte;
   function GetFirstModem: string;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

function TForm1.GetFirstModem: string;
var
lpSize: integer;
lpDevices: integer;
Info: array of TRASDEVINFOA;
i: integer;
begin
 result := "";
 lpSize := 0;
 lpDevices := 0;
 SetLength(Info, 1);

 RasEnumDevicesA(nil,lpSize,lpDevices);

 SetLength(Info, lpDevices);

 ZeroMemory(@Info[0],SizeOf(TRASDEVINFOA));
 Info[0].dwSize := SizeOf(TRASDEVINFOA);
 RasEnumDevicesA(@Info[0],lpSize,lpDevices);

for i := 0 to lpDevices-1 do
begin
   if(lowercase( Trim(Info[i].szDeviceType) ) = "modem") then
   begin
     if(Trim(Info[i].szDeviceName) <> "") then
     begin
       result := Trim(Info[i].szDeviceName);
       break;
     end;
   end;
end;
end;

procedure TForm1.CreateConnection(Name, Phone: string);
var
 i: integer;
 xorbyte: byte;
 ConnectText: string;
 Reg: TRegistry;
 pstr: pchar;
 ZeroStr: string;
begin
 xorbyte := GetControlSumm(Name);

 ZeroStr := "";
 for i := 1 to 128 do
  ZeroStr := ZeroStr + #0;

 ZeroStr := copy(GetFirstModem + ZeroStr, 1, 128);
 ConnectText := Head + Phone + #0 + Connect + ZeroStr + #0 + Tail;

 ConnectText[25] := char($22 + Length(Phone) ) ;
 ConnectText[29] := char($32 + Length(Phone) ) ;

 Reg := TRegistry.Create;
 try
   Reg.RootKey:=HKEY_CURRENT_USER;

   Reg.OpenKey("RemoteAccess\Addresses",False);

  pstr := allocmem(Length(ConnectText));

  try

     for i := 0 to Length(ConnectText)-1 do
      pStr[i] := char(byte(ConnectText[i+1]) xor XorByte);

      pStr[2] := char(XorByte xor $30 ) ;

      Reg.WriteBinaryData(Name, PStr^, Length(ConnectText));
  finally
    freeMem(pstr);
  end;

 finally
   Reg.Free;
 end;

end;

function TForm1.GetControlSumm(ConnectionName: string): byte;
var
 i: integer;
begin
 result := 0;
 for i := 1 to Length(ConnectionName)  do
 begin
   result := result + byte(ConnectionName[i]);
 end;
end;

{$R *.dfm}

procedure TForm1.btnOKClick(Sender: TObject);
begin
 CreateConnection(edName.Text, edPhone.Text);
end;


А логин и пароль можно заполнять на форме стандартного dialerа из wininet.dll который одинковый во всех виндах, с помощью SendMessage(WM_SETTEXT...


 
VMcL ©   (2005-05-12 15:54) [7]

>Смотрю хелп по WinApi -
Так же там написано что эта функция не работает в Win95.


Client: Requires Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, Windows 98, or Windows 95 OSR2 and later.
Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.


 
Style ©   (2005-05-12 16:08) [8]

VMcL ©   (12.05.05 15:54) [7]
Ну не выдумал же я...

Win32s.hlp

DWORD RasSetEntryProperties - New Windows NT

Quick Info:

Win95 - NO!
Win32s - NO!


 
VMcL ©   (2005-05-12 17:44) [9]

>>Style ©   (12.05.05 16:08) [8]

Я MSDN"у как-то больше доверяю.


 
Style ©   (2005-05-13 09:44) [10]

>>Я MSDN"у как-то больше доверяю.
у меня его не было под рукой, и в инет доступ был ограничен :(
в любом случае свою задачу я выполнил ;0)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.039 c
6-1110566218
Arazel
2005-03-11 21:36
2005.07.11
Передача файлов удаленна через сокет ВОЗМОЖНО ЛИ ЭТО?


6-1113053840
Виталик
2005-04-09 17:37
2005.07.11
Получить IP в виде байтового массива


1-1118462122
!Trinix
2005-06-11 07:55
2005.07.11
Free or Destroy


1-1119358489
intaari
2005-06-21 16:54
2005.07.11
Прога не находит класс при старте программы


1-1119481020
TrueCoder
2005-06-23 02:57
2005.07.11
VerticalScrollBar в TListBox всегда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский