TAPI und PureBasic

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: TAPI und PureBasic

Beitrag von NicTheQuick »

Hört auf dumme Witze zu machen. Man kann hier nicht jeden unter Generalverdacht stellen, der sich frisch im Forum angemeldet hat. >_<
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: TAPI und PureBasic

Beitrag von rolaf »

NicTheQuick hat geschrieben:Hört auf dumme Witze zu machen. Man kann hier nicht jeden unter Generalverdacht stellen, der sich frisch im Forum angemeldet hat. >_<
Ist ja gut >Mecker Motz<. Komisch ist allenthalb das man sich anmeldet und die "PB 4.40" als Signatur einträgt und diese nach meinen "Witz" auf "PB4.50 Full" abändert. :lol: Insofern war mein "Witz" eher ein "Test" und die Falle scheint zugeschnappt. :) :mrgreen: Niemand würde ernsthaft das Wort "Full" benutzen.

Falls ich mich irre behaupte ich glatt das Gegenteil. :wink:

@ralle (siehe unten): Wie wäre es mit FINAL? :wink:
Zuletzt geändert von rolaf am 25.06.2010 11:29, insgesamt 1-mal geändert.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
ralle
Beiträge: 88
Registriert: 29.11.2004 17:50
Wohnort: Berlin

Re: TAPI und PureBasic

Beitrag von ralle »

Niemand würde ernsthaft das Wort "Full" benutzen.
(OT)
Dann greife ich mal polemisch in die Diskussion mit ein ;) (siehe meine Signatur!!!!11!!!111!!!!) Ist einfach noch zu früh am Morgen für mich als Student um sinnvolles von mir zu geben :coderselixir:

(/OT)
flapfrance
Beiträge: 7
Registriert: 24.06.2010 14:37
Wohnort: Cazes Mondenard Frankreich

Re: TAPI und PureBasic

Beitrag von flapfrance »

Meine Güte,...
Niemand würde ernsthaft das Wort "Full" benutzen.
ich habe Eure ganzen alten Storys nicht drauf,..... und habe auch nicht vor das Forum danach abzusuchen
Was muss ich tun um etwas Hilfe zu bekommen?
Gibt es nen Geheimcode? Muss ich erst hinterm Computer nackich ne Zigarette rauchen,... als Mutprobe???

@Macros nein 4.4 sagt mir nix und ich wills glaub ich auch nicht wissen.....

@DrFalo keine Ahnung was du schon alles hier erlebt hast,.... aber um hier mal klar zu reden: Nach Deinem Kommentar musste ich denken, das Tapi und 4.4 nicht zusammen geht,... also aufgerüstet auf 4.5, neu eingetragen in die Signatur, und Deine "witziges" "Full" dazugeschrieben. Gut, das mag für einen langerfahrenen und unfehlbaren Vollblutprogrammierer naiv erscheinen,....
für mich einfach nur der Versuch mich hier mit meinem Problem zu präsentieren, in dem naiven Glauben du gäbest mir einen technischen Wink.

So,.... und wie war das denn nun mit dem TAPI??

Habe inzwischen mal mit TapiRequestMakeCall rumgebastelt (damit benutze ich die Wählhilfe).... das funktioniert für den Anruf,.... aber ich bekomme die Leitung dann nicht mehr getrennt (aus PB), und ausserdem kann ich nur auf einer Leitung (die vorher in der Wählhilfe eingetragen wurde) anrufen,... ich würde aber gerne mehrere Leitungen parallel benutzen also wäre der direkte Tapi zugriff schon am besten, denke ich....

Code: Alles auswählen

;Beispiel gefunden bei http://www.vbarchiv.net/tipps/tipp_646-telefonnummer-ueber-die-waehlhilfe-waehlen.html
Procedure Dial(sPhoneNumber.s,sRecipient.s,sComment.s = "")
 sBuffer.s 
  nResult.l  
  ;Wählhilfe starten und Telefonnummer wählen
  nResult = tapiRequestMakeCall_(sPhoneNumber,"Tapitest", sRecipient, sComment)
  ;Rückgabewert auswerten
  If nResult <> 0 
    ;Fehler!
    Select nResult
      Case TAPIERR_NOREQUESTRECIPIENT
        Debug "Diw Windows Wählhilfe ist nicht installiert oder konnte nicht gestartet werden!" 
      Case TAPIERR_REQUESTQUEUEFULL
      Debug "Die Anrufschlange ist voll!" 
      Case TAPIERR_INVALDESTADDRESS
        Debug"Ungültige Telefonnummer!" 
      Default
        Debug "Sonstiger Fehler!"
 Debug nresult
    EndSelect
  EndIf
EndProcedure
Sebastian
PB4.50 full / Windows XP / SP3
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: TAPI und PureBasic

Beitrag von bobobo »

das auflegen aus pb heraus wird Dir so (tapiRequestMakeCall..) auch nicht so
einfach gelingen .. höchstens eventuell als ne Fernsteuerung per sendmessage_(..)


um das ganze tapie-gedöns komplett in pb "einzufangen" brauchst du wohl die Line Device Functions

guckst du hier mal

http://msdn.microsoft.com/en-us/library ... S.85).aspx

letztlich dann wohl enumerations um die Leitung zu bestimmen
und dann sowas in der art

lineopen
line dies und das und jenes
linemakecall
line drop
line close

wäre übrigens echt brauchbar, wenn das tapi-ding mal jemand mit pb angehen könnte (und den code
natürlich hier veröffentlicht)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
flapfrance
Beiträge: 7
Registriert: 24.06.2010 14:37
Wohnort: Cazes Mondenard Frankreich

Re: TAPI und PureBasic

Beitrag von flapfrance »

Was ich noch gefunden habe , ist ne Lösung in VB6, die augenscheinlich alles kann was ich brauche, genaugenommen viel mehr, und wo die ganzen Funktionen und Handels und was weiss ich, wohl irgendwo integriert sind,....
http://www.shrinkwrapvb.com/vbtapi.htm
aber da wäre ich dann wieder beim grundsätzlichen Problem des Verständnisses der Callbacks und so.....
In wie weit wäre das denn möglich , anhand eines solchen Beispiels den Code für PB umzustricken??

@bobobo Ja genau so stell ichs mir ja auch vor,.....
Initialisierung mit lineInitializeEx_
Device öffnen mit lineOpen_
Dann meine schleife solange das programm läuft mit
anrufen mit lineMakeCall_
auflegen mit LineDrop_
und zum Abschliessen dann
Device schliessen mit LineClose_
und Line abmelden mit LineShutdown_
wenn ich das so im TAPI32 Browser mache, klappt das hervorragend :D
da sieht das so aus:

Code: Alles auswählen

*** LOG au dem TAPI32 BROWSER
Calling lineInitializeEx
    lphLineApp=x273980
    hInstance=x1000000
    lpfnCallback=x10158df
    lpszFriendlyAppName=x6f444
    lpdwNumDevs=x6f41c
    lpdwAPIVersion=x6f4b0
      ->dwAPIVersion=x20000
    lpInitExParams=x6f404
      ->dwOptions=x3
lineInitializeEx returned SUCCESS
  num line devs = 9
Calling lineOpen
    hLineApp=x800003dd
    dwDeviceID=x0
    lphLine=x2780d0
    APIVersion=x20000
    dwExtVersion=x0
    dwCallbackInstance=x0
    dwPrivileges=x1
    dwMediaModes=x10
    lpCallParams=x0
lineOpen returned SUCCESS
Calling lineMakeCall
    hLine=x101b3
    lphCall=x277b10
    lpszDestAddress=x6f444
    dwCountryCode=x0
    lpCallParams=x0
lineMakeCall returned x10007
received LINE_REPLY
  device=x0
  cbInst=x0
  param1=x10007, 
  param2=x0, 
  param3=x10018, 
received LINE_CALLSTATE
  device=x10018
  cbInst=x0
  param1=x10, DIALING 
  param2=x0, 
  param3=x0, 
received LINE_CALLSTATE
  device=x10018
  cbInst=x0
  param1=x200, PROCEEDING 
  param2=x0, 
  param3=x0, 
received LINE_CALLINFO
  device=x10018
  cbInst=x0
  param1=x2000, NUMMONITORS 
  param2=x0, 
  param3=x0, 
received LINE_CALLSTATE
  device=x10018
  cbInst=x0
  param1=x100, CONNECTED 
  param2=x0, 
  param3=x0, 
received LINE_CALLSTATE
  device=x10018
  cbInst=x0
  param1=x4000, DISCONNECTED 
  param2=x20, BUSY 
  param3=x0, 
Calling lineDrop
    hCall=x10018
    lpsUserUserInfo=x6f444
    dwSize=x12
lineDrop returned x100a2
received LINE_CALLSTATE
  device=x10018
  cbInst=x0
  param1=x1, IDLE 
  param2=x0, 
  param3=x0, 
lineGetCallStatus returned SUCCESS
Deallocating hCall x10018 (REPLY for requestID x100a2 might be filtered)
lineDeallocateCall returned SUCCESS
received LINE_REPLY
  device=x0
  cbInst=x0
  param1=x100a2, 
  param2=x0, 
  param3=x0, 
Calling lineClose
    hLine=x101b3
lineClose returned SUCCESS
Calling lineShutdown
    hLineApp=x800003dd
lineShutdown returned SUCCESS

Sebastian
PB4.50 full / Windows XP / SP3
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: TAPI und PureBasic

Beitrag von Josh »

Unable to Service Request
flapfrance
Beiträge: 7
Registriert: 24.06.2010 14:37
Wohnort: Cazes Mondenard Frankreich

Re: TAPI und PureBasic

Beitrag von flapfrance »

So,... weiter gehts,...
Mir ist es nicht klar was ich als Information in die Tapifunktion eintragen soll, bzw. wo ich die jeweiligen Handels finde und auslese....
Ich versuch mal meinen Problem etwas bildhafter darzustellen....

Code: Alles auswählen

;Nur mal ein kleiner Test zum besseren Verständniss....
lphLineApp.l
hInstance.l 
lpdwNumDevs.l    
 Procedure LineIniCallback(hDevice,dwMsg,dwCallbackInstance,dwParam1,dwParam2,dwParam3)
   Debug hdevice
   Debug dwMsg
   Debug dwCallbackInstance
   Debug dwParam1
   Debug dwParam2
   Debug dwParam3
    ; Hier wird Ihre Callback Prozedur abgearbeitet.
  EndProcedure
; Die Daten die mir der TAPIBROWSER ausgibt:(also das sollte eigendlich hin und hergeschickt werden)
; lphLineApp=x273980
; hInstance=x1000000
; lpfnCallback=x10158df
; lpszAppName=x6f444
; lpdwNumDevs=x6f554
; test1 = lineConfigDialog_(0,0,"")
; Debug test1     
test=lineInitialize_(lphLineApp,@hInstance,@LineIniCallback(),"Test",@lpdwNumDevs)
Debug test 
Sinn des ganzen ist es die LineInitialize dazu zu bringen, das sie "0" ausgibt.
(und nicht die Fehlercodes ...95 und ...98
Return Code: -2147483598)
Description TAPI error: Line error - parameter - A parameter (such as dwTollListOption, dwTranslateOptions, dwNumDigits, or a structure pointed
to by lpDeviceConfig) contains invalid values, a country code is invalid, a window handle is invalid, or the specified forward list parameter contains
invalid information.
Return Code: -2147483595
Description TAPI error: Line error - Invalid pointer - One or more of the specified pointer parameters (such as lpCallList, lpdwAPIVersion,
lpExtensionID, lpdwExtVersion, Iphlcon, IpLineDevCaps and IptoneList) are invalid or a required pointer to an output parameter is NULL.
Und ich habe weiterhin die Hoffnung, das, wenn ich erstmal das grundsätzliche Hin und her mit den Callbacks, Handeln und Pointern begriffen habe, dann klappts auch mit der Nachbarin... quatsch ,.... mit dem Rest der Geschichte..... :D

Sebastian
PB4.50 full / Windows XP / SP3
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: TAPI und PureBasic

Beitrag von - chris - »

Hier ist lphLineApp als out bezeichnet und
hInstance als in:

http://msdn.microsoft.com/en-us/library/ms894369.aspx

also so:

Code: Alles auswählen


;Nur mal ein kleiner Test zum besseren Verständniss....
lphLineApp.l
hInstance.l
lpdwNumDevs.l
Procedure LineIniCallback(hDevice, dwMsg, dwCallbackInstance, dwParam1, dwParam2, dwParam3)
  Debug hdevice
  Debug dwMsg
  Debug dwCallbackInstance
  Debug dwParam1
  Debug dwParam2
  Debug dwParam3
  ; Hier wird Ihre Callback Prozedur abgearbeitet.
EndProcedure
; Die Daten die mir der TAPIBROWSER ausgibt:(also das sollte eigendlich hin und hergeschickt werden)
; lphLineApp=x273980
; hInstance=x1000000
; lpfnCallback=x10158df
; lpszAppName=x6f444
; lpdwNumDevs=x6f554
; test1 = lineConfigDialog_(0,0,"")
; Debug test1
test = lineInitialize_(@lphLineApp, hInstance, @LineIniCallback(), "Test", @lpdwNumDevs)
Debug test
Debug lphLineApp
Debug lpdwNumDevs

debug test -> 0
debug lphLineApp -> -2147482625
debug lpdwNumDevs -> 7
PB v5.72 x86/x64
Windows 10 Pro 64bit
flapfrance
Beiträge: 7
Registriert: 24.06.2010 14:37
Wohnort: Cazes Mondenard Frankreich

Re: TAPI und PureBasic

Beitrag von flapfrance »

@Chris: Klasse, danke ...
Also, ich habe weiter gebastelt,... und jetzt hängt es an der Tapi-Negociation...
auch wie ich denke, das es weitergehen müsste, habe ich mal dazu geschrieben,....
Allerdings ist mir völlig klar, das das Script voll mit Fehlern ist,.... das Problem bleibt weiterhin das gleich,... ich kapiere nicht wie ich mit den ganzen Handels umgehen soll.

Ich habe als vorläufige Notlösung jetzt eine Variante mit nem externen Programm (Phoner und autostart) gebastelt,.... für erstmal geht das,.... aber da kriege ich nur eine Linie auf einmal ans laufen. Auf jeden Fall kann ich damit meine Hardware testen aber als entgültige Lösung ist das ein bischen dünn.

Aber wohlmöglich habe ich mich mit dem Tapi-Zeuch etwas übernommen..... :cry:
Bin also weiterhin für jede Hilfe Dankbar.
(und sollte jemand Spass daran haben,... mir ein bischen mehr bei dem TAPI part zu helfen,...da könnte ich mich mit z.B. ner Kiste gutem Cahorwein oder so revanchieren. (Ja, aus Frankreich! :mrgreen: )
Grüsse,
Sebastian

Code: Alles auswählen

;Nur mal ein kleiner Test zum besseren Verständniss....
lphLineApp.l
hInstance.l
lpdwNumDevs.l
lphLine.l
lphCall.l
hline.l
m_APIversions.l
m_ExtAPIversions.l
m_ApplicationVersion .l ;'some TAPI calls need this instead of negotiated API version
m_LowAPI.l ;'default TAPI 1.3 (&H00010003)
m_HiAPI.l ; 'default TAPI 3.0 (&H00030000)
m_LastTAPIError.l
phonenumber.s = "201"
 
; das sind die TApi vorgaben, die ich nicht eingetragen bekomme....
 ; m_LowAPI =  &H00010003 ; erstmal ausgestellt, da es sonst nicht kompiliert
 ; m_HiAPI = &H00010003
  
  Dim m_APIversions.l(1)
  Dim m_ExtAPIversions(1)
  
   Procedure getlowapi()
     LowAPI = m_LowAPI
   EndProcedure
   
   Procedure gethiapi()
   HiAPI = m_LowAPI
   EndProcedure
 
Procedure LineIniCallback(hDevice, dwMsg, dwCallbackInstance, dwParam1, dwParam2, dwParam3)
  Debug hdevice
  Debug dwMsg
  Debug dwCallbackInstance
  Debug dwParam1
  Debug dwParam2
  Debug dwParam3
  ; Hier wird Ihre Callback Prozedur abgearbeitet.
EndProcedure
;******* hier gehts los...
test = lineInitialize_(@lphLineApp, hInstance, @LineIniCallback(), "Test", @lpdwNumDevs)
Debug test
Debug lphLineApp
Debug lpdwNumDevs
;****** so, bis hierher alles super, nochmal Danke Chris
;todo: tapi negoc
    If test <> 0
    m_LastTAPIError = test
    Else
      If lpdwNumDevs < 1 
        Debug " no lines!"
      EndIf
       ;negotiate and cache API versions for each line
        ReDim m_APIversions.l(lpdwNumDevs - 1)
        ReDim m_ExtAPIversions(lpdwNumDevs - 1)
        For line = 0 To lpdwNumDevs - 1
            test = lineNegotiateAPIVersion_(@lphLineApp, 0, m_LowAPI, m_HiAPI, @m_APIversions(line), lxid)
            Debug "Rückgabe Tapi Negociation Line:"+ Str(line) + " " +  Str(test) 
            If test <> 0 
                m_APIversions(line) = 0 ;no compatible API negotiated for this line
                test = 0
            Else ; das benötige ich glaube ich nicht
                ;also cache extension version (dev-specific features) if available
               ;,m_ExtAPIversions(line).dwExtensionID0 = lxid.dwExtensionID0
                ;,m_ExtAPIversions(line).dwExtensionID1 = lxid.dwExtensionID1
                ;,m_ExtAPIversions(line).dwExtensionID2 = lxid.dwExtensionID2
               ; ,m_ExtAPIversions(line).dwExtensionID3 = lxid.dwExtensionID3
                ;TODO! add call to lineNegotiateExtVersion()
                ;and save the highest negotiated version as our app version
                If m_APIversions(line) > m_ApplicationVersion 
                 m_ApplicationVersion = m_APIversions(line)
                EndIf
            EndIf                
        Next         
      EndIf
    
If test = 0 ; 
   ;wieder die Vorgaben aus meinem TAPIBrowser hLineApp=x800003ff , dwDeviceID=x0 , lphLine=x2780d0, dwAPIVersion=x20000, dwExtVersion=x0,dwCallbackInstance=x0, dwPrivileges=x1dw,MediaModes=x10,lpCallParams=x0
  test = lineOpen_(@hLineApp, 0, @lphLine, @dwAPIVersion,dwExtVersion, @LineIniCallback(), dwPrivileges, dwMediaModes,  lpCallParams)
  Debug "Rückgabe Lineopen:" +Str(test)   
EndIf
test=0
If test = O
  ;und endlich wird gewählt...
 
    If phonenumber = ""  ;just get dialtone
       test = lineMakeCall_(@hLine, @lphCall,"",@dwCountryCode,lpCallParams)
    Else ;dial a number
       test = lineMakeCall_(@hLine, @lphCall, phonenumber, @dwCountryCode,lpCallParams)
    EndIf
    If test > 0
        ;now placing call - completion will be signalled by a LINE_REPLY event in the callback
        ;store positive request identifier in class member variable for use in the callback handler
        m_RequestingCall = test
    Else
        m_LastTAPIError = test
        Debug "Fehler beiLinemakecall: "+ Str(m_LastTAPIError)
        
    EndIf
EndIf
PB4.50 full / Windows XP / SP3
Antworten