collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 39
  • Punkt Versteckte: 2
  • Punkt Mitglieder: 3
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 14107
  • stats Beiträge insgesamt: 68024
  • stats Themen insgesamt: 9165
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Anrufe beenden via Tapi32.dll  (Gelesen 148 mal)

Offline datekk

  • Access-Meister
  • ***
  • Beiträge: 714
Anrufe beenden via Tapi32.dll
« am: November 02, 2018, 13:32:08 »
Hallo,

ich nutzt die Tapi32.dll um aus meiner Access Anwendung heraus Telefonnummern anzurufen. Dafür nutze ich folgende Funktion:
Declare Function tapiRequestMakeCall Lib "tapi32.dll" (ByVal DestAddress As String, _
ByVal AppName As String, ByVal CalledParty As String, ByVal Comment As String) As Long

Aufrufen funktioniert dann also ganz einfach über
tapiRequestMakeCall ("Telefonnummer","","NamedesAnzurufenden","")
Ich möchte aber nun zusätzlich diesen Anfruf auch über eine Schaltfläche wieder beenden. Ich habe schon herausgefunden, dass die Funktion "lineDrop" dazu genutzt werden kann. Leider verlangt diese Funktion Parameter von denen ich nicht weiß, woher ich diese bekommen kann.:
LONG lineDrop(
  HCALL  hCall,
  LPCSTR lpsUserUserInfo,
  DWORD  dwSize
);

Kann jemand helfen?
 

Offline PhilS

  • Global Moderator
  • Access-Profi
  • *****
  • Beiträge: 379
    • Tipps zu Access, VBA, SQL und Co.
Re: Anrufe beenden via Tapi32.dll
« Antwort #1 am: November 03, 2018, 16:35:51 »
ich nutzt die Tapi32.dll um aus meiner Access Anwendung heraus Telefonnummern anzurufen. Dafür nutze ich folgende Funktion:
Declare Function tapiRequestMakeCall Lib "tapi32.dll" (ByVal DestAddress As String, _
ByVal AppName As String, ByVal CalledParty As String, ByVal Comment As String) As Long
[...]
Ich möchte aber nun zusätzlich diesen Anfruf auch über eine Schaltfläche wieder beenden.
Nach meinem Kenntnisstand und Verständnis wird das nicht (einfach) möglich sein.

Die Funktion tapiRequestMakeCall fordert die bei dir installierte Telefonieanwendung (Windows-Standard: dialer.exe) dazu auf, den Anruf zu beginnen. Der Anruf "gehört" damit nicht deiner Access-Anwendung, sondern der Telefonie-Anwendung und nur diese kann/darf lineDrop verwenden, um den Anruf zu beenden.

Korrespondierend zu tapiRequestMakeCall war wohl mal die tapiRequestDrop-Funktion vorgesehen, um das Beenden eines Anrufs anzufordern. - Diese Funktion wurde aber nie implementiert und hat keine Funktion!

Du hast jetzt zwei Möglichkeiten. Entweder du begnügst dich damit, dass du den "End Call"-Button nicht direkt in deiner Anwendung haben kannst und den Button der Telefonieanwendung klicken musst, oder du implementierst selbst in deiner Anwendung so viel der TAPI, dass deine Access-Anwendung direkt selbst als Telefonieanwendung fungieren kann. Dies könnte auch unter Verwendung einer fertigen ActiveX-Komponente passieren.

PS:
Als Mittelding könnte man vielleicht per Windows-API nach dem Dialer-Call-Dialogfenster und dem End-Call-Button suchen und an den Button eine Click-Nachricht senden, um den Call zu beenden.


Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline datekk

  • Access-Meister
  • ***
  • Beiträge: 714
Re: Anrufe beenden via Tapi32.dll
« Antwort #2 am: November 05, 2018, 09:51:24 »
Hi PhilS. Danke Dir.

Ja, das läuft alles über den Dialer, wobei der Dialer den Wählvorgang selbst auch nur weiter gibt an den jeweils unter "Extras/Verbinden über" angegebenen Tapi Treiber - z.B. HiPathTapi oder Gigaset QuickSync TSP - und diese Anwendungen dann letztendlich auch den Call auslösen, wobei ich dann über Dialer den Call beenden kann oder z.B. auch über die QuickSync Software selbst (bei Gigaset).

Bei beiden von Dir vorgeschlagenen Wegen stehe ich total auf dem Schlauch. Kannst Du mir einen Einstieg geben? Wie könnte ich Access also so einrichten, dass Access selbst wählt? Oder wie gehe ich das Thema API an?
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1392
Re: Anrufe beenden via Tapi32.dll
« Antwort #3 am: November 05, 2018, 15:03:54 »
Wenn es darum geht, die Anwendung Wahlhilfe zu schließen, kannst Du das mit folgenden Anweisungen versuchen.

Private Declare Function FindWindowW Lib "user32" ( _
   ByVal lpClassName As Long, _
   ByVal lpWindowName As Long) As Long
Private Declare Function PostMessageW Lib "user32" ( _
   ByVal hWnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   ByVal lParam As Long) As Long

Private Const WM_QUIT As Long = &H12

Private Sub CloseDialer()
   Dim hWnd As Long
   
   Const DialerClassName As String = "DialerClass"
   
   'Dialer suchen
   hWnd = FindWindowW(StrPtr(DialerClassName), 0)
   'bei Erfolg
   If hWnd <> 0 Then
      'Befehl zum Beenden absetzen
      PostMessageW hWnd, WM_QUIT, 0, 0
   End If
End Sub
Grüße von der (⌒▽⌒)
 

Offline datekk

  • Access-Meister
  • ***
  • Beiträge: 714
Re: Anrufe beenden via Tapi32.dll
« Antwort #4 am: November 05, 2018, 15:52:13 »
Hallo Lachtaube - lieben Dank, aber nein, es geht nicht um das beenden der Wählhilfe sondern um das beenden des aktiven Gespräches wie "auflegen".

Folgende Website verfolgt einen anderen Ansatz, in dem das wählen völlig ohne Wählhilfe in Access über den Tapi Treiber erfolgt. Auf der Website ist auch eine Beispiel-Datenbank zum Download. Leider enthält das Beispiel auch kein "Auflegen" Button.: https://www.emde-it-loesungen.de/techtalk/microsoft-access/telefonieren-mit-access.html

Dort arbeitet man mit einem Verweis auf Microsoft Tapi 3.0. Bibliothek

Die Website zu Tapi 3 bringt mich (mit meinem laienhaftem Verständnis) auch nicht weiter,  ist aber vielleicht für den ein oder anderen hier interpretierbar: https://docs.microsoft.com/de-de/windows/desktop/api/tapi3if/

Ich habe auf einem Rechner auch die Anwendung Tapi-Call installiert. Das Programm scheint permanent den Tapi Treiber "abzuhören". Wenn ich aus o.g. Beispielanwendung einen Anruf initiiere, erscheint aus meiner Taskleiste ein kleines TapiCall Fenster in dem ich ebenfalls den Anruf beenden kann.

Sowas muss sich also irgendwie auch in Access bauen lassen.
« Letzte Änderung: November 05, 2018, 16:26:33 von datekk »
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 226
Re: Anrufe beenden via Tapi32.dll
« Antwort #5 am: November 05, 2018, 16:31:18 »

Die Website zu Tapi 3 bringt mich (mit meinem laienhaftem Verständnis) auch nicht weiter ...

Und warum nicht?
Das ist doch eine COM Klasse - also perfekt für VBA und noch dazu mit einer Anleitung die wichtigsten Basics.
Ich hab auch noch nie damit gearbeitet - aber die Klasse bietet ja eine Disconnect Methode an.
10 Jahre Access
 

Offline datekk

  • Access-Meister
  • ***
  • Beiträge: 714
Re: Anrufe beenden via Tapi32.dll
« Antwort #6 am: November 05, 2018, 16:48:24 »
Naja, so gut sind meine Programmierungserfahrungen jetzt auch nicht. Schön, dass Du dies gleich erkannt hast. Ich habe einfach mal den Code leicht umgestellt und es hat sofort geklappt. Manchmal ist es verrückt...

Im dortigen Download Beispiel wird ein Anruf über die Funktion "Tele_Outbound" eingeleitet. Die Variable "oCall" habe ich auf Public gestellt und folgende Sub geschrieben:

Public Sub Tele_hangup()
    oCall.Disconnect DC_NORMAL
End Sub

Das Ganze habe ich dann als Per-Klick Aktion auf eine neue Schaltfläche "Auflegen" gelegt und es klappt auf Anhieb. Damit komme ich nun auch von der Wählhilfe weg, welche mich super angenervt hat. TOP!!!!
 

Offline PhilS

  • Global Moderator
  • Access-Profi
  • *****
  • Beiträge: 379
    • Tipps zu Access, VBA, SQL und Co.
Re: Anrufe beenden via Tapi32.dll
« Antwort #7 am: November 05, 2018, 16:58:36 »
Super! Dass die TAPI 3.0  Funktionalität auch schon direkt von Microsoft als COM-Bibliothek bereitgestellt wird, habe ich nicht gesehen. Das wäre genau der Ansatz, den ich zuvor mit dem Stichwort ActiveX angedeutet habe.

Eine direkte Implementierung über rohen API-Funktionen der TAPI wäre sicherlich um ein Vielfaches aufwendiger.

Damit entfällt ja auch die Bastelei mit den Klicken der Dialer-Schaltfläche per Win-API.
Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 226
Re: Anrufe beenden via Tapi32.dll
« Antwort #8 am: November 05, 2018, 17:02:24 »
Schön, dass Du dies gleich erkannt hast.

Ich hab halt einen Blick über den Objektkatalog riskiert.
Bei einer COM Klasse wird einem ja die Denkarbeit bereits abgenommen. Vor allem wenn einem alles mit Anleitung präsentiert wird.
Die Herausforderung ist nur noch das Studium der Methoden, Events, Properties, Interfaces & Klassen.
10 Jahre Access