Ergebnis 1 bis 8 von 8
-
Bin neu hier
- 07.07.2009, 20:45
- #1
Hallo,
ich versuche (in Ermangelung eines einfachen und vor allem kostenlosen Plugins) folgendes selbst zu realisieren:
Plugin für den Todayscreen eines Pocket PC Phone Edition (HTC Touch HD *ohne* dieses Touch Plugin, gefällt mir nicht), welches nichts weiter tun soll, als den aktuellen Netzprovider anzuzeigen.
(Hintergrund: Hab nen Dual Sim Adapter im Gerät und es wäre ganz nett beim Blick aufs Todayscreen schon zu sehen, wo man grad eingebucht ist)
Bin leider (obwohl ich mal vor Urzeiten programmieren gelernt hab) auf dem PPC noch blutigster Anfänger. Hab aber mit dem HowTo hier Windows Mobile Heute-Bildschirm / Today-Screen Plugin (1)
zumindest mal die groben Züge nachvollziehen und die Testapplikation compilieren und installieren können.
nun zu meiner Frage: Kann mir jemand hier in einfachen Worten (gern auch etwas ausholender, wenns die Zeit zuläßt) erklären, wie ich an den Providerstring rankomme, wo ich grad eingebucht bin? Gehen sollte es ja irgendwie - die Telefonapplikation kanns ja schließlich auch.
Wäre super, wenn mir da jemand aushelfen könnte. Mein Dank wird ihn ewig verfolgen *g*
-
Fühle mich heimisch
- 08.07.2009, 11:19
- #2
Versuch mal,dir den aktuellen provider aus dem State bereich der registry zu holen.
Z. Bsp so
Code:WCHAR wc[80]; DWORD dw_wc = 80; if ( utRegGetSTRING(HKEY_LOCAL_MACHINE, _T( "System\\State\\Phone"), _T( "Current Operator Name"), wc, dw_wc ) ) { .... }
Code:/* generic get registry function */ BOOL utRegGetValue(HKEY hkKEY, WCHAR *pwcPath, WCHAR *pwcVar, DWORD *pdwType, PBYTE pbData, DWORD *pdwSize) { HKEY hk; BOOL rtn = FALSE; if ( ERROR_SUCCESS==RegOpenKeyEx(hkKEY, pwcPath, (DWORD)0, KEY_QUERY_VALUE, &hk) ) { if ( ERROR_SUCCESS==RegQueryValueEx( hk,pwcVar,NULL,pdwType,pbData,pdwSize) ) { rtn = TRUE; } } RegCloseKey(hk); return(rtn); } /* get a STRING from registry */ BOOL utRegGetSTRING(HKEY hkKEY, WCHAR *pwcPath, WCHAR *pwcVar, WCHAR *pwcData, DWORD dwSize) { LONG rtn; DWORD dwt, dws=dwSize; /* get the size only */ rtn = utRegGetValue(hkKEY, pwcPath, pwcVar, &dwt, NULL, &dws); if ( dwt!=REG_SZ ) return(FALSE); if ( ERROR_SUCCESS==rtn ) { if ( dws <= dwSize ) { rtn = utRegGetValue(hkKEY, pwcPath, pwcVar, &dwt, (PBYTE)pwcData, &dws); } else { PBYTE wc; wc = (PBYTE)malloc( sizeof(BYTE)*dws ); if ( wc==NULL ) return FALSE; rtn = utRegGetValue(hkKEY, pwcPath, pwcVar, &dwt, wc, &dws); if ( ERROR_SUCCESS==rtn ) { swprintf(pwcData,_T("%.*s..."), dwSize-4, wc); } free(wc); } } return( ERROR_SUCCESS==rtn ); }
-
Bin neu hier
- 08.07.2009, 11:37
- #3
faszinierend - ich hab mich schon mit irgendwelchen kruden Abfragen an die SIM-Karte hantieren sehen. so schaut das ja sogar einigermaßen einfach aus *g*.
Ich merk schon, daß ich mir die Registry wohl mal eingehender ansehen muß. Wer weiß, was da sonst noch so an Nettigkeiten dynamisch gespeichert wird.
Auf alle Fälle erstmal ein Danke! Werd mich vermutlich Abend drüber hermachen und mich weiter versuchen.
-
Bin neu hier
- 10.07.2009, 20:24
- #4
so... der gute Obelix hat wohl doch den Mund etwas zu voll genommen und seine angestaubten C-Kenntnisse überschätzt.
mir fällt da was auf die Füße, wo ich sebst wohl aufgrund Denkblockade oder schlichtweg nicht mehr wissens nicht weiterkomme.
Im groben habe ich das GPS-Todayplugin von nimodo hergenommen und alles was ich nicht brauchte rausgeworfen. Dann noch ne Handvoll Variablen deklariert und wollte dann an sich den Providerstring auslesen lassen.
hier erstmal codeschnipselchen:
Code:WCHAR wc[80]; /* kommt aus der Registry */ DWORD dw_wc = 80; WCHAR g_Provider[80]; /* Provider Information */ und dann im Main Windows Event handler folgendes (alle anderen funktionen usw. mal ausgelassen, die sind nicht mein Problem) /* Reg Auslesen */ if ( utRegGetSTRING(HKEY_LOCAL_MACHINE, _T( "System\\State\\Phone"), _T( "Current Operator Name"), wc, dw_wc ) ) { g_Provider = wc; } swprintf( g_sInfo1, TEXT("Provider: %s"), g_Provider); /* Reg Auslesen Ende! */ DrawText(hdc, g_sInfo1, wcslen(g_sInfo1), &g_rUpdate1, DT_SINGLELINE );
Code:g_Provider = wc;
Ich bin mir ziemlich sicher, daß es nur eine Kleinigkeit ist, aber das wilde Herumhantieren mit Pointern ist mir wohl über den Laufe der Zeit etwas entfallen
ich kann das Projekt auch noch mal komplett als zipfile anbieten zum Reinschauen:
http://rapidshare.de/files/47814148/..._Today.7z.html
Fehlermeldung ist im Übrigen diese:
TodayExample_1.c(210): error #2168: Operands of = have incompatible types 'wchar_t [80]' and 'wchar_t *'.
TodayExample_1.c(210): error #2088: Lvalue required
*** Fehlercode: 1 ***
Fertig.
wo liegt jetzt doch gleich mein Fehler?
Danke schon mal vorab!
Obelix
-
Fühle mich heimisch
- 10.07.2009, 21:06
- #5
Das '=' (g_Provider = wc) funktioniert normalerweise (in C) nicht bei statischen "Vektoren" (eg Zeichenketten wc[...]).
Den obigen Compile-Fehler beheben kannst, indem z.Bsp. die Zeichenkette kopierst mit
wcscpy( g_Provider , wc );
Oder direkt g_Provider anstelle von wc benutzt.
mfg - nimodo
-
Bin neu hier
- 11.07.2009, 00:02
- #6
danke.
und stimmt, irgendwas war da.Alles doch schon zu lange her *g*
den vorhin beschriebenen compile Error hab ich beseitigt, es läuft alles durch, aber trotzdem gibt mir das Today-Plugin dann nichts aus. Naja, außer dem "Provider: " im Plugin, was ich ja in der codezeile
swprintf( g_sInfo1, TEXT("Provider: %s"), g_Provider);
in die Variable gebe, die ich dann mittels Drawtext ausgeben lasse.
geh ich denn richtig in der Annahme, daß der Funktionsaufruf
Code:if ( utRegGetSTRING(HKEY_LOCAL_MACHINE, _T( "System\\State\\Phone" ), _T( "Current Operator Name" ), wc, dw_wc ) ) { wcscpy( g_Provider, wc ); }
Ich hab auch extra noch mal nachgeschaut, ob der Pfad und der Key richtig geschrieben sind.
Daß ich die \\ schreiben muß, ist doch korrekt, oder? Bei einem einzelnen \ führt nämlich der Compiler Beschwerde, daß da unbekannte Character Escape-Sequenzen rumschwirren.
Irgendwie muß das doch zu schaffen sein, diesen lausigen String da in das Plugin zu prügeln
Noch ne andere dumme Frage... Gibt es eigentlich eine Möglichkeit, die Projekte irgendwie zu debuggen? Also sprich Codezeile für Codezeile zu durchlaufen und mir anzusehen, was in den Variablen so vorhanden ist? Denke das würde mir bei meinem Fehler weiterhelfen ruaszufinden, ob *überhaupt* irgendwas in meine Variable geschrieben wurde.
Tante Edit: Ich update mich mal selbst, vielleicht hat nimodo ja noch mal nen schlauen Tip für mich.
Mir scheint es so, daß hier drin
Code:if ( utRegGetSTRING(HKEY_LOCAL_MACHINE, _T( "System\\State\\Phone" ), _T( "Current Operator Name" ), wc, dw_wc ) ) { wcscpy( g_Provider, wc ); }
). Hatte eine Box *vor* die If-Abfrage getan, eine *in* die If. DIe Box davor kam an, die im If nicht.
Von daher gehe ich davon aus, daß ich dort hinschreiben kann so viel ich will - es wird gar nicht angesehen im Programmlauf.
Hab ich irgendwo einen Denk-/Verständnisfehler im Aufruf dieser Registry-Funktion?
-
Fühle mich heimisch
- 13.07.2009, 19:01
- #7
ja, die getstring hat irgendwo einen haken
-Versuch mal diese, die sollte gehen
Code:/* get a STRING from registry */ BOOL utRegGetSTRING(HKEY hkKEY, WCHAR *pwcPath, WCHAR *pwcVar, WCHAR *pwcData, DWORD dwSize) { BOOL rtn; DWORD dwt=REG_SZ, dws=dwSize; rtn = utRegGetValue(hkKEY, pwcPath, pwcVar, &dwt, (PBYTE)pwcData, &dws); return(rtn );
Code:/* Hier das Reg Auslesen hin! */ wcscpy( g_sInfo1 , _T("Provider: n/a") ); if ( utRegGetSTRING(HKEY_LOCAL_MACHINE, _T( "System\\State\\Phone"), _T( "Current Operator Name"), g_Provider, g_dwProvider)==TRUE ) { swprintf( g_sInfo1, TEXT("Provider: %s"),g_Provider); } /* Reg Auslesen Ende! */
- mit RegistryNotifyWindow() siehe beispiel kannst das auch eleganter tun
mfg - nimodo
-
Bin neu hier
- 13.07.2009, 19:28
- #8
nachdem es jetzt ein Ergebnis hat, kann ich auch anfangen es elegant zu machen *g*
Danke erstmal für die andere Funktion zum Registry auslesen - jetzt tut es was es soll
Falls es irgendwem (außer mir) etwas nutzt, habe ich den Quelltext angehangen.
Ähnliche Themen
-
Today Plugin gesucht
Von rollerali im Forum HTC Touch DiamondAntworten: 3Letzter Beitrag: 25.02.2009, 15:28 -
Frage zum aktuellen Preis des Touch HD bei o2
Von Pete99 im Forum Touch HD SonstigesAntworten: 3Letzter Beitrag: 18.01.2009, 20:05 -
today plugin
Von bedi im Forum PlaudereckeAntworten: 1Letzter Beitrag: 13.09.2008, 08:24 -
Shortcuts als Today Plugin
Von MrBorland im Forum PlaudereckeAntworten: 2Letzter Beitrag: 11.03.2004, 12:46
Pixel 10 Serie mit Problemen:...