Получить заголовок активного окна

Я объявил следующие вызовы WinAPI

<DllImport("USER32.DLL", EntryPoint:="GetActiveWindow", SetLastError:=True,
    CharSet:=CharSet.Unicode, ExactSpelling:=True,
    CallingConvention:=CallingConvention.StdCall)>
Public Shared Function GetActiveWindowHandle() As System.IntPtr
End Function

<DllImport("USER32.DLL", EntryPoint:="GetWindowText", SetLastError:=True,
    CharSet:=CharSet.Unicode, ExactSpelling:=True,
    CallingConvention:=CallingConvention.StdCall)>
Public Shared Function GetActiveWindowText(ByVal hWnd As System.IntPtr, _
                                            ByVal lpString As System.Text.StringBuilder, _
                                            ByVal cch As Integer) As Integer
End Function

Затем я вызываю эту подпрограмму, чтобы получить текст в строке заголовка активного окна.

Public Sub Test()
    Dim caption As New System.Text.StringBuilder(256)
    Dim hWnd As IntPtr = GetActiveWindowHandle()
    GetActiveWindowText(hWnd, caption, caption.Capacity)
    MsgBox(caption.ToString)
End Sub

Наконец, я получаю следующую ошибку

Не удалось найти точку входа с именем 'GetWindowText' в DLL 'USER32.DLL'

Как я могу исправить эту проблему?

1 ответ

Решение
<DllImport("USER32.DLL", EntryPoint:="GetWindowText", SetLastError:=True,
    CharSet:=CharSet.Unicode, ExactSpelling:=True,

Вы настаивали на ExactSpelling. В чем проблема, есть две версии GetWindowText, экспортированные user32.dll. GetWindowTextA и GetWindowTextW. В версии A используется строка ANSI, устаревший формат строки с 8-разрядными символами, закодированными в кодовой странице по умолчанию, которая в последний раз использовалась в Windows ME. Версия W использует строку Unicode, закодированную в utf-16, собственный тип строки Windows. Маршаллер pinvoke попробует любой из них, основываясь на CharSet, но вы остановили его, используя ExactSpelling:= True. Поэтому он не может найти GetWindowText, он не существует.

Либо используйте EntryPoint:= "GetWindowTextW", либо удалите ExactSpelling.

Другие вопросы по тегам