| |

Visual-Basic EinsteigerRe: Ups.VB stürzt ab - neue Version, jetzt sicher | |  | Autor: Blackbox | Datum: 08.12.13 18:56 |
| Hi reisender,
ist klar. Ich habe von Byref auf Byval geändert ;) Wenn die Event-Signatur nicht dem Original entspricht, löst VB den Fehler aus.
Hier nun das Manual. Viel Spass ;)
CSysMouseLib
Bei der COM-Komponenten handelt es sich um einen COM-Server, der
in einer standard Dll eingebettet ist und mit DllGetClassObject
erzeugt werden kann. Classic VisualBasic (VB 6.0) kann als COM-
Client diesen COM-Server wie eine gewöhnliche Klasse verwenden.
Im gewissen Sinn ist die Dll eine Brücke zwischen native WindowsAPI
und COM.
Aufgabe ist es einen SystemHook zu erzeugen und den Windows Callback
auf einen ConnectionPoint abzubilden, der von VB als Event empfangen
werden kann. WindowsHook benötigt eine standard Dll um systemweite
Inputs in einen Thread zu empfangen.
Die Deklaration auf das Object sollte mit dem Zusatz:
WithEvents
erfolgen, da die Hauptfunktionalität des Servers über einen _
ConnectionPointContainer und Connectionpoints läuft.
Bei der öffentlichen Klasse handelt es sich um die Klasse: CSYSMOUSE.
Deklaration in VB (zB in Form1)
Private WithEvents osMouse As CSYSMOUSE
Somit lassen sich folgende Events in den Code integrieren:
Private Sub osMouse_SYSMOUSEACTION(ByVal WPARAM As Long, ByVal LPARAM As Long)
End Sub
SYSMOUSEACTION: Fired bei jeder Mouseaktion im gesamten System (nicht nur
im eigenen Thread). wParam gibt die entsprechende Windows-Message zurück und
lParam aber einen Zeiger auf eine Struktur. Dazu später mehr.
Die Komponente hat folgende Eigenschaften:
COMSVRVERSION: Ein String (read only) das die Versionsbezeichnung beinhaltet.
DLLMODULEHANDLE: Ein Long (read only) das den Modulehandle der geladenen Dll _
beinhaltet. Der Wert sollte geprüft werden, ob die Dll ordentlich geladen _
ist. Der Wert ist 0, ging etwas schief.
ISSTARTED: Long (read only). Ist 1 Wenn der Windowshook läuft, ansonst 0.
HOOKTYPE: Long (read/write). Gibt den HookTyp zurück. Standardmäßig ist das: _
WH_MOUSE. Man kann aber vor dem Start des Hook folgende Werte
doch noch setzen:
Private Const WH_CALLWNDPROC As Long = 4
Private Const WH_CALLWNDPROCRET As Long = 12
Private Const WH_CBT As Long = 5
Private Const WH_DEBUG As Long = 9
Private Const WH_FOREGROUNDIDLE As Long = 11
Private Const WH_GETMESSAGE As Long = 3
Private Const WH_HARDWARE As Long = 8
Private Const WH_JOURNALPLAYBACK As Long = 1
Private Const WH_JOURNALRECORD As Long = 0
Private Const WH_KEYBOARD As Long = 2
Private Const WH_KEYBOARD_LL As Long = 13
Private Const WH_MAX As Long = 11
Private Const WH_MAXHOOK As Long = WH_MAX
Private Const WH_MIN As Long = -1
Private Const WH_MINHOOK As Long = WH_MIN
Private Const WH_MOUSE As Long = 7
Private Const WH_MOUSE_LL As Long = 14
Private Const WH_MSGFILTER As Long = -1
Private Const WH_SHELL As Long = 10
Private Const WH_SYSMSGFILTER As Long = 6
Das hat dann die Folge, dass sich die Werte in wParam und lParam im
SYSMOUSACTION-Event andere Werte und andere Strukturen repräsentieren.
Diese können aber aus der MSDN entnommen werden. Ohne Veränderung dieser
Eigenschaft ist WM_MOUSE voreingestellt. Wenn Sie statt Mouse das Keyboard
checken wollen - bitte schön, einfach die Eigenschaft auf WH_KEYBOARD setzen.
LParam liefert einen Zeiger auf MouseHookStruct. Um den Zeiger zu _
dereferenzieren wird die API-Funktion: CopyMemory verwendet:
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef _
Destination As Any, ByRef Source As Any, ByVal Length As Long)
Beispiel: Systemweite Auswertung der X-Position des Mousepointer:
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MOUSEHOOKSTRUCT
pt As POINTAPI
hwnd As Long
wHitTestCode As Long
dwExtraInfo As Long
End Type
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
(ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)
Private WithEvents os As CSYSMOUSE
Private Sub Form_Load()
Set os = New CSysMouseLib.CSYSMOUSE
If os.DLLMODULEHANDLE > 0 Then
os.START
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
os.STOP
End Sub
Private Sub os_SYSMOUSEACTION(ByVal WPARAM As Long, ByVal LPARAM As Long)
Dim mS As MOUSEHOOKSTRUCT
CopyMemory ByVal VarPtr(mS), LPARAM, Len(mS)
Form1.Caption = mS.pt.x
End Sub
Method: Start startet den Systemhook
Method: Stop stoppt den Systemhook
Method: u__Port_s: Verwenden Sie bitte besser nicht. Der gehört zum System. Hier ist der Link zur nun aktuellsten Version (ausführlich getestet)
http://www.file-upload.net/download-8378497/CSysMouseLib.dll.html
Beitrag wurde zuletzt am 08.12.13 um 19:04:08 editiert. |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0 
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|