Add bitmap to taskbar
Add bitmap to taskbar
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
TIA
Peter
p.s. running WM6.1
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Add bitmap to taskbar
Peter,
Could you please post some screenshots to better understand what you mean ? thanks
Could you please post some screenshots to better understand what you mean ? thanks
Re: Add bitmap to taskbar
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Add bitmap to taskbar
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
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
Antonio
Code was found here or another forum, I can't remember now
Regards
Peter
Code was found here or another forum, I can't remember now
Regards
Peter
Code: Select all
#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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Add bitmap to taskbar
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
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
Antonio
Here it is
Regards
Peter
Here it is
Regards
Peter
Code: Select all
#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()
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Add bitmap to taskbar
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:
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
#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
Antonio
MsgBeep() does not get called and then crashes with variable does not exist Super
Regards
Peter
MsgBeep() does not get called and then crashes with variable does not exist Super
Regards
Peter
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Add bitmap to taskbar
Please use ::Super instead of Super
Re: Add bitmap to taskbar
MsgBeep() still not called
Regards
Regards