freysup
Goto Top

Mausbewegung mit vbs Script abfragen

Ist es möglich mit vbs die mausbewegung abzufragen?

Wie kann man unter vbs script die mausbewegungen abfragen.
Also um zu sehen ob die maus bewegt wird oder nicht.
Script sollte eine Rückantowrt liefern
Ich hätte nähmlich gerne gesehen ob sich jamnd am Computer befindet oder nicht.

Content-ID: 82578

Url: https://administrator.de/contentid/82578

Ausgedruckt am: 23.11.2024 um 11:11 Uhr

SvenGuenter
SvenGuenter 07.03.2008 um 16:38:19 Uhr
Goto Top
und was machst du wenn derjenige nur am tippen ist?

Ich weiß eine Frage ist keien Antwort aber vielleicht kann man das problem auch anders lösen als über das mouseevent
SvenGuenter
SvenGuenter 07.03.2008 um 16:54:45 Uhr
Goto Top
Hallo versuch das mal

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace StringPerf

{

public partial class PopupPanel : Form

{

private Boolean doDrag = false;

private Int32 offsetX = 0;

private Int32 offsetY = 0;

public PopupPanel()

{

InitializeComponent();

}

void Parent_MouseMove(object sender, MouseEventArgs e)

{

}

private void PopupPanel_MouseDown(object sender, MouseEventArgs e)

{

doDrag = true;

offsetX = e.X;

offsetY = e.Y;

}

private void PopupPanel_MouseUp(object sender, MouseEventArgs e)

{

doDrag = false;

}

private void PopupPanel_MouseMove(object sender, MouseEventArgs e)

{

if (doDrag)

{

this.Location = new Point(MousePosition.X - offsetX, MousePosition.Y- offsetY);

}

}

}

}
bastla
bastla 07.03.2008, aktualisiert am 18.10.2012 um 18:35:28 Uhr
Goto Top
@SvenGuenter

Ich muss gestehen, das ist eines der interessantesten VBScripts seit jenem hier ...

Grüße
bastla
misterdemeanor
misterdemeanor 08.03.2008 um 10:02:12 Uhr
Goto Top
Ich muss gestehen, das ist eines der interessantesten VBScripts

Hehe, wirklich nettes VBScript face-wink Dann würd Dir das hier sicher auch gefallen, bastla:

<System.Runtime.InteropServices.ComVisible(True)> _
 <Microsoft.VisualBasic.ComClass()> Public Class MousePosition
  Private m_Point As POINTAPI
  Private m_LastPoint As POINTAPI
  Private m_Interval As Double
  Private m_HasMoved As Boolean
  Private WithEvents t As System.Timers.Timer

  Private Structure POINTAPI
    Public x As Int32
    Public y As Int32
  End Structure

  Private Declare Auto Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Int32  

  Public Sub New()
    GetCursorPos(m_Point)
    m_LastPoint = m_Point
    m_Interval = 3000
    m_HasMoved = True
    t = New System.Timers.Timer(m_Interval)
    't.Start() 'ggfls. automatisch starten  
  End Sub

  Public ReadOnly Property X() As Int32
    Get
      GetCursorPos(m_Point)
      Return m_Point.x
    End Get
  End Property
  Public ReadOnly Property Y() As Int32
    Get
      GetCursorPos(m_Point)
      Return m_Point.y
    End Get
  End Property
  Public ReadOnly Property HasMoved() As Boolean
    'Gibt an ob sich die Mauscursor-Position im angegebenen Intervall verändert hat.  
    Get
      Return m_HasMoved
    End Get
  End Property
  Public Property Interval() As Single
    Get
      Return m_Interval
    End Get
    Set(ByVal value As Single)
      m_Interval = value
      t.Interval = m_Interval
    End Set
  End Property
  Public Sub StartMouseWatcher()
    t.Start()
  End Sub
  Public Sub StopMouseWatcher()
    t.Stop()
  End Sub
  Private Sub t_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles t.Elapsed
    GetCursorPos(m_Point)
    If (m_Point.x <> m_LastPoint.x) Or (m_Point.y <> m_LastPoint.y) Then
      m_HasMoved = True
    Else
      m_HasMoved = False
    End If
    GetCursorPos(m_LastPoint)
  End Sub
End Class

Jaja, ist kein Script, sondern kann in eine VB2005 [Express] Klassenbibliothek eingefügt werden die man dann mit regasm.exe [filename] /tlb registriert. So kann man dann aus beliebigen COM-Clients Objekte davon instanzieren-->CreateObject("AssemblyName.AssemblyProduct")

PS: Vorzugsweise natürlich vorh noch mit einem StrongName versehen und mit dem Schalter /Codebase registrieren.

Registrieren von Assemblys mit COM

BG, Felix -misterdemeanor-

Edited: Anfangs war ja nur die Koordinatenermittlung implementiert...
bastla
bastla 08.03.2008 um 13:22:54 Uhr
Goto Top
Hallo misterdemeanor!

Dann würd Dir das hier sicher auch gefallen, bastla
Tut es auch ... face-smile

... ist kein Script, sondern kann in eine VB2005 [Express] Klassenbibliothek eingefügt werden ...
... weil es (wenn auch nicht exakt der ursprünglichen Fragestellung entsprechend) als alternative Variante deklariert und mit "Gebrauchsanleitung" versehen ist - so sehe ich es als ernst zu nehmenden Lösungsvorschlag an.

@freysup
Da VBS auf einen ganz anderen Verwendungszweck ausgerichtet ist, wird eine Umsetzung Deines Vorhabens damit wohl nicht möglich sein ...

Grüße
bastla
misterdemeanor
misterdemeanor 08.03.2008 um 17:23:05 Uhr
Goto Top
Hallo bastla,

zugegeben, "Anleitung" ist keineswegs ausführlich und man müsste sich schon noch mit auseinandersetzen. Aber da wäre ich sicher auch noch für Rückfragen da gewesen.

Sicherlich ist es auch so keineswegs eine saubere "COM"-Umsetzung. Vom Fragetext her eine "ernst zu nehmende" Antwort, da stimme ich Dir zu face-wink Für diese Einschätzung fühle ich mich sogar wirklich geehrt, sie kommt von Dir!
Für das eigentliche Vorhaben freysup´s --> eine Benutzeraktivität zu ermitteln, sicher auch nicht stolperfrei...genau gesagt ein Mienenfeld.


Was mich aber interessieren würde, wäre Deine generelle Meinung zu meinem "Lösungsansatz"-->.Net ([D]COM) Einsatz in (z.B.) vbScript. Als Batch und Script Guru der Du zweifellos bist würde mich das sehr interessieren. Habe mit Scripting zwar wenig am Hut (größtenteils hier bei Fragen), es wwürde mich wie geschrieben sehr interessieren.

Hoffe das ist Dir nicht zu sehr Off Topic!

BG, Felix -misterdemeanor-
bastla
bastla 08.03.2008 um 18:27:22 Uhr
Goto Top
Hallo misterdemeanor!

Deinen Ansatz habe ich zwar nicht getestet, finde ihn aber sinnvoll, da eben VBS der unmittelbare Zugriff auf Windows-APIs fehlt und aufgrund der freien Verfügbarkeit der VisualStudio-"Express"-Versionen eine Umsetzung Deines Vorschlages auch durchaus "kostengünstig" ist face-wink ...

Auch wenn es sicherlich für Fragesteller angenehmer ist, mit bereits installierten Komponenten (also CMD + ev VBS) auszukommen und nicht selbst "Hand anlegen" zu müssen, zeigt aber gerade diese Problemstellung hier (welche ich gar nicht näher kommentieren möchte face-wink), dass es eben für die genannten "einfachen" Mittel Grenzen gibt.

Damit aber die Hürde nicht zu hoch wird, könntest Du ja (wenn Dir einmal besonders langweilig sein sollte face-wink) das Thema in Form eines ("Schritt für Schritt"- ) Tutorials noch ein wenig aufbereiten und damit leichter umsetzbar machen ...

Grüße
bastla

P.S.: Brich Dir keine Verzierungen (wie "Guru") ab - wie meinem Nick zu entnehmen, bin ich ja, im Gegensatz zu Dir, noch nicht einmal Programmierer, sondern nur ein (Basic-)Bastler face-wink, der vom einzigen "Guru" hier (Biber), ein wenig "batchen" gelernt hat ...