Knowledge Base Nr: 00218 isdnmoni.cpp - http://www.swe-kaiser.de

Win32: ISDNMonitor benachrichtigung durch ISDNMoni.exe

  
//das programm ISDNMoni.exe (http://www.isdnmoni.de/) stellt mehrere schnittstellen zur verfügung
//die bei einem eingehenden anruf zur benachrichtigung genutzt weren können.
//hier je ein beispiel für die PostMessage- und die Externes-Programmaufruf-methode.

///////////////////////////POSTMESSAGE
///////////////////////////POSTMESSAGE
///////////////////////////POSTMESSAGE

BOOL CWinLIRCClientDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
//Hinweis für Windows-Entwickler, die die PostMessage()-Schnittstelle nutzen wollen
//(siehe Actions/Programmstart/Hinweis für Entwickler):
//Das Empfangsteil muss in der WM_COMMAND-Verarbeitung eines Fensters mit der Caption
// "MoniEventHandler" ungefähr folgenden C-Code beinhalten:

if (wParam == 4711)
{
HANDLE hMapFile = 0;
LPVOID lpMapAddress = 0;

hMapFile = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, // Read/write permission.
FALSE, // Do not inherit the name
"ISDNMoniData"); // of the mapping object.

if (hMapFile)
{
lpMapAddress = ::MapViewOfFile(hMapFile, // Handle to mapping object.
FILE_MAP_ALL_ACCESS, // Read/write permission.
0, // Max. object size.
0, // Size of hFile.
0); // Map entire file.

if (lpMapAddress)
{
MessageBox( *this, (char *)lpMapAddress, "Empfangen", MB_OK );

::UnmapViewOfFile(lpMapAddress);
}

::CloseHandle(hMapFile);
}
}
else
{
return CDialog::OnCommand(wParam, lParam);
}

return 0;
}

///////////////////////////ÜBER KOMMANDOZEILENPARAMETER
///////////////////////////ÜBER KOMMANDOZEILENPARAMETER
///////////////////////////ÜBER KOMMANDOZEILENPARAMETER

//konfiguriern ISDNMoni.exe zum aufrufen eines programmes: E:\mystuff\ISDNMoniEvent.exe $N $R $D

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//aufruf in isdnmonitor
//achtung: sehr empfindlich was reihenfolge und anzahl argumente angeht!
//E:\projects\msvc60\ISDNMoniEvent\Debug\ISDNMoniEvent.exe $D $N $R $M $D
//E:\mystuff\ISDNMoniEvent.exe $N $R $D
CTime ctime;
ctime = CTime::GetCurrentTime();
CString strAnrufInfo(::GetCommandLine());

CProcessSupport proc;

//// über webserver in logfile eintragen
char* p1 = strstr(strAnrufInfo, " ");
if (p1)
p1++;

CString strInfo;
strInfo.Format("%s### %s"
, (const char*)ctime.Format("%d.%m.%y %H:%M")
, p1); //ohne prog-name
int nLastWSpos = strInfo.ReverseFind(' ');
if (nLastWSpos > 0)
strInfo = strInfo.Left(nLastWSpos);

CString strArgs("http://192.168.32.70/kaiserreich/cgi-bin/k_kaiser.pl?page=ISDNcall&info=");

CNetSupport myClient;
myClient.ConvertToHTTP(strInfo);

strArgs += strInfo;

int nErr1 = myClient.ReadHTTP(strArgs.GetBuffer(strArgs.GetLength()+1));

//// wav-datei abspielen (loop bis prozess durch timeout beendet wird - in player einstellen!)
//z.b. "C:\Programme\Windows Media Player\mplayer2.exe" /Play C:\WINNT\Media\ringout.wav

CString strNummer, strWAVfile;
int pos = strAnrufInfo.ReverseFind(' ');
if (pos>0)
{
strNummer = strAnrufInfo.Left(pos);

pos = strNummer.ReverseFind(' ');
if (pos>0)
{
strNummer = strNummer.Mid(pos+1);

strWAVfile.Format("/Play P:\\telefon\\%s.wav", (const char*)strNummer);

int nErr2 = proc.RunProcess("C:\\Programme\\Windows Media Player\\mplayer2.exe"
, strWAVfile
, 30*1000, SW_HIDE);
}
}

return 0;
}