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

Вниз

RasAPI для непродвинутых    Найти похожие ветки 

 
250   (2005-01-09 12:30) [0]

Прочитал очень хорошую статью на
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=356
И все бы ничего, но мне нужно до дозвона выбрать не только соединение, но и телефон по которому нужно дозвониться, а как это сделать не понял. Вот это ничего не дает.
RasGetEntryPropertiesA(nil,DialParams.szEntryName,@DialParams,DialParams.dwSize,nil,devnfo);
phone:=String(DialParams.szPhoneNumber);

Подскажите подмастерью :)


 
Piter ©   (2005-01-09 14:56) [1]

250   (09.01.05 12:30)
phone:=String(DialParams.szPhoneNumber);


и что ты хотел сделать этой строчкой? Что такое phone? Простая текстовая переменная?

Очень интересно, а ты вообще знаешь, что при присвоении, левой части присваивается значение правой части?


 
Alexander Panov ©   (2005-01-09 17:40) [2]

Piter ©   (09.01.05 14:56) [1]
и что ты хотел сделать этой строчкой? Что такое phone? Простая текстовая переменная?

Очень интересно, а ты вообще знаешь, что при присвоении, левой части присваивается значение правой части?


Непонятно, вопрос твой в чем?
В этой строке присваивание. И дальше?


 
250   (2005-01-09 20:11) [3]

Piter ©   (09.01.05 14:56) [1]
Очень интересные сведения :)
DialParams.szPhoneNumber
Телефон там, По описанию. Однако вместо него 0
А нужен адрес телефонной книги (первая переменная), но его вытащить тоже не удается.
Ты вообще-то RasApi юзал или просто так пишешь ?


 
250   (2005-01-09 20:13) [4]

мне нужно до дозвона выбрать не только соединение, но и телефон


 
Piter ©   (2005-01-09 20:23) [5]

Alexander Panov ©   (09.01.05 17:40) [2]
В этой строке присваивание. И дальше?


что дальше? Ты меня спрашиваешь что дальше? Я то откуда знаю?

Да, там присваивание. Только вместо того, чтобы установить номер телефона, он там считывается. Нет?
Или я что-то не понимаю?
Может ты, Саш, мне подскажешь что к чему?


 
Kerk ©   (2005-01-09 20:31) [6]

Piter ©   (09.01.05 20:23) [5]
RasGetEntryPropertiesA - заполняет структуру DialParams
соответственно в DialParams.szPhoneNumber должен быть телефон

===
прежде чем что-то писать, попытайся подумать :)


 
250   (2005-01-09 20:52) [7]

>Kerk ©   (09.01.05 20:31) [6]
Правильно! Должен. Только нет его там. А почему и где брать непонятно. По адресу
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=356
приведен модуль дозвона
но там нет выбора номера, а в
rasapi.pas от этого же проекта есть функция
RasGetEntryPropertiesA, но получить что-то либо не удается.
Или все это не годится для XP или ... ? Может кто пробовал ?


 
maxz ©   (2005-01-09 21:11) [8]

Вот интересный пример. откуда скачал - не помню. поэтому выкладываю на своем сайте
http://maxsukhotinsoft.com/RAS.RAR


 
Kerk ©   (2005-01-09 21:14) [9]

250   (09.01.05 20:52) [7]
посмотри чего там функция возвращает


 
250   (2005-01-09 22:05) [10]

>посмотри чего там функция возвращает
(*RASAPI*)function RasGetEntryPropertiesA(lpszPhonebook, szEntry: PAnsiChar; lpbEntry: Pointer;
(*RASAPI*)                                var lpdwEntrySize: Longint; lpbDeviceInfo: Pointer;
(*RASAPI*)                                var lpdwDeviceInfoSize: Longint): Longint; stdcall;
Ну и что же ?
А примерчик посмотрю, но уменя черное подозрение, что в XP что-то не так. Просто я уже их много накачал, все старые и нигде телефонную книгу или телефон не выдергивает.


 
250   (2005-01-09 22:18) [11]

Piter ©   (22.12.04 09:55) [3]
Как ты коварен и скрытен! :)
Оказывается он уже все рассказал раньше:
Piter ©   (09.01.05 20:23) [5]
http://delphimaster.net/view/4-1103657293/
Проверим. Только боюсь что XP опять не даст... :)


 
Kerk ©   (2005-01-09 22:20) [12]

250   (09.01.05 22:05) [10]
ты так и не сказал, какой результат возвращает функция


 
250   (2005-01-09 22:39) [13]

Longint; stdcall;
А что я еще скажу, если описаня у меня нет ? Надо лезть в MSDN... Но толку-то если для разных ОС разные результаты.


 
Kerk ©   (2005-01-09 22:47) [14]

250   (09.01.05 22:39) [13]
аааа.. :)))
меня интересует конкретное значение функции после выполнения... 1 или 2 или 3 или 1244 .. :))


 
250   (2005-01-09 23:12) [15]

oooooooo :)
Хочешь сказать, что не выполняется ? Что тебе даст значение результата если кода не описаны нигде ? :) Если ты знаешь, что она должна вернуть, то напиши.


 
Kerk ©   (2005-01-09 23:20) [16]

MSDN спасет отца русской демократии.
Return Values
If the function succeeds, the return value is zero.

If the function fails, the return value can be one of the following error codes.

Value Meaning
ERROR_INVALID_PARAMETER The function was called with an invalid parameter.
ERROR_INVALID_SIZE The value of the dwSize member of the lpRasEntry is too small.
ERROR_BUFFER_INVALID The address or buffer specified by lpRasEntry is invalid.
ERROR_BUFFER_TOO_SMALL The buffer size indicated in lpdwEntryInfoSize is too small.
ERROR_CANNOT_OPEN_PHONEBOOK The phone book is corrupted or is missing components.
ERROR_CANNOT_FIND_PHONEBOOK_ENTRY The phone-book entry does not exist.


 
250   (2005-01-09 23:34) [17]

>Kerk ©   (09.01.05 23:20) [16]
Плюнь! Пустое это. Эта функция все равно ничего не вернет в XP.
Piter все уже раскопал :)
Здесь читай
http://delphimaster.net/view/4-1103657293/


 
Piter ©   (2005-01-09 23:53) [18]

Kerk ©   (09.01.05 20:31) [6]
RasGetEntryPropertiesA - заполняет структуру DialParams


а какой тип имеет структура DialParams? TRasDialParams?

Может, тебе стоит в хелп взглянуть, а?

прежде чем что-то писать, попытайся подумать :)

Это ты мне говоришь, Kerk? А сам последовать своему примеру не пробовал?

P.S. Лично я так и не понял, если человеку нужно задать номер телефона - какогохрена он его пытается наоборот узнать?

Странные вы какие-то...


 
Piter ©   (2005-01-10 00:05) [19]

250   (09.01.05 23:34) [17]
Плюнь! Пустое это. Эта функция все равно ничего не вернет в XP


какая функция ничего не вернет? RasGetEntryPropertiesA? С каких это пор функции WinApi в WindowsXP ничего не возвращают?

Piter все уже раскопал

и что же такого я интересно раскопал?


 
Kerk ©   (2005-01-10 00:26) [20]

250   (09.01.05 23:34) [17]
вернет
Requirements
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.
Unicode: Implemented as Unicode and ANSI versions. Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.
Header: Declared in Ras.h.
Library: Use Rasapi32.lib.


 
250   (2005-01-10 10:20) [21]

>Piter ©   (10.01.05 00:05) [19]
Раскопал как сделать копию телефонной книги.
А мне нужно не просто задать номер телефона, а выбрать его из нескольких хранящихся в телефонной книге!
Поэтому я и пытался получить хоть один.


 
www.Vlad.uk   (2005-01-10 12:03) [22]


>Что такое phone? Простая  текстовая переменная?

phone=телефон!
Английский язык учить надо!


 
250   (2005-01-10 12:43) [23]

>Английский язык учить надо!
Какой ты умный :) Действительно Phone:string но не в энтим дело.

Нашел в инете какую-то ценность на С. Они пытаются найти адрес книги:
http://www.relib.com/forums/topic.asp?id=793520
Переведите с китайского плиз кто что-то из этого поймет :)


 
250   (2005-01-10 12:51) [24]

Вот что они пишут:
........

Только вот как определить путь к адресной книге у меня не получилось.
Если только подсовывать его.
Он как INI файл

[MyConnect]
...
...
...
PhoneNumbre=номер1
...
PhoneNumbre=номер2
 
Автор: boombastik  Дата: 05.09.2003 21:35    

Ну это совсем просто делается: используется атрибут szPhonebookPath структуры RASENTRYNAME.
Например вот так:
WORD dwCb = sizeof(RASENTRYNAME);
DWORD dwErr = ERROR_SUCCESS;
// Get EntriesDWORD dwEntryNames = 0;RASENTRYNAME RasEntryName;RASENTRYNAME* pRasEntryNames;RasEntryName.dwSize = sizeof(RASENTRYNAME);
dwErr = RasEnumEntries(NULL, NULL, &RasEntryName, &dwCb, &dwEntryNames);if (dwEntryNames < 1)  return;
pRasEntryNames = new RASENTRYNAME[dwEntryNames];
pRasEntryNames[0].dwSize = sizeof(RASENTRYNAME);
dwErr = RasEnumEntries(NULL, NULL, pRasEntryNames, &dwCb, &dwEntryNames);
// Loop through entriesif (dwErr == ERROR_SUCCESS){  DWORD dwEntryInfoSize = 0;  
RASENTRY* pRasEntry;  
afxDump << _T("Phone-book entries in the default phone book:\n\n");  
for (DWORD i = 0; i < dwEntryNames; i++)  {    
// Display name and phonebook path of an entry    afxDump << pRasEntryNames[i].szEntryName << _T(" : ") << pRasEntryNames[i].szPhonebookPath << _T("\n");  }}else{  afxDump << _T("RasEnumEntries failed: Error = ") << dwErr << _T("\n");}
// Cleaningdelete[] pRasEntryNames;

Однако этот атрибут поддерживается только в новых версиях Windows - начиная с Windows 2000 (насколько мне известно в Windows 9x эти данные вообще хранились в реестре), поэтому, чтобы проект откомпилировался нормально необходимо изменить значение WINVER в файле stdafx.h проекта на соответствующее Windows 2000 или выше.

Например:
// stdafx.h : include file for standard system include files,...// Было/*#ifndef WINVER#define WINVER 0x0400#endif*/// Стало#ifndef WINVER#define WINVER 0x0500#endif...

Ну и как это превести на DELPHI ?


 
Piter ©   (2005-01-10 16:53) [25]

250   (10.01.05 12:51) [24]
Только вот как определить путь к адресной книге у меня не получилось


а зачем определять адрес, если можно подставить nil и будет телефонная книга по умолчанию (которой и пользуется стандартный дозвонщик windows)

P.S. 250, определись в какой теме общаешься..


 
250   (2005-01-10 16:59) [26]

>Piter ©   (10.01.05 16:53) [25]
Так мне не надо по умолчанию. Мне нужно выбрать оттуда номера телефонов (их несколько для каждого соединения) например в combobox, что бы потом выбирать по какому дозваниваться.


 
250   (2005-01-10 17:05) [27]

>>250   (10.01.05 14:46) [7]
>>Как получит путь к файлу PBK соединения
>чего?
Это файл с параметрами соединения в XP.
rasphone.pbk  типа ini
Как найти к нему путь ? И главной, что он может быть изменен системой.


 
Piter ©   (2005-01-10 20:44) [28]

250   (10.01.05 16:59) [26]
Так мне не надо по умолчанию. Мне нужно выбрать оттуда номера телефонов (их несколько для каждого соединения) например в combobox, что бы потом выбирать по какому дозваниваться


бли-и-и-ин... Ты читаешь или как?

Все эти телефоны видны в стандартном виндовом дозвонщике? Значит, они все в стандартной телефонной книге, все номера хранятся там.

Тебе что нужно? Или у тебя какая-то СТОРОННЯЯ программа создала отдельную адресную книгу и ты оттуда хочешь выбрать номера телефонов? Дык тогда читай документацию на эту стороннюю программу.

rasphone.pbk  

А я прочитал по русски, РВК - типа ракетно-военный комплекс :)


 
250   (2005-01-10 22:57) [29]

>Все эти телефоны видны в стандартном виндовом дозвонщике?
Блин ! Это ты не читаешь. Их нет в звонилке. Только в настройках соединения когда ты его редктируешь. А выдернуть с помощию твоей RAS можно только первый из них.
И нет никакой сторонней. Когда создаешь телефоны, указываешь дополнительные, а win кладет все это в PBK. НО pbk конкретного юзера! ЗадачаЖ ДЕРНУТЬ эту pbk и вытащить все телефоны к каждому соединению. Значит нужно знать где храниться pbk юзера и как ее читать.


 
Piter ©   (2005-01-10 23:54) [30]

Ну почему, почему я такой добрый? Не знаю...
Надо к экзаменам готовиться, а я тут фигней страдаю...

Посколько я неоправданно добрый, то вот я набросал:

{кидаем на форму ListBox1: TListBox; }

procedure TForm1.Button1Click(Sender: TObject);
const
 RASBASE = 600;
 ERROR_BUFFER_TOO_SMALL = RASBASE + 3;
var
 ListRasEntryName: array of TRasEntryName;
 pVariantRasEntry: PRasEntry;
 AlternativePhoneNumber: PChar;
 SizeRasEntryName, SizeRasEntry, NumEntries: cardinal;
 i: integer;
begin
 ListBox1.Clear ;
 SizeRasEntryName := SizeOf(TRasEntryName);
 SetLength(ListRasEntryName, 1);
 ListRasEntryName[0].dwSize := SizeRasEntryName;
 if RasEnumEntries(nil, nil, @ListRasEntryName[0], SizeRasEntryName,
     NumEntries) = ERROR_BUFFER_TOO_SMALL then
   begin
     SetLength(ListRasEntryName, NumEntries);
     for i:=0 to High(ListRasEntryName) do
       ListRasEntryName[i].dwSize :=  SizeOf(TRasEntryName);
     RasEnumEntries(nil, nil, @ListRasEntryName[0], SizeRasEntryName, NumEntries);
   end;
 if NumEntries = 0 then exit;
 for i:=0 to High(ListRasEntryName) do
   with ListBox1.Items, ListRasEntryName[i] do
     begin
       Add("***** " + szEntryName + "*****");
       SizeRasEntry := 0;
       RasGetEntryProperties(nil, szEntryName, nil, SizeRasEntry, nil, nil);
       pVariantRasEntry := AllocMem(SizeRasEntry);
       try
         pVariantRasEntry^.dwSize :=SizeOf(TRasEntry);
         if RasGetEntryProperties(nil, szEntryName, pVariantRasEntry,
             SizeRasEntry, nil, nil) = 0 then
           with pVariantRasEntry^ do
             begin
               Add("Устройство связи: " + pVariantRasEntry^.szDeviceName);
               Add("Телефоны:");
               Add(szLocalPhoneNumber);
               if dwAlternateOffset > 0 then
                 begin
                   AlternativePhoneNumber := PChar( Pointer(LongWord(pVariantRasEntry)
                       + dwAlternateOffset));
                   while lstrlen(AlternativePhoneNumber) > 0 do
                     begin
                       Add(AlternativePhoneNumber);
                       inc(AlternativePhoneNumber, lstrlen(AlternativePhoneNumber) + 1 )
                     end;
                 end;
             end
         else
           Add("Не удалось получить информацию о соединении");
       finally
         FreeMem(pVariantRasEntry);
         end;
       Add("");
     end;
end;

{ код писал наспех, если что - поправите }


Я думаю это снимет все вопросы по поводу каких-то левых адресных книг...

Одно жалко - тупо скопируют код и нихрена в нем даже и не разберутся...

250   (10.01.05 22:57) [29]
Их нет в звонилке. Только в настройках соединения когда ты его редктируешь. А выдернуть с помощию твоей RAS можно только первый из них


ну ОТКУДА, ОТКУДА ТЫ ВЗЯЛ ЭТУ ИНФОРМАЦИЮ?
Почему люди свои левые домыслы так легко выдают за истину, даже нихрена не разобравшись в впоросе? Кто ответит?

Что-то там левое прочитал на каком-нибудь форуме, что-то там левое себе подумал и тут же преподносит это как истину. LMD?


 
Piter ©   (2005-01-10 23:55) [31]

250   (10.01.05 22:57) [29]
А выдернуть с помощию твоей RAS


RAS никак не моя. Я, к сожалению, не Билл Гейтс


 
250   (2005-01-11 21:22) [32]

Спасибо. Ты почти гений!

>Почему люди свои левые домыслы так легко выдают за истину, даже нихрена не разобравшись в впоросе? Кто ответит?
Не решаемая проблема. Никто не сможет ответить. Можно только предполагать, что они слишком тупы :)

>RAS никак не моя.
:)

>Я, к сожалению, не Билл Гейтс
А так похож ! :)
Но быстро ты это раскрутил. В инете нигде нет. Очень...


 
Piter ©   (2005-01-12 01:16) [33]

250   (11.01.05 21:22) [32]
Спасибо. Ты почти гений!


это означает, что у тебя все получилось?

Можно только предполагать, что они слишком тупы :)

то есть, ты считаешь, что слишком туп?

Ты мне ответь, вот откуда ты взял эту информацию:

250   (10.01.05 22:57) [29]
Только в настройках соединения когда ты его редктируешь. А выдернуть с помощию твоей RAS можно только первый из них.


На основе чего ты это заключил? Просто в голову что-то ударило, интуиция или что? Мне правда интересно, откуда люди берут такую информацию?

В инете нигде нет

а знаешь, что самое интересное? Что в документации SDK это все есть (я именно по ней пример и делал). Какой интересно можно сделать вывод?



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

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

Наверх





Память: 0.55 MB
Время: 0.036 c
3-1106659874
Behemoth
2005-01-25 16:31
2005.02.27
Как переименовать MSSQLSERVER


1-1107798214
Алексей Петухов
2005-02-07 20:43
2005.02.27
Clipboard


1-1108324327
mr-jack
2005-02-13 22:52
2005.02.27
события и всё такое


1-1108126253
snake_r
2005-02-11 15:50
2005.02.27
выделение в StringGrid


3-1107158663
MAVOR
2005-01-31 11:04
2005.02.27
Заменить строчные на заглавные





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский