ich bin im Moment auf der Suche nach einer Möglichkeit, die Idle-Zeit des Benutzers zu ermitteln (wie lange die Maus nicht bewegt bzw. keine Taste gedrückt wurde). Das scheint kein triviales Problem zu sein, d.h. es gibt keinen einfachen API-Aufruf, mit dem man Windows befragen könnte.
Declare Function IdleTrackerInit Lib „c:\PFAD\idletrac.dll“
Alias „IdleTrackerInit“ () As Boolean
ret = IdleTrackerInit()
Aber die Paramter und der Rückgabewert stimmen, jedenfalls
wenn man nach dem ausggeht, das auf der Webseite angegeben ist
( BOOL IdleTrackerInit(); )
Declare Function IdleTrackerInit Lib „c:\PFAD\idletrac.dll“
IdleTrackerInit() As Boolean
ret = IdleTrackerInit
Evtl. musst du „Boolean“ durch „Integer“ oder Byte ersetzen. Den Typ „BOOL“ gibt es in C eigentlich nicht. Irgenwo muss im Header der DLL ein Eintrag „#define BOOL …“ stehen. Der Boolean-Typ in VB ist ein 32-Bit Wert, was aber für diese DLL verwendet wurde weiss ich nicht.
Vielen Dank für deine Hinweise, aber leider hat auch das ‚Herumraten‘ beim Rückgabewert nicht geholfen. Ich bekomme weiterhin die Einsprungfehlermeldung.
Lässt sich nicht irgendwie herausfinden, welche Funktionen (und wie sie zu handhaben sind) die DLL exportiert?
Der Fehler kommt etwa nicht durch einen falschen Typ des Rückgabewertes sondern durch die aufgerufene bzw. exportierte Funktion - der Eingangspunkt in das Library. Ich habe mir nun die DLL auch downgeloaded und konnte sie ebenfalls weder in der Registry registrieren noch unter VB via API benutzen. Ich habe mir auch den Source in VC++ angesehen und - obwohl ich VC-Beginner bin - scheint dieses Library nicht unter VB weiterverwendbar zu sein, da es keine Standard-COM-Schnittstellen bietet. Es ist also „nur“ eine C+±Ressource, die nur mit C++ verwendet werden kann.
Ich kann mich auch täuschen, aber die Hinweise und Fehlermeldungen sind fast eindeutig. Diese DLL kann man sicher „VB-fähig“ machen, doch da bin ich überfragt - wäre aber ein Posting im C+±Thread wert, oder?
Sorry, Stefan.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
ich hab’s mir auch mal angeschaut. Das Problem ist, daß die Funktionsnamen in der DLL Typinformationen enthalten. Die Einsprungpunkt heißt nicht
„IdleTrackerInit“
sondern
„?IdleTrackerInit@@YAHXZ“
Die VB-Anweisung kann so aussehen:
Declare Function IdleTrackerInit Lib "[Pfad]\idletrac.dll" Alias "?IdleTrackerInit@@YAHXZ" () As Boolean
(Auf Groß-/Kleinschreibung achten!)
Alternativ geht auch die Nummer des Einsprungpunktes (hier Nr. 2):
Declare Function IdleTrackerInit Lib "[Pfad]\idletrac.dll" Alias "#2" () As Boolean
Nochmal der Inhalt der DLL:
Nr. 1
Name: "IdleTrackerGetLastTickCount"
Einsprungpunkt: "?IdleTrackerGetLastTickCount@@YAKXZ"
'
Nr. 2
Name: "IdleTrackerInit"
Einsprungpunkt: "?IdleTrackerInit@@YAHXZ"
'
Nr. 3
Name: "IdleTrackerTerm"
Einsprungpunkt: "?IdleTrackerTerm@@YAXXZ"
Ich habe mir die DLL übrigens mit Microsofts „Dependency Walker“ (depend.exe) angesehen, der bei den Dienstprogrammen des Visual Studio dabei ist. (Vielleicht gibt’s ihn auch so bei Microsoft)
Sowas! Und ich hab mich mit einem Hexeditor durch die DLL gehangelt und schließlich (mit großem Zweifel) „IdleTrackerInit@@YAHXZ“ ausprobiert! Funktionierte wegen dem fehlenden Fragezeichen natürlich nicht…
Vielen Dank! Sowohl für deine Arbeit, den Aufruf selber herauszufinden, als auch den Hinweis auf das Tool. So muss ich jetzt nicht jedesmal ‚rumnervern‘, wenn ich wieder ein ähnliches Problem habe