Page 1 of 1

Add bitmap to taskbar

PostPosted: Wed Mar 07, 2018 9:57 am
by reds
I would like to show wi-fi signal status icon on the taskbar rather than within the app window is it possible ?

TIA
Peter
p.s. running WM6.1

Re: Add bitmap to taskbar

PostPosted: Wed Mar 07, 2018 10:40 am
by Antonio Linares
Peter,

Could you please post some screenshots to better understand what you mean ? thanks

Re: Add bitmap to taskbar

PostPosted: Wed Mar 07, 2018 12:58 pm
by reds
Image
Antonio

I would like to place the 5 bar icon currently at at top right of the screen onto the taskbar next to the title,
in this example WiFi Status

Thanks
Peter

p.s. preview of message not showing photo but it is at https://imgur.com/a/Ssb1E

Re: Add bitmap to taskbar

PostPosted: Thu Mar 08, 2018 8:37 am
by Antonio Linares
Peter,

Are you creating that Wifi status window using FWPPC ?

If so, could you please post the code here ?

I guess that if we use the WM_NCPAINT message then you may be able to paint anything you need on the caption bar

Re: Add bitmap to taskbar

PostPosted: Fri Mar 09, 2018 11:12 am
by reds
Antonio
Code was found here or another forum, I can't remember now :!:

Regards
Peter
Code: Select all  Expand view

 #pragma BEGINDUMP


    #ifdef UNICODE
       #define UNDER_CE
    #endif

    #include <hbapi.h>
    #include <windows.h>
    #include <aygshell.h>
    #include <ntddndis.h>
    #include <nuiouser.h>
    #include <winioctl.h>
    #include <iphlpapi.h>

    BOOL GetFirstRFEthernetSignalStrength( int*, int* );

    HB_FUNC( SIGNAL  )
    {
    int nStrength = 0;
    int nQuality = 0;
    GetFirstRFEthernetSignalStrength(&nStrength, &nQuality);
    hb_retnl( ( long ) nQuality );
    }

    HRESULT GetSignalStrength(
    TCHAR *ptcDeviceName,
    int* piSignalStrength,
    int* piSignalQuality
    )
    { PNDISUIO_QUERY_OID queryOID;
       DWORD  dwBytesReturned = 0;
       UCHAR  QueryBuffer[sizeof(NDISUIO_QUERY_OID) +sizeof(DWORD)];
       HANDLE  ndisAccess = INVALID_HANDLE_VALUE;
       BOOL  retval;
       HRESULT  hr; // Attach to NDISUIO.
       ndisAccess = CreateFile( NDISUIO_DEVICE_NAME,    0, 0, NULL, OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,    INVALID_HANDLE_VALUE );
       if ( ndisAccess == INVALID_HANDLE_VALUE )
       return E_FAIL; // ????
       // Get Signal strength
       queryOID = (PNDISUIO_QUERY_OID)&QueryBuffer[0];
       queryOID->ptcDeviceName = ptcDeviceName;
       queryOID->Oid = OID_802_11_RSSI;
       retval = DeviceIoControl( ndisAccess,  IOCTL_NDISUIO_QUERY_OID_VALUE,  (LPVOID) queryOID,  sizeof(NDISUIO_QUERY_OID) + sizeof(DWORD),  (LPVOID) queryOID,  sizeof(NDISUIO_QUERY_OID) + sizeof(DWORD),  &dwBytesReturned,  NULL);
       if( retval && piSignalStrength && piSignalQuality )
          {
          hr = S_OK;
          *piSignalStrength = *(DWORD *)&queryOID->Data;
          //Here's Microsoft's interpretation
          //of the return value
          if(*piSignalStrength < -90)              
             *piSignalQuality =  0; // No signal
          else if(*piSignalStrength < -81)  
             *piSignalQuality  = 1; // Very low
          else if(*piSignalStrength < -71)  
             *piSignalQuality  = 2; // Low
          else if(*piSignalStrength < -67)  
             *piSignalQuality  = 3; // Good
          else if(*piSignalStrength < -57)  
              *piSignalQuality  = 4; // Very good
          else *piSignalQuality  = 5; // Excellent
          }
          else
          {
             hr = E_FAIL;
          }
          CloseHandle( ndisAccess );
          return hr;
       }
       BOOL GetFirstRFEthernetSignalStrength(
          int* pSignalStrength,
          int* pSignalQuality
          )
          { BOOL retval = FALSE;
          // Get the size of the adapters list.
          DWORD size = 0;
          GetAdaptersInfo( NULL, &size );
          // Allocate space for the list.
          IP_ADAPTER_INFO *info =  
            (IP_ADAPTER_INFO*)new char[ size ];
            DWORD err;
            if ((err = GetAdaptersInfo(info, &size ))  
             == NO_ERROR )
             {
             IP_ADAPTER_INFO *cinfo = info;
             while ( cinfo )
                {  
                 // Check the interface media type for  
                 // Ethernet, which both  
                 // standard Ethernet and RF Ethernet will return.  
                 if ( cinfo->Type == MIB_IF_TYPE_ETHERNET )  
                   {  
                   TCHAR wName[ MAX_ADAPTER_NAME_LENGTH + 4 ];  
                   MultiByteToWideChar( CP_ACP, 0,    cinfo->AdapterName, -1,     wName,     sizeof( wName ) / sizeof( wName[ 0 ] ) );
                   // Try to get the signal strength.  
                   // If it works, we  
                   // return the information.  
                   // If not, we move on.  
                   if ( GetSignalStrength( wName,    
                       pSignalStrength, pSignalQuality ) == S_OK )  
                       {  
                        retval = TRUE;    
                        break;  
                        }  
                    }  
                    // Go to the next adapter in the list.  
                    cinfo = cinfo->Next;
                    }
                   } // Don't forget to delete the allocation.
                   delete [] info;
                   return retval;
    }
    #pragma ENDDUMP
 

Re: Add bitmap to taskbar

PostPosted: Fri Mar 09, 2018 11:22 am
by Antonio Linares
Peter,

ok, thanks

So in your PRG you call Signal() and then paint the wifi icon, right ?

Please post here the PRG code used to paint the wifi icon too so we can modify it to be painted in the caption area, thanks

Re: Add bitmap to taskbar

PostPosted: Mon Mar 12, 2018 9:53 am
by reds
Antonio

Here it is

Regards
Peter


Code: Select all  Expand view
#include "FWCE.ch"


STATIC oWnd,oBMP
statiC cDir


 #define INTERVAL_SECONDS  5

 
 static aWifi := {"wifi-0.bmp","wifi-1.bmp","wifi-2.bmp","wifi-3.bmp","wifi-4.bmp","wifi-5.bmp"}

***********************
Procedure Main()
     
  LOCAl oBtn
     
  cDir :=  CurDir()
   
  DEFINE WINDOW oWnd TITLE "WiFi Status"

    @ 0, 26 BITMAP oBmp FILENAME cDir +"\"+aWiFi[ SIGNAL() +1 ] NOBORDER

    @ 260, 15   BTNBMP  oBtn    SIZE 25, 25 FILE cDir + "
\EXIT.bmp" ACTION FINISH()

  ACTIVATE WINDOW oWnd ON INIT BuildTimer()
 
*********************
FUNCTION BuildTimer()

   LOCAL oTmr
   

   DEFINE TIMER oTmr INTERVAL INTERVAL_SECONDS * 1000  ACTION TimerCalls( )
 
 ACTIVATE TIMER oTmr

return nil
*********************
Function TimerCalls()

    oBmp:LoadBMP(     cDir +"
\"+  aWifi[ SIGNAL() + 1 ] )

 

****************
FUNCTION FINISH()

 IF ! MSGNOYES("
Exit")
    RETURN .f.
 ENDIF
 
 oWnd:END()

Re: Add bitmap to taskbar

PostPosted: Mon Mar 12, 2018 10:57 am
by Antonio Linares
Peter,

Please try your example with these changes and let me know if you get a beep, thanks

replace this line:

DEFINE WINDOW oWnd TITLE "WiFi Status"

with:

oWnd = TMyWindow():New( "WiFi Status" )

and add this code to your prg:

Code: Select all  Expand view
#define WM_NCPAINT           133    // 0x085

CLASS TMyWindow FROM TWindow

   METHOD HandleEvent( nMsg, nWParam, nLParam )

ENDCLASS

METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TMyWindow

   if nMsg == WM_NCPAINT
      MsgBeep()
   endif
     
return Super:HandleEvent( nMsg, nWParam, nLParam )

Re: Add bitmap to taskbar

PostPosted: Tue Mar 13, 2018 10:13 am
by reds
Antonio

MsgBeep() does not get called and then crashes with variable does not exist Super


Regards
Peter

Re: Add bitmap to taskbar

PostPosted: Tue Mar 13, 2018 11:35 am
by Antonio Linares
Please use ::Super instead of Super

Re: Add bitmap to taskbar

PostPosted: Tue Mar 13, 2018 12:40 pm
by reds
MsgBeep() still not called
Regards