Today-Plugin zur Anzeige des aktuellen Netzproviders Today-Plugin zur Anzeige des aktuellen Netzproviders
Ergebnis 1 bis 8 von 8
  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*
    0
     

  2. 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 ) )
    {
     ....
    }
    hier noch ein paar funktionen um den registry zugriff zu vereinfachen....
    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 );
    }
    mfg nimodo
    2
     

  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.
    0
     

  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 );
    die Stelle
    Code:
    g_Provider = wc;
    fällt mir irgendwie auf die Füße, wegen inkompatibler Datentypen bricht der compier ab.

    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
    0
     

  5. 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
    0
     

  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 );
              }
    hinreichend ausreichend ist, um in dem Parameter "wc" den Key aus der Registry abzulegen, oder muß ich da noch irgendwas tun? (Ich meine, daß es reichen müßte, da ja wc ein Ausgabeparameter von utRegGetSTRING ist, oder?)

    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 );
              }
    das wcscpy gar nicht ausgeführt wird. Hatte versucht, mir mit Messageboxes mal kleien Debugmessages rauszulassen (geht vllt. auch anders - ich hab mir halt so geholfen, mangels besserem Wissen ). 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?
    0
     

  7. 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 );
    -Variablen sollten in jedem Fall belegt werden
    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! */
    - g_sInfo sollte grösser sein als g_Provider

    - mit RegistryNotifyWindow() siehe beispiel kannst das auch eleganter tun

    mfg - nimodo
    1
     

  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.
    Angehängte Dateien Angehängte Dateien
    2
     

Ähnliche Themen

  1. Today Plugin gesucht
    Von rollerali im Forum HTC Touch Diamond
    Antworten: 3
    Letzter Beitrag: 25.02.2009, 15:28
  2. Frage zum aktuellen Preis des Touch HD bei o2
    Von Pete99 im Forum Touch HD Sonstiges
    Antworten: 3
    Letzter Beitrag: 18.01.2009, 20:05
  3. today plugin
    Von bedi im Forum Plauderecke
    Antworten: 1
    Letzter Beitrag: 13.09.2008, 08:24
  4. Shortcuts als Today Plugin
    Von MrBorland im Forum Plauderecke
    Antworten: 2
    Letzter Beitrag: 11.03.2004, 12:46

Stichworte