Seite 1 von 1

HiByte() / LoByte() mit pure Xbase++ ? [erledigt]

Verfasst: Mi, 10. Okt 2018 23:50
von AUGE_OHR
hi,

zum Auswerten eines Hotkey in einem *.LNK benötige ich die HiByte() / LoByte() Function aus ot4xb

Code: Alles auswählen

   nHiByte  := HiByte(nHotkey)
   DO WHILE nHiByte > 0
      DO CASE
         CASE nHiByte >= Extended_key  ; cText += "Extended "  ; nHiByte -= Extended_key
         CASE nHiByte >= ALT_key       ; cText += "ALT "       ; nHiByte -= ALT_key
         CASE nHiByte >= CTRL_key      ; cText += "CTRL "      ; nHiByte -= CTRL_key
         CASE nHiByte >= SHIFT_key     ; cText += "SHIFT "     ; nHiByte -= SHIFT_key
      ENDCASE
   ENDDO
   cText += CHR(LoByte(nHotkey))
da es nur die 2 Function sind frage ich mich ob man das mit pure Xbase++ machen kann.
so hat es Pablo definiert

Code: Alles auswählen

XPPRET XPPENTRY wapimc_LOBYTE(XppParamList pl){ _retnl(pl,( _parLong(pl,1) & 0xFF ) );}
XPPRET XPPENTRY wapimc_HIBYTE(XppParamList pl){ _retnl(pl,( (_parLong(pl,1) >> 8) & 0xFF ) );} 

Re: HiByte() / LoByte() mit pure Xbase++ ?

Verfasst: Do, 11. Okt 2018 8:07
von brandelh
In den XbToolsIII gibt es dazu verschiedene Funktionen:

NumHigh() - Retrieves the high byte of a 16 bit integer.
NumLow() ... unter "Numbers and Bits"

Aber grundsätzlich ist das Verschieben der 8 bits nach rechts eine division durch ... 2^8 oder 256 wenn ich mich richtig erinnere (ist ewig her) gefolgt vom Löschen der höheren Bits mit band() und 0xFF

Re: HiByte() / LoByte() mit pure Xbase++ ?

Verfasst: Do, 11. Okt 2018 17:13
von Koverhage
Und in irgendeinen Quellcode von Phil Ide gibt es auch Funktionen dafür.

Re: HiByte() / LoByte() mit pure Xbase++ ?

Verfasst: Sa, 13. Okt 2018 22:49
von AUGE_OHR
hi,

Danke für euer Antworten.

hatte gehofft das man die Macros aus Windef.h

Code: Alles auswählen

#define LOBYTE(w)           ((BYTE)((DWORD_PTR)(w) & 0xff))
#define HIBYTE(w)           ((BYTE)((DWORD_PTR)(w) >> 8))
einfach mit pure Xbase++ nachbauen könnte.

Re: HiByte() / LoByte() mit pure Xbase++ ?

Verfasst: Fr, 19. Okt 2018 4:55
von AUGE_OHR
ich habe diese beiden Function gefunden

Code: Alles auswählen

FUNCTION _LowOrder(nValue)
RETURN Bin2W(Left(U2Bin(nValue),2))

FUNCTION _HighOrder(nValue)
RETURN Bin2W(Right(U2Bin(nValue),2))
die _LowOrder() scheint zu funktionieren aber bei _HighOrder() bekomme ich nur 0 (zero) :?:

Re: HiByte() / LoByte() mit pure Xbase++ ?

Verfasst: Fr, 19. Okt 2018 20:34
von ramses
Versuche es mal so.

Code: Alles auswählen

FUNCTION _LowOrder(nValue)   // Byte 0 
RETURN Bin2W( U2Bin(nValue)[1])

FUNCTION _HighOrder(nValue)     // Byte 1 
RETURN Bin2W( U2Bin(nValue)[2])
Gruss Carlo

Re: HiByte() / LoByte() mit pure Xbase++ ?

Verfasst: Sa, 20. Okt 2018 0:28
von AUGE_OHR
ramses hat geschrieben: Fr, 19. Okt 2018 20:34 Versuche es mal so.
JA, das ist die Lösung =D>

hier nun als harbour App ... deshalb wollte ich die ot4xb Function loswerden
GETHOTKEY.ZIP
(334.51 KiB) 329-mal heruntergeladen
die App scannt den Desktop und sucht nach Hotkey Zuweisungen in der LNK Files.
es wird die Datei HOTKEY.TXT erzeugt mit den Ergebnissen.

Re: HiByte() / LoByte() mit pure Xbase++ ? [erledigt]

Verfasst: Sa, 20. Okt 2018 10:19
von AUGE_OHR
bin noch auf diese Lösung gestossen

Code: Alles auswählen

FUNCTION LowByte( n ) 
RETURN bAnd( n, 0xFF ) 

FUNCTION HiByte( n ) 
RETURN int( bAnd( n, 0xFF00 ) / 0x100 )