Hey,
ein kleines Problem:
Ich möchte möglist viel vom Wertebereich 0-2147483647 im Highword einer WM_Command Nachricht unterbringen.
Soweit ich das verstanden habe ist im Highword maximal Platz für den Bereich −32.768 bis 32.768.
D.h. man könnten den Bereich von −32.768 bis -1 ausnutzen.
Hier ein Versuch:
Spoiler anzeigen
#include <Winapi.au3>
global const $lowword=1000
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global $ihighword_1=32767*2
Global $ihighword_2=0
Global $ihighword_3=32768
Global $ilongword_1=_CreateLong($lowword, $ihighword_1)
Global $ilongword_2=_CreateLong($lowword, $ihighword_2)
Global $ilongword_3=_CreateLong($lowword, $ihighword_3)
;ConsoleWrite($ilongword_1 &@crlf)
;ConsoleWrite($ilongword_2 &@crlf)
;ConsoleWrite($ilongword_3 &@crlf)
Global $ihighword_return_1=_get_highword($ilongword_1)
Global $ihighword_return_2=_get_highword($ilongword_2)
Global $ihighword_return_3=_get_highword($ilongword_3)
ConsoleWrite($ihighword_return_1 &@crlf)
ConsoleWrite($ihighword_return_2 &@crlf)
ConsoleWrite($ihighword_return_3 &@crlf)
Func _CreateLong($lo_word, $hi_word)
if $hi_word > 32767 then $hi_word-=65535
;ConsoleWrite("Hiword createlong :"&$hi_word&@crlf)
return _WinAPI_MakeLong($lo_word, $hi_word)
endfunc
func _get_highword($long_word)
; dieser Teil ist zeitkritisch
local $itemp=_WinAPI_HiWord($long_word)
if $itemp <0 then $itemp+=65535
;ConsoleWrite("Hiword itemp :"&$itemp&@crlf)
return $itemp
endfunc
Sind die Überlegungen so richtig?
Gibt es eine Methode um einen noch größeren Wertebereich zu erfassen?
Die Funktion _get_highword ist möglicherweise etwas zeitkritisch, da die WM_Command Funktion im eigentlichen Skript auf Fernbedienungsanschläge reagieren soll.
Wie sich das praktisch darstellt weiss ich noch nicht.
Zu zeitaufwendige Algos sind eher nicht drin, aber vielleicht habt ihr ja einen schlauen Trick auf lager
Gruß nuts