- Offizieller Beitrag
Mit den folgenden Funktionen kann ich das Window Handle auslesen:
Code
import strutils
# FindWindow by CLASSNAME and TITLE
proc FindWindow*(lpClass: cstring, lpName: cstring): cint {.cdecl, varargs, importc: "FindWindowA", dynlib: "User32.dll".}
# FindWindow by CLASSNAME
proc FindWindow*(lpClass: cstring, lpName: cint = 0): cint {.cdecl, varargs, importc: "FindWindowA", dynlib: "User32.dll".}
# FindWindow On Top (ACTIVE Window)
proc FindWindow*(lpClass: cint = 0, lpName: cint = 0): cint {.cdecl, varargs, importc: "FindWindowA", dynlib: "User32.dll".}
# Bsp:
# let hWnd = FindWindow() # ACTIVE Wnd
# let hWnd = FindWindow("SciTEWindow", r"C:\CODE\AutoIt\errorTest.au3 - SciTE [9 of 16]")
let hWnd = FindWindow("SciTEWindow")
echo toHex(hWnd)
Alles anzeigen
Nun wollte ich versuchen den Titel auszulesen:
Code
proc GetWindowText*(hWnd: cint, lpString: cstring, nMaxCount: int32): int32 {.cdecl, varargs, importc: "GetWindowTextA", dynlib: "User32.dll".}
Wenn ich die Funktion mit Dll-Aufruf in AutoIt oder Lua ausführe übergebe ich als Buffer (lpString) einfach einen String. Das klappt dort - aber nicht in Nim, der String wird nicht befüllt. Wenn ich statt cstring einen ptr cstring oder ptr string verwende, bleibt der Inhalt nil.
Wie muss ich hier vorgehen?