No.1228 キーボードのチャタリングキャンセラー的なモノ

携帯の人には申し訳ないプログラム系の記事。
記事が折りたためないのね。

hongliang.seesaa.net
を使ったのだがうまくキャンセルできなかった。

//LowLevelKeyboardProcの戻り値の部分。ここでCallNextHookExを呼ばなければいい。
return cancel ? (IntPtr)1 : Native.CallNextHookEx(s_hook, nCode, wParam, ref lParam);

http://d.hatena.ne.jp/yuta-celestial/20081014/1223977482

という記述を見つけた。元のコードは無かったけど(^_^;
http://azumaya.s101.xrea.com/wiki/index.php?%B3%D0%BD%F1%2FC%A2%F4%2F%A5%B0%A5%ED%A1%BC%A5%D0%A5%EB%A5%D5%A5%C3%A5%AF

つまーり、最初のサイトからダウンロードしたKeyboardHook3.csの

		private int CallNextHook(int code, KeyboardMessage message, ref KeyboardState state) {
if (code >= 0) {
KeyboardHookedEventArgs e = new KeyboardHookedEventArgs(message, ref state);
OnKeyboardHooked(e);
if (e.Cancel) {
return -1;
}
}
return CallNextHookEx(IntPtr.Zero, code, message, ref state);
}

の「return -1;」値が1が正解だな!! よくわからんけどwwww

よしっ直したらうまくキャンセルされた!!

今は適切な値をちょこちょこ調査中w

using System;
using System.Windows.Forms;
namespace チャタリングキャンセラー
{
public partial class Form1 : Form
{
public Keys key_type;
public long  key_time;
public Form1()
{
InitializeComponent();
ShowInTaskbar = false;
WindowState = FormWindowState.Minimized;
//            //フォームのKeyPreviewを切り替える
//            this.KeyPreview = !this.KeyPreview;
}
private void 終了ToolStripMenuItem_Click(object sender, EventArgs e)
{
notifyIcon1.Visible = false;
Application.Exit();
}
private void Form1_Load(object sender, EventArgs e)
{
Hide();
}
private void keyboardHook1_KeyboardHooked(object sender, KeyboardHookedEventArgs e)
{
if (e.UpDown == KeyboardUpDown.Down)
{
System.Diagnostics.Debug.WriteLine(e.KeyCode);
if (key_type == e.KeyCode)
{
//終了時刻をタイマ刻み数で取得する
key_time = DateTime.Now.Ticks - key_time;
if (key_time < 100000)
{
//入力イベントをキャンセルする
e.Cancel = true;
System.Diagnostics.Debug.WriteLine(e.KeyCode + ": キャンセル");
}
}
else
{
key_type = e.KeyCode;
//開始時刻をタイマ刻み数で取得する
key_time = DateTime.Now.Ticks;
}
}
}
}
}

どのくらい面白かった?

星を押して送信してね

平均 0 / 5. Vote count: 0

是非フォローしてください

最新の情報をお伝えします

1件のコメント

  • まみむめもまみっむめもまみっむめも
    まみむめっもまみっむめもまみむめも
    ・・・うーんまだだめぽ。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です