PDA

View Full Version : Dial



Evil 69
چهارشنبه 14 آذر 1386, 01:51 صبح
سلام
من میخاستم بدونم چطوری میشه توی vb.net شماره تلفن یک نفر رو گرفت و با اون صحبت کرد
با تشکر

saeed_rezaei
چهارشنبه 14 آذر 1386, 10:18 صبح
سلام. توی این لینک یه کمی چیز پیدا میشه.
http://barnamenevis.org/forum/showthread.php?t=76594

saman_itc
چهارشنبه 14 آذر 1386, 21:58 عصر
برنامه های TAPI :

برای نوشتن برنامه های کاربردی با استفاده از TAPI بایستی ابتدا در مورد سطح سرویسی که می خواهیم ارائه دهیم تصمیم گیری کنیم . برای مثال برای نوشتن یک برنامه شماره گیر تلفن نیاز به استفاده کامل از TAPI نیست و می توان از قابلیتهای خود ویندوز در این زمینه استفاده کرد ( Assisted Telephony )
دومین مطلبی که باید مورد توجه قرار داد اینست که می خواهیم از TAPI 2.x استفاده کنیم یا از TAPI 3.x . تفاوت ایندو آنست که TAPI ورژن ۲ یک API برمبنای C است در حالیکه ورژن ۳ آن بر مبنای تکنولوژی COM می باشد . در بخشهای بعدی مطالب بیشتری در مورد تفاوتهای این دو نسخه بیان خواهم کرد .
بخشهای اصلی یک برنامه کامل TAPI عبارتند از :

۱ - TAPI Initialization : شامل load کردن TAPI dll ، اتصال به TAPI Server ، مذاکره در مورد ورژن TAPI و برپاسازی سیستم اطلاع رسانی event می باشد .

۲ - Session Control : مقداردهی اولیه ، دریافت و کنترل تماسها

۳ - Device Control : دریافت و تنظیم اطلاعات دستگاه

۴ - Media Control : تشخیص و یا تولید تونها و ارقام ، کنترل stream

۵ - TAPI Shutdown : آزاد سازی منابع

دیاگرام زیر این مراحل را بهتر نشان می دهد :



مقداردهی اولیه TAPI :

عملکرد درست اجزای TAPI نیاز به برپاسازی محیط ارتباطی روی کامپیوتر مورد نظر دارد . مراحل این امر عبارتند از :

۱ - نصب TAPI : زمانیکه سخت افزار و یا نرم افزار برای اولین بار به کامپیوتر اضافه می شود انجام می گیرد . جزئیات کار به سیستم عامل و نرم افزار بستگی دارد .

۲ - مقداردهی ابتدائی : ساخت اشیا و مسیرهای ارتباطی

۳ - مذاکره در مورد ورژن TAPI : برای اطمینان از اینکه اجزای TAPI قادر به تبادل داده ها باشند .

۴ - استخراج اطلاعات منابع : بدست آوردن اطلاعاتی در مورد دستگاهی که می توان از آن در برنامه TAPI مورد نظرمان استفاده نمود .

۵ - Event notification : برپاسازی سیستم اطلاع رسانی event

مقداردهی اولیه TAPI در ویژوال بیسیک :

از منوی Project گزینه References را انتخاب کرده و از لیست مربوطه مورد Microsoft TAPI 3.0 Type Library را انتخاب کنید .
حال وارد بخش کد نویسی فرمتان شوید و متغیر objTAPI را بصورت زیر تعریف کنید :
Dim objTapi As TAPI

سپس در بخش مربوط به Form Load شی objTAPI را بصورت زیر ایجاد می کنیم :
Set objTapi = New TAPI

همانطور که در بخشهای قبلی گفته شد ، قبل از فراخوانی هر تابع TAPI ابتدا بایستی آنرا مقداردهی اولیه کنیم . برای مقداردهی اولیه کردن شی TAPI عبارت زیر را بنویسید :
Call objTapi.Initialize
انتخاب یک آدرس :
کد زیر نشان می دهد که چگونه می توان با استفاده از شی TAPI در ویژوال بیسیک منابع تلفنی در دسترس را برای یک آدرس که بتواند یک مجموعه مشخص از نیازها را مدیریت کند ، بررسی کرد .
توجه داشته باشید که قبل از انجام این کار بایستی عمل مقداردهی اولیه TAPI را که در بخش قبل ررسی شد ، انجام دهید .

نکته : در کد زیر عمل error checking انجام نگرفته است و برای استفاده از کد زیر در برنامه های واقعی بایستی بخش بررسی خطا را به آن اضافه کنید .
۱ - تعریف یک شی آدرس و یک شی مجموعه آدرس :
Dim gobjAddress As ITAddress
Dim objCollAddresses As ITCollection

۲ - تنظیم شی objCollAddress بعنوان یک مجموعه آدرس از شی objTapi :
Set objCollAddresses = objTapi.Addresses

۳ - پیدا کردن آدرسی که بتواند از واسط مورد نظر ما پشتیبانی کند :




bFound = False
For indexAddr = 1 To objCollAddresses.Count
Set objCrtAddress = objCollAddresses.Item(indexAddr)x
Set objMediaSupport = objCrtAddress
Set objAddressCapabilities = objCrtAddress

If objMediaSupport.QueryMediaType( nSelectedType ) x
bFound = True
End If

Set objAddressCapabilities = Nothing
Set objMediaSupport = Nothing
Set objCrtAddress = Nothing

If bFound = True Then Exit For
Next indexAddr



در صورتیکه آدرس مورد نظزر پیدا شود برنامه از حلقه خارج شده و gobjAddress یک آدرس قابل استفاده خواهد بود :
Set gobjAddress = objcollAddresses.Item(indexAddr)x

Handling در TAPI :

کد زیر شامل یک event handler ساده برای TAPI ، رجیستر کردن واسط event ، تنظیم فیلتر event و رجیستر کردن تمام فراخوانیهای دادن اخطار است . هدف اصلی از این کد اینست که مطمئن شویم بخشی از TAPI که event ها را دریافت می کند پردازشی را قبل از انتقال به بخشهای دیگر انجام دهد .

تعاریفها :



Dim WithEvents gobjTapiWithEvents As TAPI
Attribute gobjTapiWithEvents.VB_VarHelpID = -1
Dim glRegistrationToken As Long

Const TAPI3_CALL_EVENTS =TE_CALLMEDIA Or
TE_CALLNOTIFICATION Or TE_CALLSTATE



تنظیم eventfilter بصورتیکه تمام event های تعریف شده برای TAPI را بپذیرد :



objTapi.EventFilter = TAPI3_CALL_EVENTS


رجیستر کردن event ها :
Set gobjTapiWithEvents = objTapi
Dim fOwner As Boolean, fMonitor As Boolean
Dim lMediaTypes As Long, lCallbackInstance As Long

fOwner = True
fOwner = True
fMonitor = False
lMediaTypes = TAPIMEDIATYPE_AUDIO
lCallbackInstance = 1



glRegistrationToken = gobjTapi.RegisterCallNotifications(gobjAddress,fMo nitor,
fOwner,lMediaTypes,lCallbackInstance)x


انتخاب یک ترمینال :

+ قبل از اینکه یک ترمینال را برای برقراری ارتباط انتخاب کنید بایستی TAPI Initialization و عمل انتخاب آدرس را انجام داده باشید .

ابتدا یک متغیر از نوع ITBasicCallControl ( واسط کنترل تماس ) تعریف می کنیم :
Dim objCallControl As ITBasicCallControl
Set objCallControl = gobjReceivedCallInfo

سپس یک متغیر از نوع ITTerminalSupport ( کوئری از شی آدرس ) تعریف می کنیم :
Dim objTerminalSupport As ITTerminalSupport
Set objTerminalSupport = gobjAddress

سپس متغیر ترمینال را تعریف کرده و توسط شی objTerminalSupport یک ترمینال را برای آن استخراج می کنیم :

Dim objTerminal As ITTerminal
Set objTerminal = objTerminalSupport.GetDefaultStaticTerminal(lMedia Type, dir)x

در اینجا دیگر نیازی به شی objTerminalSupport نیست بنابراین آنرا آزاد می کنیم :
Set objTerminalSupport = Nothing

سپس نیاز به تعریف شی objStreamControl برای کنترل ترمینال است :



Dim objStreamControl As ITStreamControl
Set objStreamControl = objCallControl


در صورتیکه این شی ایجاد شود ، به ازای استریم های موجود در ITCollection امکان ایجاد ترمینال در یک حلقه for بررسی می شود و ترمینال مناسب انتخاب می گردد :



If Not (objStreamControl Is Nothing) Then
Dim objITCollStreams As ITCollection

Set objITCollStreams = objStreamControl.Streams

Dim nIndex As Long, objCrtStream As ITStream

For nIndex = 1 To objITCollStreams.Count
Set objCrtStream = objITCollStreams.Item(nIndex)x
If objCrtStream.MediaType = lMediaType Then
If objCrtStream.Direction = dir Then
Call objCrtStream.SelectTerminal(objTerminal)x
End If
End If
Set objCrtStream = Nothing
Next nIndex

Set objITCollStreams = Nothing
Set objStreamControl = Nothing
End If



ایجاد یک تماس ( Make a Call ) :
+ قبل از این بخش بایستی مراحل TAPI Initialization و عمل انتخاب آدرس انجام شده باشد .
این بخش برای ایجاد یک شی تماس ، بررسی و مشخص کردن استریمی که با این تماس در ارتباط است ، انتخاب و ایجاد ترمینالهای مناسب و کامل کردن ارتباط استفاده می شود .
قبل TAPI Initialization و عمل انتخاب آدرس و انتخاب ترمینال انجام شده باشد .
در ابتدا با استفاده از متد CreateCall یک شی تماس ساخته می شود :
Set gobjCall = gobjOrigAddress.CreateCall(strDestAddress, nSelectedType,lMediaTypes)x

سپس در اینجا بایستی کدی که در بخش اول این درس برای انتخاب ترمینال نوشته شد آورده شود :
}
Select Terminal Code
{

سپس بایستی دستور Connect اجرا شود :
gobjCall.Connect (False)x

False بدین معناست که ارتباط بصورت آسنکرون برقرار می شود .

دریافت یک تماس :

کد زیر برای یافتن و یا ایجاد یک ترمینال مناسب برای دریافت یک تماس بکار می رود . بایستی توجه داشته باشید که قبل از اجرای کد زیر بایستی مراحل مقداردهی اولیه ، انتخاب یک آدرس و رجیسر کردن event ها را انجام دهید . همچنین در کد زیر بایستی مرحله انتخاب ترمینال را نیز انجام دهید . توجه داشته باشید که در کد زیر متغیر pEvent یک اشاره گر برای واسط ITCallNotificationEvent است که توسط TAPI به event Handler داده می شود :
If TapiEvent = TE_CALLNOTIFICATION Then
Dim objCallNotificationEvent As ITCallNotificationEvent
Set objCallNotificationEvent = pEvent
Dim gobjReceivedCallInfo As ITCallInfo
Set gobjReceivedCallInfo = objCallNotificationEvent.Call
Dim objCallControl As ITBasicCallControl
Set objCallControl = gobjReceivedCallInfo
objCallControl.Answer
End If




اما برای دوستان علاقمند که بخواهند مطالب بیشتری در این زمینه آموخته و نیز مثالهای عملی از نوشتن برنامه های TAPI را در اختیار داشته باشند لینکهای زیر را معرفی می کنم :
ایجاد یک تماس ( Make a Call ) :
+ قبل از این بخش بایستی مراحل TAPI Initialization و عمل انتخاب آدرس انجام شده باشد .
این بخش برای ایجاد یک شی تماس ، بررسی و مشخص کردن استریمی که با این تماس در ارتباط است ، انتخاب و ایجاد ترمینالهای مناسب و کامل کردن ارتباط استفاده می شود .
قبل TAPI Initialization و عمل انتخاب آدرس و انتخاب ترمینال انجام شده باشد .
در ابتدا با استفاده از متد CreateCall یک شی تماس ساخته می شود :
Set gobjCall = gobjOrigAddress.CreateCall(strDestAddress, nSelectedType,lMediaTypes)x

سپس در اینجا بایستی کدی که در بخش اول این درس برای انتخاب ترمینال نوشته شد آورده شود :
}
Select Terminal Code
{

سپس بایستی دستور Connect اجرا شود :
gobjCall.Connect (False)x

False بدین معناست که ارتباط بصورت آسنکرون برقرار می شود .

دریافت یک تماس :

کد زیر برای یافتن و یا ایجاد یک ترمینال مناسب برای دریافت یک تماس بکار می رود . بایستی توجه داشته باشید که قبل از اجرای کد زیر بایستی مراحل مقداردهی اولیه ، انتخاب یک آدرس و رجیسر کردن event ها را انجام دهید . همچنین در کد زیر بایستی مرحله انتخاب ترمینال را نیز انجام دهید . توجه داشته باشید که در کد زیر متغیر pEvent یک اشاره گر برای واسط ITCallNotificationEvent است که توسط TAPI به event Handler داده می شود :



If TapiEvent = TE_CALLNOTIFICATION Then
Dim objCallNotificationEvent As ITCallNotificationEvent
Set objCallNotificationEvent = pEvent
Dim gobjReceivedCallInfo As ITCallInfo
Set gobjReceivedCallInfo = objCallNotificationEvent.Call
Dim objCallControl As ITBasicCallControl
Set objCallControl = gobjReceivedCallInfo
objCallControl.Answer
End If



اما برای دوستان علاقمند که بخواهند مطالب بیشتری در این زمینه آموخته و نیز مثالهای عملی از نوشتن برنامه های TAPI را در اختیار داشته باشند لینکهای زیر را معرفی می کنم :
آموزش TAPI در سایت MSDN

Evil 69
پنج شنبه 15 آذر 1386, 05:40 صبح
من هنوز امتحان نکردم ولی ممنون از جوابتون
اما من یک سوال دیگه هم داشتم .
من یک پایگاه داده دارم و هر کاری میکنم یک رکورد رو از اون پاک کنم نمیشه یعنی پاک میشه ولی وقتی میخام adapto رو update کنم که تو بانک ثبت بشه خطا میده واگر این کارو نکنم هم که ثبت نمیشه و دفعه بعدی که برنامه اجرا میشه دو باره تمام اون رکورد های حذف شده بر میگردند ( به عبارتی اصلاً پاک نمیشن)

ir_programmer
پنج شنبه 15 آذر 1386, 07:45 صبح
اینم مقاله جالبی در این زمینه هست.
http://msdn2.microsoft.com/en-us/library/ms811409.aspx

Evil 69
جمعه 16 آذر 1386, 08:56 صبح
لطفا یک نفر برای delete کردن من رو راهنمایی کنه آخا لازم دارم ( به شکل خفنی کارم گیر کرده )

mehrzad007
جمعه 16 آذر 1386, 13:48 عصر
لطفا یک نفر برای delete کردن من رو راهنمایی کنه آخا لازم دارم
برای هر سوال تاپیک جداگانه بزنید ...

Evil 69
یک شنبه 18 آذر 1386, 13:42 عصر
اقای mehzad007 شما چکار داری که این سوال توی چه تاژیکی هستش اگر بلدی جواب بده اگر هم نه ...