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
#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
#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()
#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 )
Return to FiveWin for Pocket PC
Users browsing this forum: No registered users and 15 guests