tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルマウスを移動させた場所で右クリックしたいです
記事No6510
投稿日: 2007/11/07(Wed) 21:33
投稿者高校教師
質問事項はマウスを移動させた場所で右クリックまたはダブルクリックするにはどうすればいいかです。
私なりに考えてプログラムをしてみたのですが以下のような
エラーログがでてしまいます。
どのようにすれば回避できるのでしょうか。

マネージ デバッグ アシスタント 'PInvokeStackImbalance' では 'C:\ronbun\kaigorobo\kaigorobo\bin\Debug\kaigorobo.vshost.exe' に問題を検出しました。
追加情報: PInvoke 関数 'kaigorobo!kaigorobo.Form1::mouse_event' がスタックを不安定にしています。PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。呼び出し規約、および PInvoke シグネチャのパラメータがターゲットのアンマネージ シグネチャに一致していることを確認してください。

またソースを下のツリーに添付させていただきます。

[ツリー表示へ]
タイトルRe: マウスを移動させた場所で右クリックしたいです
記事No6511
投稿日: 2007/11/07(Wed) 21:34
投稿者高校教師
Public Class Form1
Dim WithEvents Speech As SKSpeechLib.SKSpeech '音声認識するための行
Dim ieTarget As Object 'ブラウザをオブジェクト化
'マウスを擬似的に動作させる(P1044)
Private Declare Sub mouse_event Lib "user32" _
   (ByVal dwFlags As Long, ByVal dx As Long, _
    ByVal dy As Long, ByVal cButtons As Long, _
    ByVal dwExtraInfo As Long)
'Private MoP As POINTAPI          
'現在のマウスポインタの位置座標
    Private Const MOUSE_MOVED = &H1
    Private Const MOUSEEVENTF_ABSOLUTE = &H8000& ' absolute move
    Private Const MOUSEEVENTF_LEFTUP = &H4   '左ボタンUP
    Private Const MOUSEEVENTF_LEFTDOWN = &H2  '左ボタンDown
    Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 '中央ボタンDown
    Private Const MOUSEEVENTF_MIDDLEUP = &H40  '中央ボタンUP
    Private Const MOUSEEVENTF_RIGHTDOWN = &H8  '右ボタンDown
    Private Const MOUSEEVENTF_RIGHTUP = &H10  '右ボタンUP
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Speech = New SKSpeechLib.SKSpeech("C:\ronbun\kaigorobo\SpeechGrammer.xml")
'@で宣言したものを利用できるようにしている
    Speech.Enabled = True 'ここがTrueであれば音声認識する偽であれば認識しい      
        'マウスを左上に移動させる
        Windows.Forms.Cursor.Position = New Point(0, 0)
    End Sub
Private Sub SKSpeechRecognitionEventHandler(ByVal sender As Object, _
                             ByVal torikomionsei As SKSpeechLib.SKSpeechEventArgs) _Handles Speech.Recognition
   ここでマウスを右クリックする
      Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)  
        'ここに使用したい命令を記入する
        If torikomionsei.Words(0) = "kaisi" Then
            CheckBox1.Checked = True
        End If
        If torikomionsei.Words(0) = "owari" Then
            TextBox1.Text = torikomionsei.Words(0)
            CheckBox1.Checked = False
            ieTarget.application.quit() 'ブラウザを閉じる
            ieTarget.Visible = Nothing
        End If
        If CheckBox1.Checked = True Then
            TextBox1.Text = torikomionsei.Words(0)
                Case "TV"
                    If Check1.Checked = True Then
                        Check1.Checked = False
                    Else
                        Check1.Checked = True
                        Windows.Forms.Cursor.Position = New Point(100, 100)
                        Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
                    End If
                Case "mous"
                    If mous.Checked = True Then
                        mous.Checked = False

                    Else
                        mous.Checked = True
                        'マウス位置の取得
                        Dim X As Integer
                        Dim Y As Integer
                        Dim Pos As Point = Windows.Forms.Cursor.Position
                        X = Pos.X
                        Y = Pos.Y
                        Label2.Text = X & ", " & Y
                    End If
            End Select
        End If
    End Sub  
End Class

ながくなりました、どこが悪いのかをおしえてください。お願いします。

[ツリー表示へ]