Mausklick aufgrund von Koordinaten aus einer INI Datei ausführen

::emanuel::

Erfahrenes Mitglied
Hi Freunde!

Hab ein Problem, und zwar möchte ich ein Programm schreiben, das einen Mausklick irgendwo am Bildschirm durchführt, und zwar aufgrund von Koordinaten in einer INI-Datei.
Dass der Mausklick durchgeführt wird, hab ich schon zusammengebracht, aber die Kooridnaten hab ich in Visual Basic im Quelltext festgelegt. Aber nachdem ich bei anderen PCs nicht VisualBasic zur Änderung dieses Quelltextes habe, muss ich die Kooridnaten aus einer externen INI Datei auslesen, damit ich die Koordinaten auch anpassen kann.

Hier mein Code, den ich bis jetzt programmiert habe:
Code:
Option Explicit

'zunächst die benötigten API-Deklarationen
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_ABSOLUTE = &H8000
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
Private Const MOUSEEVENTF_MIDDLEUP = &H40
Private Const MOUSEEVENTF_MOVE = &H1
Private Const MOUSEEVENTF_RIGHTDOWN = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10

Private Declare Function GetPrivateProfileString Lib _
        "kernel32" Alias "GetPrivateProfileStringA" _
        (ByVal lpApplicationName As String, ByVal _
        lpKeyName As Any, ByVal lpDefault As String, _
        ByVal lpReturnedString As String, ByVal nSize _
        As Long, ByVal lpFileName As String) As Long

Private Declare Function GetPrivateProfileSection Lib _
        "kernel32" Alias "GetPrivateProfileSectionA" _
        (ByVal lpAppName As String, ByVal lpReturnedString _
        As String, ByVal nSize As Long, ByVal lpFileName _
        As String) As Long

Dim File$, Field() As String
Dim Section As String
Dim X As String
Dim Y As String


Public Sub Mausklick(Optional Button As _
  MouseButtonConstants = vbLeftButton, _
  Optional XPos As Long = -1, _
  Optional YPos As Long = -1)

  'Mauszeiger positionieren
  If XPos <> -1 Or YPos <> -1 Then
    mouse_event MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, _
    XPos / Screen.Width * 990000, _
    YPos / Screen.Height * 990000, 0, 0
  End If

  'Mausklick simulieren
  Select Case Button
    'linke Maustaste
    Case vbLeftButton
      mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
      mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
      
    'mittlere Maustaste
    Case vbMiddleButton
      mouse_event MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0
      mouse_event MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0

    'rechte Maustaste
    Case vbRightButton
      mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
      mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
  End Select
  
End Sub

Private Sub Form_Activate()

  Dim X%
    'Pfad der neuen ini-Datei
    File = App.Path & "\Koordinaten.ini"
    Section = "Koordinaten"
    X = "X"
    Y = "Y"
    
    X = INIGetValue(File, Section, X)
    Y = INIGetValue(File, Section, Y)

Mausklick vbLeftButton, X, Y
Unload Mausklickfenster
End Function

Private Function INIGetValue(ByVal Path$, ByVal Sect$, ByVal Key$) _
                             As String
  Dim Result&, Buffer$
    'Wert lesen
    Buffer = Space$(32)
    Result = GetPrivateProfileString(Sect, Key, vbNullString, _
                                     Buffer, Len(Buffer), Path)
    INIGetValue = Left$(Buffer, Result)
End Function

Private Sub INIGetArray(ByVal Path$, ByVal Sect$, xArray() As String)
  Dim Result&, Buffer$
  Dim l%, p%, z%
    'String lesen
    Buffer = Space(32767)
    Result = GetPrivateProfileSection(Sect, Buffer, Len(Buffer), Path)
    
    Buffer = Left$(Buffer, Result)
    
    If Buffer <> "" Then
      'String mit Trennzeichen Chr$(0) in ein Feld umwandeln
      l = 1
      ReDim xArray(0)
      Do While l < Result
        p = InStr(l, Buffer, Chr$(0))
        If p = 0 Then Exit Do
        
        xArray(z) = Mid$(Buffer, l, p - l)
        z = z + 1
        ReDim Preserve xArray(0 To z)
        l = p + 1
      Loop
    End If
End Sub
Wenn ich jetzt das Projekt kompilieren möchte, kommt mir in der Zeile
Code:
Mausklick vbLeftButton, X, Y
folgender Fehler:

Fehler beim Kompilieren:
Argumentty ByRef unverträglich.

Tja, soweit ich das sehe, sind die X und Y Kooridaten nicht auf eine Variable verweisbar.
Tja, wass soll ich jetzt tun, damit dies aber doch möglich ist. Bin mir fast sicher dass es nur eine Kleinigkeit ist.

Danke auf jeden Fall für jede Hilfe!

LG,

Emanuel
 
Hi Leute! :-)

Nichts für ungut, aber ich hab das Problem jetzt selbst behoben *smile*

Und zwar war der Fehler in folgenden zwei Zeilen:
Code:
  Optional XPos As String = -1, _
  Optional YPos As String = -1)
Da hab ich nämlich auf String geändert.
Und dann war da noch eine End function auf End sub zu ändern - und siehe da, es hat sogleich funktioniert *freu*
Kennt ihr auch diese Momente, wo man tagelang an einem Problem oder einem Vorhaben sitzt und einmal kommt einem der Geistesblitz, wie es vielleicht gehen könnte, und dann klappt es auf anhieb? Tja, so einen hatte ich jetzt *G*

Schönen Abend noch!

LG,

Emanuel
 
Zurück