Gibt es ein Beispiel oder eine Methode zum Abrufen der Leerlaufzeit eines Windows-Systems mit Go?
Ich habe mir die Dokumentation auf der Golang-Website angeschaut, aber ich denke, dass ich vermisse, wie man auf die API zugreift (und sie benutzt), um Systeminformationen einschließlich der Leerlaufzeit zu erhalten.
Gos Website ist fest codiert, um die Dokumentation für die Standard-Bibliothekspakete unter Linux anzuzeigen. Sie müssen Godoc und führen Sie es selbst:
%Vor% Öffnen Sie dann http://127.0.0.1:6060/
in Ihrem Webbrowser.
Bemerkenswert ist das Paket syscall
, das Funktionen für den Zugriff auf Funktionen in DLLs bereitstellt, einschließlich UTF-16-Helfern und Callback-Generierungsfunktionen.
Eine schnelle rekursive Suche in der Go-Struktur führt dazu, dass es speziell für GetLastInputInfo()
keine API hat. Wenn also etwas fehlt, sollten Sie diese Funktion direkt von der DLL aus aufrufen können:
Ihr Fall beinhaltet eine Struktur. Soweit ich weiß, können Sie die Struktur einfach neu erstellen (Felder in der gleichen Reihenfolge halten), aber Sie müssen alle int
-Felder im Original in int32
konvertieren, andernfalls Dinge werden auf 64-Bit-Windows brechen . Wenden Sie sich an die Seite mit den Windows-Datentypen in MSDN für die entsprechenden Typ-Äquivalente. In Ihrem Fall wäre dies
Da dies (wie so viele Strukturen in der Windows-API) ein cbSize
-Feld hat, das erfordert, dass Sie es mit der Größe der Struktur initialisieren, müssen wir dies auch tun:
Jetzt müssen wir nur noch einen Zeiger auf die Variable lastInputInfo
an die Funktion übergeben:
und denken Sie daran, syscall
und unsafe
zu importieren.
Alle Argumente für DLL/LazyDLL.Call()
sind uintptr
, wie auch die r1
return. Die _
return wird nie unter Windows verwendet (es hat mit dem verwendeten ABI zu tun).
Da ich das meiste von dem, was Sie wissen müssen, um die Windows API in Go zu verwenden, die Sie nicht aus dem Lesen der syscall
docs sammeln können, werde ich auch sagen (und das ist für die obige Frage irrelevant) Wenn eine Funktion sowohl ANSI- als auch Unicode-Versionen hat, sollten Sie die Unicode-Versionen ( W
suffix) und die UTF-16-Konvertierungsfunktionen im Paket syscall
für die besten Ergebnisse verwenden.
Ich denke, das ist alles, was Sie (oder irgendjemanden) benötigen, um die Windows-API in Go-Programmen zu verwenden.
Tags und Links winapi go idle-timer