Я пытаюсь загрузить значок приложений '(ы) с помощью функции LoadImage
WinAPI, но по какой-то причине он всегда возвращает 0.Попытка загрузить отображается иконка приложения (ы) с помощью LoadImage, но функция возвращает 0
Я прочитал documentation, но я не могу понять, что я сделал неправильно. Я не получаю исключений, кроме тех случаев, когда вы пытаетесь преобразовать IconPtr
в Icon
(что составляет IconPtr
= 0).
Public Shared Function ExtractAssociatedIconArray(ByVal File As String, ByVal Sizes() As Size) As Icon()
Dim ReturnArray(Sizes.Length) As Icon
Dim Index As Integer = 0
For Each s As Size In Sizes
'IconPtr is always zero for some reason.
Dim IconPtr As IntPtr = NativeMethods.LoadImage(Nothing, File, NativeMethods.Enumrations.IMAGE_ICON, s.Width, s.Height, NativeMethods.Enumrations.LR_DEFAULTCOLOR Or NativeMethods.Enumrations.LR_LOADFROMFILE)
ReturnArray(Index) = Icon.FromHandle(IconPtr)
Index += 1
Next
Return ReturnArray
End Function
NativeMethods
класса: пример
Public Class NativeMethods
<DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function LoadImage(ByVal hInst As IntPtr, _
ByVal lpszName As String,
ByVal uType As UInt32, _
ByVal cxDesired As Integer, _
ByVal cyDesired As Integer, _
ByVal fuLoad As UInt32) As IntPtr
End Function
Public Enum Enumrations As UInteger
'' LoadImage ''
IMAGE_BITMAP = 0
IMAGE_ICON = 1
IMAGE_CURSOR = 2
LR_CREATEDIBSECTION = &H2000
LR_DEFAULTCOLOR = &H0
LR_DEFAULTSIZE = &H40
LR_LOADFROMFILE = &H10
LR_LOADMAP3DCOLORS = &H1000
LR_LOADTRANSPARENT = &H20
LR_MONOCHROME = &H1
LR_SHARED = &H8000
LR_VGACOLOR = &H80
End Enum
End Class
Использования:
Dim Icons() As Icon = ExtractAssociatedIconArray("C:\MyApp.exe", New Size() {New Size() {48, 48}})
Фро m документация (даже от имени метода), кажется, что возвращенный дескриптор связан с изображением, а не с значком.Вы пытались преобразовать вывод в изображение/растровое изображение (и эту переменную в значок)? – varocarbas
EXE-файл обычно содержит несколько значков. Обратите внимание, как вы никогда не указали, какой из них вы хотите. И это не так просто узнать, идентификаторы ресурса значков произвольны. Таким образом, вы просто используете неправильную функцию winapi для выполнения этой работы. Вместо этого используйте Icon.ExtractAssociatedIcon(). –
@varocarbas: Это не имеет значения, так как функция возвращает 0 в любом случае. –