Toon posts:

[VB6] Get mouse_event

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan ik een mouse_event checken, dus nagaan of een user klikt, dubbelklikt ed. Ik bedoel buiten het progje om dus als het op de achtergrond draait.

Ik wil nl. mijn mouse_events opvragen, doorsturen via winsock om op die PC diezelfde event te simuleren.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Dan moet je volgens mij een system hook instellen (mbv een DLL). Zoek es op Google naar keyboard hook.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Mr. B.
  • Registratie: Mei 2000
  • Niet online
Op dinsdag 04 december 2001 09:54 schreef mrdude het volgende:
Hoe kan ik een mouse_event checken, dus nagaan of een user klikt, dubbelklikt ed. Ik bedoel buiten het progje om dus als het op de achtergrond draait.
Dat zal idd, zoals jelmervos zegt, met een systemwide hook moeten. Die kun je niet in VB schrijven; je zult dus in Delphi of (V)C een DLL moeten schrijven die dat doet (of d'r 1 zoeken).

StatBar.nl - @GoT

Het verschil tussen theorie en praktijk is in de praktijk altijd veel groter dan in theorie.


Verwijderd

Hoeft geen hook te zijn, je kunt ook gewoon in een loopje de muis status checken via de API.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 19:13

Crazy D

I think we should take a look.

Op dinsdag 04 december 2001 10:32 schreef dev het volgende:
Hoeft geen hook te zijn, je kunt ook gewoon in een loopje de muis status checken via de API.
Klopt, maar een loopje is wat resource-intensiever... :)

Exact expert nodig?


Verwijderd

Topicstarter
Ik heb net wat rond gesurft, en ben op het volgende stukje code gestuit, enig idee of dit wat is? en wat wat betekend.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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 Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
Private Const MOUSEEVENTF_MIDDLEUP = &H40
Private Const MOUSEEVENTF_RIGHTDOWN = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10

'simulate the MouseDown event

Private Sub ButtonDown(Optional ByVal Button As MouseButtonConstants = _
    vbLeftButton)
    Dim lFlag As Long
    If Button = vbLeftButton Then
      lFlag = MOUSEEVENTF_LEFTDOWN
    ElseIf Button = vbMiddleButton Then
      lFlag = MOUSEEVENTF_MIDDLEDOWN
    ElseIf Button = vbRightButton Then
      lFlag = MOUSEEVENTF_RIGHTDOWN
    End If
    mouse_event lFlag, 0, 0, 0, 0
End Sub

'simulate the MouseUp event

Private Sub ButtonUp(Optional ByVal Button As MouseButtonConstants = _
    vbLeftButton)
    Dim lFlag As Long
    If Button = vbLeftButton Then
      lFlag = MOUSEEVENTF_LEFTUP
    ElseIf Button = vbMiddleButton Then
      lFlag = MOUSEEVENTF_MIDDLEUP
    ElseIf Button = vbRightButton Then
      lFlag = MOUSEEVENTF_RIGHTUP
    End If
    mouse_event lFlag, 0, 0, 0, 0
End Sub

'simulate the MouseClick event

Private Sub ButtonClick(Optional ByVal Button As MouseButtonConstants = _
    vbLeftButton)
    ButtonDown Button
    ButtonUp Button
End Sub

'simulate the MouseDblClick event

Private Sub ButtonDblClick(Optional ByVal Button As MouseButtonConstants = _
    vbLeftButton)
    ButtonClick Button
    ButtonClick Button
End Sub

Verwijderd

Je ziet toch SIMULATE staan? Dat betekend dat je die events kunt genereren, niet afvangen. Dat kun je met o.a. GetCursorPos doen.

Verwijderd

Topicstarter
Kijk, de positie van de cursor kan ik al afvangen en genereren, geen probleem, alleen het klikken ed. lukt me niet.

edit:

ik ben nl. bezig met het bouwen van een netwerk en ik wil m'n broertje een oor aan naaien in UT, alleen dan wil ik wel zijn trekker kunnen bedienen >:)

Verwijderd

Nog wat nodig dan voor Keycode control?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As _
    Long
Private Const KEYEVENTF_KEYUP = &H2

Sub PressVirtualKey(ByVal virtKeyCode As KeyCodeConstants, _
    Optional ByVal Action As Integer)
    ' press the key if the argument is 0 or greater
    If Action >= 0 Then
      keybd_event virtKeyCode, 0, 0, 0
    End If
    ' then release the key if the argument is 0 or lesser
    If Action <= 0 Then
      keybd_event virtKeyCode, 0, KEYEVENTF_KEYUP, 0
    End If
End Sub

volgens mij werkt het zo, dan kan je ook lopen en springen ;)

Verwijderd

Zo detecteer je een klik:

If GetAsyncKeyState(vbLeftButton) Then Goto LinkerKnopje
If GetAsyncKeyState(vbRightButton) Then Goto RechterKnopje

Wel ff de API er bij zetten.

Voor het genereren van een klik: zie je code boven

Overigs weet ik niet of UT met DirectInput werkt, dan zul je het waarschijnlijk anders moeten doen.

Verwijderd

Topicstarter
OK, thanks... :) :) :)

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Op dinsdag 04 december 2001 12:11 schreef dev het volgende:
Overigs weet ik niet of UT met DirectInput werkt, dan zul je het waarschijnlijk anders moeten doen.
Dat kun je instellen. :P

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?

Pagina: 1