Static Textに表示させた文字列をスクロールは、
少なくともWinamp(Ver2.x)では、hiraさんが言われている方法で
おこわなれていたと思います(全部がその方法ではないかもしれません)。
複数キーの同時取得に関しては、
GetKeyboardState()を使う方法の方が楽かもしれません。
せっかくなので、私が使っている「CTRL」を使ったキーの取得用の関数を
参考までに載せておきます。
Ver2.xのものですが、APIを呼んでいるだけなので
Ver4.xでも問題なく動作すると思います。
コード: 全て選択
'押されているキーボードの取得
'2つのキーまで同時取得。1つのときは、二番目の引数ににNULLを指定。
'指定した2つのキーが押されていれば、TRUEを返す。でなければFALSE。
'※1番目がアスキー、2番目が仮想キー(CtrlやShiftとか)を仮定してますが、実際はどっちでもかまいません。
Function WsIsCombAscVK( ByVal nKeyAsc As Long, ByVal nKeyVK As Long ) As Long
Dim bKeyBuf( 256 ) As Byte
Dim i As Long
GetKeyboardState( bKeyBuf(0) )
WsIsCombAscVK = FALSE
If( nKeyVK=0 )Then
If( bKeyBuf( nKeyAsc ) And &H80 )Then
WsIsCombAscVK = TRUE
EndIf
If( (96<nKeyAsc)and(nKeyAsc<123) )Then
If( bKeyBuf( nKeyAsc-32 ) And &H80 )Then
WsIsCombAscVK = TRUE
EndIf
EndIf
Else
If( bKeyBuf( nKeyVK ) And &H80 )Then
If( bKeyBuf( nKeyAsc ) And &H80 )Then
WsIsCombAscVK = TRUE
EndIf
If( (96<nKeyAsc)and(nKeyAsc<123) )Then
If( bKeyBuf( nKeyAsc-32 ) And &H80 )Then
WsIsCombAscVK = TRUE
EndIf
EndIf
EndIf
EndIf
'キーボード状態の初期化
If( WsIsCombAscVK = TRUE )Then
For i=0 To 255
bKeyBuf( i ) = NULL
Next
SetKeyboardState( bKeyBuf(0) )
EndIf
EndFunction
ちなみに、CTRLキーのアスキーコードは
Const VK_CONTROL = &H11
で定義済みです。
この関数だと、ウィンドウにフォーカスが無いときでも
キーに反応してしまう?みたいなので、
GetForegroundWindow()
でフォーカスが当たっているかどうかを判別してから
キーを取得するようにします。