PDA

View Full Version : سوال: چگونگي به نمايش درآوردن يك آيكون و يا رشته از Shell32 توسط Index آن



ROSTAM2
شنبه 20 خرداد 1391, 22:14 عصر
چگونه اين امكان وجود داره تا با توابع API و يا Net. بتوان توسط شماره Index يك متن را از String Table و يا يك Icon از فايل سيستمي Shell32.dll رو فراخواني كرد

ROSTAM2
یک شنبه 21 خرداد 1391, 02:55 صبح
توسط دو تابع API زير اين كار عملي است ولي آنها بصورت تصوير به يك PictureBox ارائه داده مي شن حالا چطور تصوير picturebox رو به Icon تبديل كنم بصورتي كه بتونم به آيكون فرم رو با اون تغيير بدم

توابع API براي اين كار بهمراه ثابت هاي مورد نياز :


Const LARGE_ICON As Integer = 32
Const SMALL_ICON As Integer = 16
Const DI_NORMAL = 3
Private Declare Function DrawIconEx Lib "user32" _
(ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, _
ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, _
ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, _
ByVal diFlags As Long) As Long

Private Declare Function ExtractIconEx Lib "shell32.dll" _
Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, _
phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long


براي دانلود سورس كد مي تونيد به اين آدرس مراجعه كنيد: (اگه بمونه) :لبخند:

http://www.thescarms.com/VBasic/extracticons.aspx

ROSTAM2
شنبه 03 تیر 1391, 10:48 صبح
بالاخره يافتم : اينكه چطور مي شه از يه فايل dll يه رشته در آورد و وارد برنامه كرد مثل shell32.dll


' +++++++++++++ Declaration:
Imports System.ComponentModel


' +++++++++++ Class Code:

Public NotInheritable Class SystemStrings
Private Declare Auto Function LoadLibrary Lib "kernel32.dll" ( _
ByVal lpLibFileName As String _
) As IntPtr

Private Declare Function FreeLibrary Lib "kernel32.dll" ( _
ByVal hLibModule As IntPtr _
) As Boolean

Private Declare Auto Function LoadString Lib "user32.dll" ( _
ByVal hInstance As IntPtr, _
ByVal uID As Int32, _
ByVal lpBuffer As String, _
ByVal nBufferMax As Int32 _
) As Int32


Private Shared m_hUser32 As IntPtr

Private Sub New()
'
End Sub

Shared Sub New()
m_hUser32 = LoadLibrary("SHELL32.dll")
If m_hUser32.Equals(IntPtr.Zero) Then
Throw New Win32Exception
End If
End Sub

Shared Function LoadStringX(ByVal Id As Long) As String
Dim Buffer As String = Space(255)
Dim n As Int32 = LoadString(m_hUser32, Id, Buffer, Buffer.Length)
'If n = 0 Then
' Throw New Win32Exception
'End If
Return Strings.Left(Buffer, n)
End Function

Private Shared Finalizer As New SharedFinalizer

Private Class SharedFinalizer
Protected Overrides Sub Finalize()
MyBase.Finalize()
If Not m_hUser32.Equals(IntPtr.Zero) Then
If Not FreeLibrary(m_hUser32) Then
Throw New Win32Exception
End If
End If
End Sub
End Class
End Class

' Usage:

Label1.Text = SystemStrings.LoadStringX(NumericUpDown1.Value) ' 30464 // 30476

ROSTAM2
چهارشنبه 07 تیر 1391, 06:00 صبح
اين هم يه Example براي چاشني و جذابيت تاپيك مي تونيد دانلود كنيد و لذت ببريد انتقاد هم پذيرفته مي شه

لينك دانلود: http://www.8pic.ir/images/yqprwngmcub5b3jqio.zip