![]() |
Tapi Event läuft nicht immer
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,
Ich möchte gern ein kleines Tapi Programm selbst schreiben, es soll mir die anrufende Nummer anzeigen sowie den Status, wenn aufgelegt worden ist, bzw wenn abgenommen worden ist. Dazu habe ich die Tapi3.DLL von Windows importiert und die notwendige Änderung mit dem "Initialize" vorgenommen. Mein Problem ist nun aber: Wenn ein Anruf zustande kommt, wird das Event "Offering" aufgerufen, allerdings werden die CallStates "Disconnectd" und "Connected" niemals aufgerufen. Nach ein wenig debuggen habe ich herausgefunden, dass wenn ich einen Breakpoint in meinem TapiEvent setze und er beim Offering dort reinspringt, ich aber nicht mit F9 oder ähnlichem weiterspringe, sondern solange warte bis abgenommen und aufgelegt worden ist, die Events angezeigt werden. Irgendwas scheint nicht mit dem Event in Ordnung zu sein, ich kann mir aber keinen Reim darauf machen. Hier mal das komplette Code:
Delphi-Quellcode:
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, TAPI3Lib_TLB; type TForm1 = class(TForm) Button1: TButton; ComboBox1: TComboBox; Button2: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure TapiEvent(ASender: TObject; TapiEvent: TAPI_EVENT; const pEvent: IDispatch); private { Private-Deklarationen } public { Public-Deklarationen } objTapi: TTAPI; addr: ITAddress; addrs : IEnumAddress; lwCeltFetched : Cardinal; end; const TAPIMEDIATYPE_AUDIO = $8; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Request: ITRequest; dispatch: ITDispatchMapper; begin Request := CoRequestMakeCall.Create; Request.MakeCall('555-5555','','',''); end; procedure TForm1.Button2Click(Sender: TObject); var iToken: HRESULT; begin iToken := 0; addrs := objTapi.DefaultInterface.EnumerateAddresses; while ( S_OK = addrs.Next(1,addr,lwCeltFetched) ) do begin if addr.AddressName = ComboBox1.Items[ComboBox1.ItemIndex] then begin break; end; end; objTapi.EventFilter := TE_CALLNOTIFICATION or TE_CALLSTATE; iToken := objTapi.RegisterCallNotifications(addr,true,false,TAPIMEDIATYPE_AUDIO,1); Memo1.Lines.Clear; end; procedure TForm1.TapiEvent(ASender: TObject; TapiEvent: TAPI_EVENT; const pEvent: IDispatch); var evntCallState: ITCallStateEvent; callInfo: ITCallInfo; sTelefonnummer:String; begin Memo1.Lines.Add('Fired: ' + IntToStr(TapiEvent)); case TapiEvent of TE_CALLNOTIFICATION: begin Memo1.Lines.Add('Callnotification'); end; TE_CALLSTATE: begin evntCallState := ITCallStateEvent(pEvent); callInfo := evntCallState.Call; case evntCallState.State of CS_OFFERING: begin sTelefonnummer := callInfo.Get_CallInfoString(CIS_CALLERIDNUMBER); Memo1.Lines.Add('Offering von: ' + sTelefonnummer); end; CS_CONNECTED: begin Memo1.Lines.Add('Verbunden'); end; CS_DISCONNECTED: begin Memo1.Lines.Add('Aufgelegt'); end; end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin objTapi := TTAPI.Create(Self); objTapi.Connect; objTapi.OnEvent := TapiEvent; addrs := objTapi.DefaultInterface.EnumerateAddresses; ComboBox1.Items.Clear; while ( S_OK = addrs.Next(1,addr,lwCeltFetched) ) do begin ComboBox1.Items.Add(addr.AddressName); ComboBox1.ItemIndex := 0; end; end; end. |
AW: Tapi Event läuft nicht immer
Ich habe zwar keine Antwort für dich, und kann auch mangels Tapi-Anbindung deinen Code nicht ausprobieren,
aber vielleicht hilft die dieser ![]() Geht zwar um VB, aber die haben sich mit dem Thema befasst. |
AW: Tapi Event läuft nicht immer
Hallo,
hier Threads mit dem selben Problem: ![]() ![]() ![]() |
AW: Tapi Event läuft nicht immer
Hallo Lyan,
Den letzten von deinen genannten Links hatte ich in der Zwischenzeit auch schon gefunden und der hat das Problem gelöst. Es lag tatsächlich an dem "AddRef" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz