引用:
> SendInputで検索しても当然、ABでの説明は皆無なのですが
> 他言語の説明で、構造体のサイズ調整をしている物などひとつもなかったので
混乱させてしまったようで、申し訳ないです。ページをコミットした者です。
既にkonisiさんとToshiさんが書き込まれているように、
今回の問題はWin32APIの仕様を踏まえて、
共用体を用いて実装されているC++用のINPUT構造体を
共用体を使用することができないActiveBasic用に実装する必要に迫られたので
仕方なくパディング調整を行っていることが原因です。
ただし、ActiveBasicはメモリ操作(ポインタ操作)が可能なので、
コード:
Type INPUT
types As DWord
union[5] As DWord
End Type
をそのまま使っていただいて
コード:
Dim input As INPUT
Dim pki As *KEYBDINPUT
pki = input.union As *KEYBDINPUT
のようにすればKEYBDINPUT専用のINPUT構造体を作成する必要はありません。
同様にMOUSEINPUT構造体もHARDWAREINPUT構造体も読み込めます。
逆に書き込みたい場合は
コード:
Dim ki As KEYBDINPUT
memcpy(input.union As VoidPtr,VarPtr(ki) As VoidPtr,SizeOf(KEYBDINPUT))
とすることもできます。
引用:
> これはAB特有の問題なのかなと思ったわけです。
共用体を仕様に持たない言語であればAB以外でもこの問題は発生します。
ただし、Win32API自体が共用体を必ずしも必要としている訳ではありません。
Win32APIが必要としているのはあるメモリ領域に指定のフォーマットで
且つデータの基本サイズが28byteの1つ以上の並びです。