Announcement

Collapse
No announcement yet.

Telefon fernsteuern???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Telefon fernsteuern???

    Hallo,

    ich habe mein Telefon mittels eines USB-Kabels an meinen Rechner angeschlossen und kann mittels TENOVIS-Software von hier aus direkt wählen und auch sehen wer anruft.
    Nun soll ich das ganze aber ohne die TENOVIS-Software aus meinem C#-Programm heraus machen.
    Hat jemand sowas schonmal gemacht und kann mir sagen wie ich vorgehen muss?

    MfG

    Andreas

  • #2
    Hallo Andreas, <br>
    ich habe eine Routine für Tenovis-Anlage geschrieben, es ist einfach.<br>
    Hier ist ein Auszug des Quellecodes:<br>
    <br>using System.Runtime.InteropServices;
    <br>
    <br>namespace Tenovis_Telefon
    <br>{
    <br> public class TApi
    <br> {
    <br> public const uint TAPIHiVer = 131072; /* 00020000H Highest API version wanted (2.0) */
    <br> public const uint TAPILoVer = 65540; /* 00010004H Lowest API version accepted (1.4) */
    <br> public const int LINEINITIALIZEEXOPTION_USEHIDDENWINDOW = 1;
    <br> public const int LINEINITIALIZEEXOPTION_USEEVENT = 2;
    <br> public const int LINEINITIALIZEEXOPTION_USECOMPLETIONPORT = 3;
    <br> public const int LINEBEARERMODE_VOICE = 1;
    <br> public const int LINEMEDIAMODE_INTERACTIVEVOICE = 4;
    <br> public const int LINECALLPRIVILEGE_NONE = 1;
    <br> [StructLayout(LayoutKind.Sequential)]
    <br> public struct TLINEINITIALIZEEXPARAMS { ... }
    <br> [StructLayout(LayoutKind.Sequential)]
    <br> public struct TLINEDIALPARAMS { ... }
    <br> [StructLayout(LayoutKind.Sequential)]
    <br> public struct TLINEDEVCAPS { ... }
    <br> [StructLayout(LayoutKind.Sequential)]
    <br> public struct TLINECALLPARAMS { ... }
    <br> [DllImport("tapi32.dll")]
    <br> public static extern int lineInitializeExA(...);
    <br> [DllImport("tspi21.tsp")]
    <br> public static extern int TSPI_lineNegotiateTSPIVersion(...);
    <br> [DllImport("tspi21.tsp")]
    <br> public static extern int TSPI_lineNegotiateExtVersion(...);
    <br> [DllImport("tapi32.dll")]
    <br> public static extern int lineGetDevCaps( ... );
    <br> [DllImport("tapi32.dll")]
    <br> public static extern int lineShutdown( ... );
    <br> [DllImport("user32.Dll")]
    <br> public static extern int GetWindowLongA( ... );
    <br> [DllImport("tapi32.dll")]
    <br> public static extern int lineOpen( ... );
    <br> [DllImport("tapi32.dll")]
    <br> public static extern int lineClose( ... );
    <br> [DllImport("tapi32.dll")]
    <br> public static extern int lineMakeCall( ... );
    <br> <b>
    <br> public unsafe void MakeCall(string telnr, IntPtr hwnd)
    <br> {
    <br> int ret ;
    <br> uint lineApp = 0;
    <br> uint lineID = 0;
    <br> uint CallID = 0;
    <br> uint nDevs = 0;
    <br> uint ApiVer = TApi.TAPIHiVer;
    <br> TApi.TLINEINITIALIZEEXPARAMS lineInit = new TApi.TLINEINITIALIZEEXPARAMS();
    <br> lineInit.dwTotalSize = (uint)sizeof(TApi.TLINEINITIALIZEEXPARAMS);
    <br> lineInit.dwOptions = TApi.LINEINITIALIZEEXOPTION_USEEVENT;
    <br> int hInstance = 0;
    <br> uint* b = (uint*)&lineInit;
    <br> hInstance = TApi.GetWindowLongA(hwnd,-6 /*GWL_HINSTANCE*/);
    <br> ret = TApi.lineInitializeExA(ref lineApp,hInstance,0,null,ref nDevs,ref ApiVer,ref lineInit);
    <br> if (ret == 0 && nDevs > 0)
    <br> {
    <br> uint tspiVersion = 0;
    <br> uint tspiExtVersion = 0;
    <br> int DevID = -1;
    <br> for(uint i = 0; i < nDevs; i++)
    <br> {
    <br> ret = TSPI_lineNegotiateTSPIVersion(i,TAPILoVer,TAPIHiVe r,ref tspiVersion);
    <br> if(ret != 0) continue;
    <br> ret = TSPI_lineNegotiateExtVersion(i,tspiVersion,TAPILoV er,TAPIHiVer,ref tspiExtVersion);
    <br> if(ret != 0) continue;
    <br> TLINEDEVCAPS DevCaps = new TLINEDEVCAPS();
    <br> DevCaps.dwTotalSize = (uint)sizeof(TLINEDEVCAPS);
    <br> DevCaps.dwNeededSize = (uint)sizeof(TLINEDEVCAPS);
    <br> DevCaps.dwUsedSize = (uint)sizeof(TLINEDEVCAPS);
    <br> ret = lineGetDevCaps(lineApp,i,tspiVersion,tspiExtVersio n,ref DevCaps);
    <br> if(ret != 0) continue;
    <br> DevID = (int)i;
    <br> break;
    <br> }// for ...
    <br> if(DevID >= 0)
    <br> {
    <br> TLINECALLPARAMS CallParams = new TLINECALLPARAMS();
    <br> CallParams.dwTotalSize = (uint)sizeof(TLINECALLPARAMS);
    <br> CallParams.dwBearerMode = LINEBEARERMODE_VOICE;
    <br> CallParams.dwMediaMode = LINEMEDIAMODE_INTERACTIVEVOICE;
    <br>
    <br> ret = lineOpen(lineApp,(uint)DevID,ref lineID,TAPIHiVer,0,0,LINECALLPRIVILEGE_NONE,0,ref CallParams);
    <br> if(ret == 0)
    <br> {
    <br> ret = lineMakeCall(lineID,ref CallID,telnr,0,ref CallParams);
    <br> ret = lineClose(lineID);
    <br> }
    <br> }
    <br> }
    <br> TApi.lineShutdown(lineApp);
    <br>
    <br> } //end of MakeCall
    <br></b>
    <br> }// end of class TApi
    <br>} // end of namespac

    Comment


    • #3
      Hi,
      danke, das hat mir geholfen. Du weißt nicht zufällig auch, wie ich ankommende anrufe auswerten kann? Welche Tapi Funktionen brauch ich dafür und muss ich dafür einen neuen Thread öffnen, weil er ja ständig horschen soll, ob ein anuf kommt oder wie löse ich das am einfachsten?
      Gruß
      Andrea

      Comment

      Working...
      X