PDA

View Full Version : قرار دادن برنامه به صورت پیش فرض



Restlesa
جمعه 29 بهمن 1389, 18:17 عصر
سلام بر اساتید محترم
من دارم یه برنامه ی Notepad می نویسم و می خوام وقتی برنامه ام بر روی سیستم کاربرم اجرا شد،برنامه ام به جای برنامه ی Notepad ویندوز قرار بگیره.یعنی وقتی کاربر بر روی یک فایل txt کلیک کرد برنامه ی من باز بشه نه برنامه ی Notepad ویندوز.
لطفا راهنماییم کنید

محسن واژدی
جمعه 29 بهمن 1389, 19:02 عصر
سلام
----------
اگه یه جستجو در تالای وی بی میزدین حتما به نتایج مفیدی میرسیدین
----------
اینکه میگین میخواین سندهای متنی در برنامه شما جای notepad معمولی ویندوز باز بشه باید تغییراتی در ریجستری برای همه فایل هایی که با notepad ویندوز باز میشن (مخصوصا فایل های txt) انجام بدین و مسیر پیش فرض رو به مسیر برنامه تون تعییر بدین
خب بنده یکی از کلیدها که مربوط به textهای معمولی هست را در اینجا واستون میزارم واسه بقیه فایل ها هم به همین روش عمل کنین:
به کلید زیر رفته و مسیر notepad موجود در اونو به مسیر برنامه تون تغییر بدین:
"HKEY_CLASSES_ROOT\txtfile\shell\open\command"

بعد از اینکه فایل های text به برنامه تون متصل شدند؛ بعد از اینکه برنامه تون با کلیک بر روی فایلهای text بالا آمد، مسیر فایل های text در تابع Command ذخیره شده است که میتوانید آنرا دریافت و عملی که احیانا" نمایش محتوی فایل متنی در برنامه تون است را اجرا کنید

موفق باشید

محسن شامحمدی
جمعه 29 بهمن 1389, 19:31 عصر
من دارم یه برنامه ی Notepad می نویسم و می خوام وقتی برنامه ام بر روی سیستم کاربرم اجرا شد،برنامه ام به جای برنامه ی Notepad ویندوز قرار بگیره.یعنی وقتی کاربر بر روی یک فایل txt کلیک کرد برنامه ی من باز بشه نه برنامه ی Notepad ویندوز.


این که کاری نداره
شما برنامه تون رو بنویسید و با برنامه notepad.exe که در پوشه ویندوز می باشد جایگزین کنید.
که البته به این نکته هنگام نوشتن برنامه دقت کنید:

مسیر فایل های text در تابع Command ذخیره شده است که میتوانید آنرا دریافت و عملی که احیانا" نمایش محتوی فایل متنی در برنامه تون است را اجرا کنید

محسن واژدی
جمعه 29 بهمن 1389, 19:54 عصر
این که کاری نداره
شما برنامه تون رو بنویسید و با برنامه notepad.exe که در پوشه ویندوز می باشد جایگزین کنید.


این کار یک روش غیر استاندارده، کافیه همانند سایر برنامه ها مسیر ریجستری رو به برنامه تون تغییر بدین تا مشکل برطرف بشه
البته چون ممکنه ندونین کدوم فایل ها تحت notepad باز میشن بنده هم همون روش جناب 09111111111 (http://barnamenevis.org/member.php?59254-09111111111) رو واستون پیشنهاد میکنم چون دیگه هر فایلی که با notepad باز میشده به همون مسیر مراجعه میکنه که بجاش برنامه شما اجرا میشه و اون توضیح اول که گفتم "بهتره از طریق ریجستری عمل کنین" برای زمانی مفیده که تنها بخواین یک فرمت را تابع برنامه تون کنین نه یک دسته زیادی فایل رو

موفق باشید

returnx
جمعه 29 بهمن 1389, 20:53 عصر
البته روش اصلی این کار این شکلیه:
یک پروژه جدید باز کنید و توش یک شئ 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 If
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) همیشه باید در کنار فایل اجرایی برنامتون باشه، در غیر اینصورت شکل فایلهای تصویری که قراره با برنامه شما باز بشن به شکل فایلهای ناشناخته در میاد.
نکته : برنامه حداقل باید یک بار اجرا بشه تا تاثیراتش رو روی ویندوز و فایل های تصویری بذاره.
بعد از یک بار اجرا کردن و بستن برنامه، برید روی یکی از عکسهاتون دابل کلیک کنید که دو حالت پیش میاد : 1- برنامه شما اجرا میشه و عکس رو نشون میده. 2- کادر محاوره ای Open with... باز میشه و از شما میخواد که برنامه مورد نظرتون رو برای نمایش عکس انتخاب کنید؛ حالا کاری که شما باید بکنید اینه که به آدرس برنامتون برید و برنامه خودتونو برای نمایش عکس انتخاب کنید تا از این به بعد همیشه عکسها با برنامه شما باز بشن.
شما میتونید اینکارو برای پسوند هر فایلی انجام بدید، مثلاً میتونید پسوند .txt رو تعریف کنید و با گذاشتن یک TextBox تو فزمتون یک برنامه Notepad بسازید. به همین سادگی. موفق باشید.
منبع:v-basic.mihanblog.com

Restlesa
شنبه 30 بهمن 1389, 16:38 عصر
کدی رو که شما در پست قبل از من برام فرستادید در برنامه ام کپی کردم و به جای کد زیر در قسمت 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 If

کد زیر رو نوشتم


RegisterFile ".TXT"
RegisterFile ".TTF"
RegisterFile ".DOC"
'
On Error Resume Next
If Len(Command()) > 0 Then
Text1.Text = FixPath(Command())
End If

از برنامه ام یک فایل exe ساختم و یک بار هم اجراش کردم اما مشکلم برطرف نشد و همون برنامه ی Notepad ویندوز اجرا شد
مشکل کار از کجاست ؟؟؟

returnx
شنبه 30 بهمن 1389, 23:34 عصر
خودم تا حالا این کد رو آزمایش نکردم اما شما فایل متنی رو اشتباه باز میکنید چون اینجوری که شما باز می کنید
فقط آدرس رو تو textbox نشون میده از این کد اسفاده کنید:

On Error Resume Next
If Len(Command()) > 0 Then


Open FixPath(Command()) For Input As #1
While EOF(1) <> True
Input #1, stri
Text1.Text = Text1.Text & stri & vbCrLf
Wend
End If
در ضمن فایل Doc رو هم نمیتونید اینجوری باز کنید باید از Microsoft Word Object Library استفاده کنید.
البته قابل به ذکر که هنوز مشکل اصلی بر طرف نشده چون اگه مشکل از این کد بود ، فایل رو با برنامه شما باز می کرد ولی Error می داد ...
روش کار میکنم بهتون خبر میدم...

Restlesa
یک شنبه 01 اسفند 1389, 14:11 عصر
دوست عزیز هنوز همون مشکل رو دارم
لطفا کمکم کنید :گریه::گریه::گریه::گریه::گریه: :گریه::گریه:

محسن واژدی
یک شنبه 01 اسفند 1389, 15:32 عصر
On Error Resume Next
If Len(Command()) > 0 The

Open FixPath(Command()) For Input As #1
While EOF(1) <> True
Input #1, stri
Text1.Text = Text1.Text & stri & vbCrLf
Wend
End If



دستور زیر هم یکباره فایل متنی را وارد میکند و هم بسیار سریعتا از حلقه هاست





If Len(Command()) > 0 The

Open FixPath(Command()) For Input As #1
Text1.Text = Input(LOF(1), 1)
Close #1
End If




موفق باشید

Restlesa
دوشنبه 02 اسفند 1389, 17:53 عصر
دوباره سلام
ولی من هنوز هم مشکلم بر طرف نشده :عصبانی::عصبانی::عصبانی::عصب نی:
راه دیگه وجود داره ؟؟؟ :ناراحت::ناراحت::ناراحت::نار حت:

Restlesa
چهارشنبه 04 اسفند 1389, 20:28 عصر
کسی از دوستان نیست مرا یاری کند ؟؟؟؟