VB5.0(SP3)で次のプログラムを作成しました。
キーボードからNumLockキーを押して状態をOFFにすると、プログラム側(タイマー関数内)でその状態をチェックし、状態をONに戻します。
しかし、次の動作をした時に問題が発生しました。
但し、この問題は、OSがWindowsNT4.0(SP6)の端末で発生するのですが、Windows2000/XP では発生しませんでした。
起動したフォーム画面にフォーカスがある間は問題ないのですが、フォーカスを外した状態でNumLockキーを押して状態をOFFにすると、ON/OFFが繰り返されてしまいます。
この時に、マウスをフォーム画面の上に持ってくるとその繰返し処理が止まります。
もちろん再度 NumLockキーを押しても止まります。
OSの問題なのでしょうか?それともプログラムが悪いのでしょうか?
下記にそのプログラムを表記します。
<プログラム>
フォーム(Form1)にタイマー(Timer1)を貼りつけただけです。
(Module1.bas)
Option Explicit
Public Const VK_NUMLOCK = &H90
Public Const KEYEVENTF_KEYUP = &H2
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
(Form1.frm)
Option Explicit
Private Sub Form_Load()
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
On Error Resume Next
If GetKeyState(VK_NUMLOCK) = 0 Then
keybd_event VK_NUMLOCK, 0, 0, 0
keybd_event VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0
End If
End Sub
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
AttachThreadInputで、フォーカスを持っている
スレッドにアタッチしてからGetKeyStateで、
調べてみてはどうでしょうか?
いま、手元にNT4.0の環境がないので確認できないのですが・・・
参考URL:http://www.microsoft.com/JAPAN/developer/library …
No.1
- 回答日時:
キーボードを押す関数VB定義のSendKeysとかそういったAPIを使用すると、どうもNUM Lockに変なことが起こるようです。
私もNUM Lockを押すプログラムではないのですが、他のキーを押すプログラムを昔WIN98上で作っていたとき、そんなことがありました。
100ミリ秒というのはかなり重いと思うのですが、もっと間隔をあけることはできませんか?
キーか押されるまえにタイマーのイベントが複数同時に起こって、NUM Lockがオンになっているという状態になるまで、時間がかかるのではないかと思います。
早速のお返事ありがとうございます。
1000ミリ秒や5000ミリ秒で設定してもダメでした。
設定した間隔でON/OFFが繰り返されました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba listviewにおけるtextのAli...
-
C言語で1000までの素数を求める...
-
2値化した画像の黒い部分のピク...
-
世界一美しいソースコード
-
プロダクションコードとは?
-
Excel VBA で、データベースフ...
-
初級者の質問――time_tについて
-
Win32 APIでネットワークプ...
-
参考にいろいろとc言語、c++言...
-
Visual Basic 2010で方形波(矩...
-
Pythonを用いて等高線図を作成...
-
大学で、泡の粗大化のシミュレ...
-
マイコンからプログラムを読み...
-
VBAにてTIFFから画像を取込みた...
-
ポーティングって?
-
VB6 画面サイズ変更について
-
XPathの関数「text()="value"」...
-
direcetsoundでmp3再生方法
-
URLの最初の「h」を略す
-
【ヒストグラムのプログラミン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba listviewにおけるtextのAli...
-
プロダクションコードとは?
-
指定したフォルダーを最前面表...
-
Webプログラムってネイティブア...
-
COBOLのS9タイプからXタイプへ...
-
VBコンソールアプリ(.NET Frame...
-
VBA
-
2値化した画像の黒い部分のピク...
-
初級者の質問――time_tについて
-
無限ループ中にある任意のキー...
-
Arduino nano(アルドゥイーノ ...
-
世界一美しいソースコード
-
VBAにてTIFFから画像を取込みた...
-
C言語でpingを実行してその結果...
-
三次元のグラフを書きたいので...
-
マイコンからプログラムを読み...
-
XPathの関数「text()="value"」...
-
C言語→MATLABへの変換で、困っ...
-
URLの最初の「h」を略す
-
プログラミングの問題と解答例...
おすすめ情報