PDA

View Full Version : سوال: گرفتن Caller Id به کمک TAPI3



jalalx
یک شنبه 02 اسفند 1388, 16:04 عصر
سلام خدمت دوستان!
کسی می دونه چطور می شه شماره ی طرف رو به کمک TAPI3 به دست آورد؟
تو اینترنت و این سایت گشتم ولی تمامی اون ها یا از TAPI استفاده نکرده بودند یا در زبان هایی غیر از .NET بود.
لطفا کمکم کنید.:عصبانی++:

jalalx
دوشنبه 03 اسفند 1388, 13:46 عصر
از دوستان کسی نیست که بتونه کمک کنه؟
من چند تا کامپوننت دیدم ولی می خوام از TAPI3 خود ویندوز استفاده کنم. فوریه!!!

mehdi.mousavi
دوشنبه 03 اسفند 1388, 14:14 عصر
سلام خدمت دوستان!
کسی می دونه چطور می شه شماره ی طرف رو به کمک TAPI3 به دست آورد؟
تو اینترنت و این سایت گشتم ولی تمامی اون ها یا از TAPI استفاده نکرده بودند یا در زبان هایی غیر از .NET بود.
لطفا کمکم کنید.:عصبانی++:

سلام.
با استفاده از ITCallInfo (و متود get_CallInfoString) میتونید Caller ID رو بدست بیارید. پارامتر اول این متود، یک CALLINFO_STRING هستش (که در واقع یک enum است) و توسط این تعیین میکنید که به چه اطلاعاتی در مورد Call نیاز دارید. در مورد سوال شما، باید این پارامتر رو CIS_CALLERIDNUMBER تعیین کنید. وقتی اینکارو کردید، تو پارامتر دوم یک BSTR میگیرید که شماره مورد نظر درون اون هستش.

احتمالا این مقاله (http://www.codeproject.com/KB/dotnet/CShart_TAPI_3x.aspx) تا حدی مساله رو براتون روشن میکنه.

موفق باشید.

jalalx
سه شنبه 04 اسفند 1388, 13:14 عصر
باید این پارامتر رو CIS_CALLERIDNUMBER تعیین کنید. وقتی اینکارو کردید، تو پارامتر دوم یک BSTR میگیرید که شماره مورد نظر درون اون هستش....



ممنون از این که پاسخ دادید! ولی اگه می شه راجع به پارامتر دوم بیشتر توضیح بدید...

mehdi.mousavi
سه شنبه 04 اسفند 1388, 15:55 عصر
ممنون از این که پاسخ دادید! ولی اگه می شه راجع به پارامتر دوم بیشتر توضیح بدید...



سلام.
BSTR یه نوع داده string ای مرکب هستش که در COM ازش استفاده میشه. گفتم مرکب چون طول رشته در ابتدا، سپس رشته و در نهایت هم NULL در انهای رشته قرار میگیره (در واقع ساختار BSTR اینطوریه). هر خونه از این رشته با یک WCHAR نشون داده میشه و تعداد عناصر WCHAR موجود در رشته، با استفاده از یک عدد 4 بایتی در اون نگهداری میشه. این Data Type بصورت زیر در فایل wtypes.h تعریف شده:

typedef /* [wire_marshal] */ OLECHAR *BSTR;

و اگر نگاه کنید، خود OLECHAR هم بدین شکل تعریف شده:

typedef WCHAR OLECHAR

بدین ترتیب کاملا مشخص شدش که BSTR چیز عجیب و غریبی نیست. اما، برای استفاده از اون در COM ها قوانینی وجود داره. بعنوان مثال، این همواره COM Component هستش که باید حافظه مورد نیاز خودش رو برای BSTR توسط SysAllocString (یا روشهای دیگه) new کنه، و این حافظه باید حتما سمت Client (یا همون استفاده کننده از COM) توسط متود SysFreeString آزاد بشه.

من بخوام اینطوری در مورد BSTR بنویسم، باید حداقل چند صفحه بنویسم. تازه میترسم شما با COM آشنا نباشید و همینقدری هم که توضیح دادم، مشکلاتتون رو بیشتر کنه. اما نگران نباشید. در C# کارهای سخت توسط Com Interop انجام میگیره و عموما شما از نحوه Marshaling داده ها، مطلع نمیشید (یا نمیخواد بشید)!

در هر حال، وقتی شما get_CallInfoString رو بخواهید استفاده کنید، دیگه ارسال پارامتر دوم بی معنی هستش چون Proxy ایجاد شده بصورت خودکار، برای Accessor ها، |ارامتر دوم رو بعنوان پارامتر خروجی بهتون برمیگردونه و خودش، بازهم بطور خودکار، BSTR رو به string تبدیل میکنه و بهتون میده. بنابراین فقط کافیه پارامتر اول رو بهش بدید، و در return value این تابع، CALLER ID مورد نظر رو در یک string تعریف کنید.

موفق باشید.

HAMRAHSOFT.IR
سه شنبه 04 اسفند 1388, 16:22 عصر
ببين اين لينك بدرت مي خوره http://barnamenevis.org/forum/showthread.php?t=132146&highlight=Caller

ويا http://barnamenevis.org/forum/search.php?searchid=2081246

Mrs.Net
جمعه 14 اسفند 1388, 10:41 صبح
من چندتا مثال با TAPI3 پیدا کردم اما هیچکدوم حتی تماس هم نمیفهمند!
یه مثال ساده ساده میخوام که تو محیط c#.net با TAPI3 بتونم بفهمم تماس گرفته شده (همین)
تمام سایت جستجو کردم و فقط اطلاعات حرفه ای میخوام .
آیا برای اجراشدن tapi3 تو محیط دات نت باید کار خاصی انجام داد؟