bei mir auch!
habe gerade für mein Problem ein geniales Programm gefunden.
MWconn
Da steht in der Anleitung folgendes:
Lokale Programmsteuerung per Shared Memory
Falls Sie selbst Software-Entwickler sind und MWconn von einem anderen Programm aus steuern möchten,
können Sie dafür auch einen direkteren Weg nutzen: die Parameterübergabe per Shared Memory. Über
diesen Weg lassen sich ebenfalls alle Ausgaben von MWconn lesen (Signalstärke, Datenvolumen usw.).
Dazu sind allerdings fundierte Programmierkenntnisse erforderlich. Im Folgenden finden Sie die dafür
notwendige Strukturbeschreibung und ein Stück Beispiel-Programmcode (Programmiersprache C).
typedef struct { // Struktur für Datenaustausch mit externen Programmen
unsigned long len; // Länge dieser Struktur in Bytes
unsigned short structure_version; // Version dieser Struktur: 3
unsigned short program_version; // Version des MWconn-Programms
// (Hauptversion256+Nebenversion)
unsigned long res1[3]; // reserviert
// Datenrichtung extern->MWconn
char command[100]; // von MWconn auszuführendes Kommando;
// „MWCONN_CONNECT“: verbinden;
// „MWCONN_DISCONNECT“: trennen;
// „MWCONN_RECONNECT“: neu verbinden;
// „MWCONN_END“: Programm beenden;
// „:::ATI“: AT-Kommando an Gerät senden (hier „ATI“);
// bei Novatel-Geräten nur mit Novatel-DLL;
// „:250:4000:ATI“: desgleichen, jedoch mit
// Wartezeitangaben, 250ms nach dem Senden
// beginnt der Empfang, welcher maximal 4 weitere
// Sekunden später abgeschlossen sein muss;
// „MWCONN_PATH“: aktuellen Programmpfad zurückgeben;
// Datenrichtung MWconn->extern
// Hinweis: nicht alle Modems unterstützen alle Informationen;
unsigned long process_counter; // dieser Zähler wird von MWconn
// inkrementiert, sobald neue Daten zur Verfügung stehen;
unsigned long volume; // summiertes Datenvolumen in kBytes
unsigned long time; // summierte Onlinezeit in Minuten
unsigned long online_time; // aktuelle Onlinezeit in Sekunden; ==0: offline
© 15.03.2010 Markus B. Weber, Nürnberg
MWconn, Version 5.6, Bedienungsanleitung Seite 46 von 59
unsigned long offline_time; // aktuelle/letzte Offline-Zeit in Sekunden
unsigned long upspeed; // aktuelle Sendegeschwindigkeit in Bytes/s
unsigned long downspeed; // aktuelle Empfangsgeschwindigkeit in Bytes/s
unsigned char opmode; // Betriebsart; 0: nicht bekannt; 1: GPRS; 2: UMTS;
unsigned char signal_raw; // Signalstärke als GSM-Standardwert (0…31)
unsigned char signal_percent; // Signalstärke in Prozent (0…100);
// nur gültig, wenn signal_raw>0
signed short signal_dbm; // Signalstärke in dBm
char network_name[30+1+1]; // Name des Netzwerks
char plmn[6+1]; // Public Land Mobile Network, bestehend aus MCC und MNC
char lac[4+1]; // Location Area Code
char cid[4+1]; // Cell-ID
char message[64+1]; // ggf. Meldungstext
char mini_message[48+1]; // ggf. verkürzter Meldungstext
char error_message[32+1]; // ggf. Fehlermeldung
unsigned char battery; // Akku-Zustand; 0: unbekannt;
char rnc[4+1]; // RNC-ID
unsigned char internal1[1]; // reserviert
unsigned long internal2[6]; // reserviert
char answer[600]; // Antwort auf AT-Kommando oder „MWCONN_PATH“
} mwcio_t;
void __fastcall TForm1::Tick(TObject Sender) {
// Testprozedur zur Ausgabe aller von MWconn bereitgestellten Informationen
HANDLE mwcioh; // Handle des gemeinsamen Speichers für I/O
mwcio_t mwcio;
static char z[4000];
char zp;
// IO-Bereich öffnen und zuweisen
mwcioh= NULL; mwcio= NULL; // Voreinstellungen (Fehlerfall)
#define OFN(a,n) if(mwcioh==NULL) mwcioh= OpenFileMapping(a,false,n);
OFN(FILE_MAP_ALL_ACCESS,„Global\MWCONN_IO“);
OFN(FILE_MAP_ALL_ACCESS,„MWCONN_IO“);
OFN(FILE_MAP_READ,„Global\MWCONN_IO“);
OFN(FILE_MAP_READ,„MWCONN_IO“);
#define MVOF(a) if(mwcioh!=NULL && mwcio==NULL)
mwcio= (mwcio_t*)MapViewOfFile(mwcioh,a,0,0,sizeof(mwcio_t));
MVOF(FILE_MAP_ALL_ACCESS) MVOF(FILE_MAP_READ)
if(mwcio==NULL) // IO-Bereich nicht gültig
Ausgabe->Caption= „MWconn-IO-Bereich konnte nicht gelesen werden“;
else { // IO-Bereich gültig
zp= z;
zp+= sprintf(zp,"Länge der Struktur: %lu Bytes, "
"Strukturversion: %u, Programmversion: %u.%u, "
"Prozess-Zähler: %lu
",
mwcio->len,mwcio->structure_version,
mwcio->program_version>>8,mwcio->program_version&255,
mwcio->process_counter);
zp+= sprintf(zp,"summiertes Datenvolumen: %lu kBytes, "
"summierte Onlinezeit: %lu Minuten
",
mwcio->volume,mwcio->time);
zp+= sprintf(zp,"aktuelle Onlinezeit: %lu Sekunden, "
"aktuelle/letzte Offlinezeit: %lu Sekunden
",
mwcio->online_time,mwcio->offline_time);
zp+= sprintf(zp,"Upspeed: %lu kBytes/s, "
"Downspeed: %lu kBytes/s
",
mwcio->upspeed/1000,mwcio->downspeed/1000);
zp+= sprintf(zp,"Betriebsart: %s, "
"Signalstärke: %02u(roh) = %u%% = %idBm
",
mwcio->opmode==1?„GPRS“:mwcio->opmode==2?„UMTS“:„unbekannt“,
mwcio->signal_raw,mwcio->signal_percent,mwcio->signal_dbm);
zp+= sprintf(zp,"Netzname: „%s“, PLMN: „%s“, "
"LAC: „%s“, Cell-ID: „%s“
",
mwcio->network_name,mwcio->plmn,mwcio->lac,mwcio->cid);
zp+= sprintf(zp,"Meldung: „%s“, Mini-Meldung: „%s“, "
"Fehlermeldung: „%s“
",
mwcio->message,mwcio->mini_message,mwcio->error_message);
zp+= sprintf(zp,"Kommando: „%s“, Antwort: „%s“
",
mwcio->command,mwcio->answer);
© 15.03.2010 Markus B. Weber, Nürnberg
MWconn, Version 5.6, Bedienungsanleitung Seite 47 von 59
Ausgabe->Caption= z;
} // Ende IO-Bereich gültig
if(mwcio!=NULL) { // IO-Bereich gültig
UnmapViewOfFile(mwcio);
mwcio= NULL;
}
if(mwcioh!=NULL) {
CloseHandle(mwcioh);
mwcioh= NULL;
}
}
Kann da jemand etwas mit anfangen?