C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: マウス動作の記憶再生について


(過去ログ 69 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■39868 / inTopicNo.1)  マウス動作の記憶再生について
  
□投稿者/ たぬき (6回)-(2009/08/15(Sat) 14:27:44)

分類:[.NET 全般] 

またまた質問させてもらいます。
今、タイトルのアプリケーションを作成しているのですが、クリックを記憶させる時にうまくできなくて困っています。分かる方いらっしゃいましたらヒントだけでもお願いします。
下のプログラムはtimerオブジェクトの内容です。ここで、繰り返しマウスの座標とクリックのタイミングを記憶させています。
ここで、迷っているのがAPI関数GetAsyncKeyStateの使用についてです。sleep関数で100ms設定しないと、クリックした回数以上読み取ってしまうんです。でも、timerは10msごとに繰り返しているので100msを入れるとスムーズに再生できなくて・・・
再生にはmouse_event関数を使用しているので、これと同じようにマウスのアップ、ダウンで区別できる関数はあるのでしょうか?もしないならGerAsyncKeyState関数をうまく使う方法はないでしょうか。
お願いします。


tokei2b = tokei2b + 1

mouse_x.Add(Windows.Forms.Cursor.Position.X) '配列mouse_xにマウスカーソルのX座標を追加
mouse_y.Add(Windows.Forms.Cursor.Position.Y) '配列mouse_yにマウスカーソルのY座標を追加
count = count + 1
If GetAsyncKeyState(VK_LBUTTON) <> 0 Then
count1.Add(count) '左クリックされた時、配列count1にcountを追加
Call Sleep(100) 'ユーザからのマウスクリックを制御するため100msの待ち時間

End If
If GetAsyncKeyState(VK_RBUTTON) <> 0 Then
count2.Add(count) '右クリックされた時、配列count1にcountを追加
Call Sleep(100)
End If

引用返信 編集キー/
■39869 / inTopicNo.2)  Re[1]: マウス動作の記憶再生について
□投稿者/ 囚人 (406回)-(2009/08/15(Sat) 15:03:40)
全然違う方向からの回答になりますが、グローバルフックを使ってはどうでしょうか。

キーワード
「グローバルフック」「WH_JOURNALRECORD」

実際にこの手のコードを書いたことはありませんが、まぁできるんじゃないかと。

引用返信 編集キー/
■39935 / inTopicNo.3)  Re[2]: マウス動作の記憶再生について
□投稿者/ たぬき (8回)-(2009/08/18(Tue) 15:02:49)
2009/08/18(Tue) 15:11:02 編集(投稿者)
2009/08/18(Tue) 15:10:55 編集(投稿者)

No39869 (囚人 さん) に返信
> 全然違う方向からの回答になりますが、グローバルフックを使ってはどうでしょうか。
>
> キーワード
> 「グローバルフック」「WH_JOURNALRECORD」
>
> 実際にこの手のコードを書いたことはありませんが、まぁできるんじゃないかと。


回答ありがとうございます!!
今調べてみてるんですが、グローバルフックはvb2008だけではできないんですか?ローカルフック?はできるみたいなのですが、自分のForm以外の座標も検知したいので。
それだとC++など使ったことがないので難しいかなと・・・

引用返信 編集キー/
■39937 / inTopicNo.4)  Re[3]: マウス動作の記憶再生について
□投稿者/ オショウ (307回)-(2009/08/18(Tue) 15:19:52)
> 今調べてみてるんですが、グローバルフックはvb2008だけではできないんですか?ローカルフック?はできるみたいなのですが、自分のForm以外の座標も検知したいので。
> それだとC++など使ったことがないので難しいかなと・・・

  できません。C++使って書くしかありません。

  因みにOSはWinXP?
  VISTA以降なら管理者権限必要になるかと・・・

以上。
引用返信 編集キー/
■39938 / inTopicNo.5)  Re[4]: マウス動作の記憶再生について
□投稿者/ たぬき (10回)-(2009/08/18(Tue) 15:28:06)
No39937 (オショウ さん) に返信

VISTAで使ってました。
なら別な方法しかないですね・・・

他に分かる方いらっしゃいませんか??
引用返信 編集キー/
■39939 / inTopicNo.6)  Re[1]: マウス動作の記憶再生について
□投稿者/ 魔界の仮面弁士 (1225回)-(2009/08/18(Tue) 15:36:54)
No39868 (たぬき さん) に返信
> マウスのアップ、ダウンで区別できる関数はあるのでしょうか?

DirectInput で拾えないでしょうか。Vista で試した事はありませんが…。
http://www.geocities.co.jp/SiliconValley/7406/tips/mouse/mouse3.html
引用返信 編集キー/
■39949 / inTopicNo.7)  Re[2]: マウス動作の記憶再生について
□投稿者/ オショウ (308回)-(2009/08/18(Tue) 17:31:46)
2009/08/18(Tue) 18:53:53 編集(投稿者)

『できない』と書きましたが、過去に下記URLのものを
見つけてました・・・

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

さて、これで可能か否かは、未確認ですが・・・

以上。
引用返信 編集キー/
■39966 / inTopicNo.8)  Re[1]: マウス動作の記憶再生について
□投稿者/ GOD (1回)-(2009/08/18(Tue) 21:25:28)
No39868 (たぬき さん) に返信
>もしないならGerAsyncKeyState関数をうまく使う方法はないでしょうか。
>
GerAsyncKeyStateでことが足りるなら最上位ビットと最下位ビットについて勉強したらどうですか?
あとビット演算か。
引用返信 編集キー/
■40122 / inTopicNo.9)  Re[3]: マウス動作の記憶再生について
□投稿者/ たぬき (12回)-(2009/08/20(Thu) 15:32:23)
No39949 (オショウ さん) に返信
> 2009/08/18(Tue) 18:53:53 編集(投稿者)
>
> 『できない』と書きましたが、過去に下記URLのものを
> 見つけてました・・・
>
> 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
>
> さて、これで可能か否かは、未確認ですが・・・
>
> 以上。

わざわざありがとうございます!
チャレンジしてみます。

引用返信 編集キー/
■40123 / inTopicNo.10)  Re[2]: マウス動作の記憶再生について
□投稿者/ たぬき (13回)-(2009/08/20(Thu) 15:37:29)
No39939 (魔界の仮面弁士 さん) に返信
> ■No39868 (たぬき さん) に返信
>>マウスのアップ、ダウンで区別できる関数はあるのでしょうか?
>
> DirectInput で拾えないでしょうか。Vista で試した事はありませんが…。
> http://www.geocities.co.jp/SiliconValley/7406/tips/mouse/mouse3.html

ありがとうございます。

今参考にやってみてはいるんですが、
LogAdd(〜)
ここでエラーがでてしまいます。vb2008だとどのようにすればいいのでしょうか・・・

引用返信 編集キー/
■40126 / inTopicNo.11)  Re[2]: マウス動作の記憶再生について
□投稿者/ すがり (78回)-(2009/08/20(Thu) 15:49:41)
    'ログ(リストボックス)にメッセージを追加
    Private Sub LogAdd(ByVal Msg As String)
        If Lst_Log.InvokeRequired Then
            Lst_Log.Invoke(New LogAddDelegate(AddressOf LogAdd), New Object() {Msg})
        Else
            Lst_Log.Items.Add(Msg)
            Lst_Log.TopIndex = Lst_Log.Items.Count - 1
        End If
    End Sub

上記コードがリンク先では省略されているからでしょうね。
サンプルソースがDLできるようなのでDLして中身を確認されたほうがいいでしょう。

引用返信 編集キー/
■40131 / inTopicNo.12)  Re[3]: マウス動作の記憶再生について
□投稿者/ たぬき (14回)-(2009/08/20(Thu) 15:59:59)
No40126 (すがり さん) に返信

すいません!!
確認ミスでした。ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -