[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:08944] Re: 大文字しか入れられない



お世話になります。やなぎうらです。

CAPSLOCKの制御の件 、経過を報告します。

>(require "wip/winapi")
>(c:define-dll-entry winapi:BOOL SetKeyboardState ((c:char *)) "user32")

>とかすることで、Win32 API も lisp からコールできる様になるようです。

GetKeyboardState で、状態を読み取って

SetKeyboardState で書き換えるというストーリ-を
思い描いて、チャンクとやらを使ってやってみましたが、
理解も及ばずうまく値が返ってこないようであきらめました。
もしかして、ポインタの操作のような事が必要なんでしょうか?

というわけで、下記のような代替案に落ち着きました。

(require "wip/winapi")
(c:define-dll-entry c:short GetKeyState (c:int) "user32")
(c:define-dll-entry winapi:BOOL
  keybd_event  (:int32 :int32 :int32 :int32) "user32")

(when (> 1  (GetKeyState 20))
          (keybd_event 20 0 0 0)

出来たのは出来たのですが、すっきりしてません。
SetKeyboardState が使えれば、アプリ単位で
CAPSLOCKを制御出来て、keybd_eventでは、OSレベルで
切り替わるらしいです。

もし、なにか情報があればご教示くださいませ。

Index Home