shirin71
08-06-2011, 07:04 PM
شما ها همتون خوب میدونید که وقتی روی یک تصویر(Jpeg ، Bitmap و یا غیره) دوبار کلیک می کنید ابتدا نرم افزار Preview که مخصوص ویندوزه اجرا میشه و تصویر رو نشون میده.
- سوال این اتفاق چطور می افته ؟ اگه ما بخوایم یک نرم افزار مثل Preview ویندوز بسازیم باید چه خاکی تو سرمون بریزیم؟
امّا عجله نکنید من برای این مشکل که مبحث مهمّی هم هست یک جواب پیدا کردم پس یه خواهشی ازتون دارم اگه اگر این آموزش رو تا تهش خوندید و براتون مفید بود حتماً نظر بدید در ضمن، نپرسید که درباره خط فلان بکم توضیح بده. اخه توضیح رو میخوای چه کار کد رو بردار استفاده کن دیگه.
مواد لازم : یک فرم آماده کنید و توش یک عدد شی Image توش قرار بدید و کد زیر رو تو قسمت کد برنامتون وارد کنید:
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Private Declare Sub SHChangeNotify Lib "shell32.dll" (ByVal wEventId As Long, ByVal uFlags As Long, dwItem1 As Any, dwItem2 As Any)
Private Sub Form_Load()
Image1.Stretch = True
Image1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
'
RegisterFile ".BMP"
RegisterFile ".JPG"
RegisterFile ".GIF"
RegisterFile ".WMF"
RegisterFile ".EMF"
On Error Resume Next
If Len(Command()) > 0 Then Image1.Picture = LoadPicture(FixPath(Command()))
End Sub
Private Sub RegisterFile(strPasvand As String)
Dim sKeyName As String ' Holds Key Name in registry.
Dim sKeyValue As String ' Holds Key Value in registry.
Dim ret& ' Holds error status if any from API calls.
Dim lphKey& ' Holds key handle from RegCreateKey.
Dim path As String
path = App.path
If Right(path, 1) <> "\" Then
path = path & "\"
End If
' This creates a Root entry called "PicturePreview".
sKeyName = "PicturePreview" ' Project Name
sKeyValue = "Picture"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
' This creates a Root entry called .BMP;.JPG;.GIF;.WMF associated with "PicturePreview".
sKeyName = strPasvand
sKeyValue = "PicturePreview" ' Project Name
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
' This sets the command line for "PicturePreview".
sKeyName = "PicturePreview" ' Project Name
sKeyValue = path & App.EXEName & ".exe %1"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)
' This sets the icon for the file extension
sKeyName = "PicturePreview" ' Project Name
sKeyValue = path & "MyIcon.ico"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "DefaultIcon", REG_SZ, sKeyValue, MAX_PATH)
' This notifies the shell that the icon has changed
SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0
End Sub
Public Function FixPath(strPath As String) As String
Dim strTemp As String
strTemp = strPath
strChar = """"
If Len(strTemp) > 0 Then
If Mid(strTemp, 1, 1) = strChar Then strTemp = Right(strTemp, Len(strTemp) - 1)
If Mid(strTemp, Len(strTemp), 1) = strChar Then strTemp = Left(strTemp, Len(strTemp) - 1)
End If
FixPath = strTemp
End Function
خوب حالا از برنامتون یک فایل .exe بسازید و همچنین یک آی------ با نام MyIcon.ico کنار فایل اجرایی که ساختید قرار بدید.
توجه : همیشه یک آی------ باید با نام MyIcon.ico در کنار فایل اجرایی وجود داشته باشد در غیر اینصورت شکل فایل های تصویری (Jpeg ، Bitmap و غیره) به شکل ناشناخته در میان.
نکته: برنامه حداقل باید یک بار اجرا شود تا تاثیرات خود را روی ویندوز و فایل های تصویری بگذارد.
حالا برنامه اجرایی رو اجرا کنید و دوباره ببندید و روی یک عکس دوبار کلیک کنید و از منوی Open With… برنامه تون رو اجرا کنید و نتیجه رو در برنامه تون ببینید.
شما میتونید اینکار و برای هر برنامه ای و هر فایلی انجام بدید مثلا برنامه Notepad .
امیدوارم که به دردتون بخوره و شما هم نظر بدید.
- سوال این اتفاق چطور می افته ؟ اگه ما بخوایم یک نرم افزار مثل Preview ویندوز بسازیم باید چه خاکی تو سرمون بریزیم؟
امّا عجله نکنید من برای این مشکل که مبحث مهمّی هم هست یک جواب پیدا کردم پس یه خواهشی ازتون دارم اگه اگر این آموزش رو تا تهش خوندید و براتون مفید بود حتماً نظر بدید در ضمن، نپرسید که درباره خط فلان بکم توضیح بده. اخه توضیح رو میخوای چه کار کد رو بردار استفاده کن دیگه.
مواد لازم : یک فرم آماده کنید و توش یک عدد شی Image توش قرار بدید و کد زیر رو تو قسمت کد برنامتون وارد کنید:
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Private Declare Sub SHChangeNotify Lib "shell32.dll" (ByVal wEventId As Long, ByVal uFlags As Long, dwItem1 As Any, dwItem2 As Any)
Private Sub Form_Load()
Image1.Stretch = True
Image1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
'
RegisterFile ".BMP"
RegisterFile ".JPG"
RegisterFile ".GIF"
RegisterFile ".WMF"
RegisterFile ".EMF"
On Error Resume Next
If Len(Command()) > 0 Then Image1.Picture = LoadPicture(FixPath(Command()))
End Sub
Private Sub RegisterFile(strPasvand As String)
Dim sKeyName As String ' Holds Key Name in registry.
Dim sKeyValue As String ' Holds Key Value in registry.
Dim ret& ' Holds error status if any from API calls.
Dim lphKey& ' Holds key handle from RegCreateKey.
Dim path As String
path = App.path
If Right(path, 1) <> "\" Then
path = path & "\"
End If
' This creates a Root entry called "PicturePreview".
sKeyName = "PicturePreview" ' Project Name
sKeyValue = "Picture"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
' This creates a Root entry called .BMP;.JPG;.GIF;.WMF associated with "PicturePreview".
sKeyName = strPasvand
sKeyValue = "PicturePreview" ' Project Name
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
' This sets the command line for "PicturePreview".
sKeyName = "PicturePreview" ' Project Name
sKeyValue = path & App.EXEName & ".exe %1"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)
' This sets the icon for the file extension
sKeyName = "PicturePreview" ' Project Name
sKeyValue = path & "MyIcon.ico"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "DefaultIcon", REG_SZ, sKeyValue, MAX_PATH)
' This notifies the shell that the icon has changed
SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0
End Sub
Public Function FixPath(strPath As String) As String
Dim strTemp As String
strTemp = strPath
strChar = """"
If Len(strTemp) > 0 Then
If Mid(strTemp, 1, 1) = strChar Then strTemp = Right(strTemp, Len(strTemp) - 1)
If Mid(strTemp, Len(strTemp), 1) = strChar Then strTemp = Left(strTemp, Len(strTemp) - 1)
End If
FixPath = strTemp
End Function
خوب حالا از برنامتون یک فایل .exe بسازید و همچنین یک آی------ با نام MyIcon.ico کنار فایل اجرایی که ساختید قرار بدید.
توجه : همیشه یک آی------ باید با نام MyIcon.ico در کنار فایل اجرایی وجود داشته باشد در غیر اینصورت شکل فایل های تصویری (Jpeg ، Bitmap و غیره) به شکل ناشناخته در میان.
نکته: برنامه حداقل باید یک بار اجرا شود تا تاثیرات خود را روی ویندوز و فایل های تصویری بگذارد.
حالا برنامه اجرایی رو اجرا کنید و دوباره ببندید و روی یک عکس دوبار کلیک کنید و از منوی Open With… برنامه تون رو اجرا کنید و نتیجه رو در برنامه تون ببینید.
شما میتونید اینکار و برای هر برنامه ای و هر فایلی انجام بدید مثلا برنامه Notepad .
امیدوارم که به دردتون بخوره و شما هم نظر بدید.