Seite 2 von 2

Re: TAPI und PureBasic

Verfasst: 25.06.2010 10:56
von NicTheQuick
Hört auf dumme Witze zu machen. Man kann hier nicht jeden unter Generalverdacht stellen, der sich frisch im Forum angemeldet hat. >_<

Re: TAPI und PureBasic

Verfasst: 25.06.2010 11:12
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:

Re: TAPI und PureBasic

Verfasst: 25.06.2010 11:18
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)

Re: TAPI und PureBasic

Verfasst: 25.06.2010 11:57
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

Re: TAPI und PureBasic

Verfasst: 25.06.2010 12:27
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)

Re: TAPI und PureBasic

Verfasst: 25.06.2010 19:15
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

Re: TAPI und PureBasic

Verfasst: 25.06.2010 19:57
von Josh
Unable to Service Request

Re: TAPI und PureBasic

Verfasst: 27.06.2010 00:50
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

Re: TAPI und PureBasic

Verfasst: 27.06.2010 11:16
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

Re: TAPI und PureBasic

Verfasst: 28.06.2010 10:41
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