PDA

View Full Version : روی تکمه کلیک کنید تا برنامه اجرا بشه ! چطوری ؟



rouzbeh
شنبه 18 بهمن 1382, 13:28 عصر
سلام به همه دوستان

من یه سوالی داشتم . ببخشید چطوری میشه تو vb یه تکمه که ایجاد میکیم وقتی کاربر روی تکمه کلیک کرد مثلا در فلان درایو برنامه نصب مثلا yahoo رو اجرا کنه ؟

متشکرم اگر کمکم کنید.

(سیدشریفی)
شنبه 18 بهمن 1382, 15:52 عصر
با استفاده از دستور Shell


Dim RetVal
RetVal = Shell("C:\WINDOWS\CALC.EXE", 1) ' Run Calculator.



:lol: :lol: :lol:

rouzbeh
شنبه 18 بهمن 1382, 16:03 عصر
سلام اقای سید شریفی
خیلی ممنون . ولی

("C:\WINDOWS\CALC.EXE", 1)
این 1 برای چیه ؟ راستی این کد رو باید در کد اون تکمه بنویسم دیگه درسته؟

rouzbeh
شنبه 18 بهمن 1382, 16:03 عصر
سلام اقای سید شریفی
خیلی ممنون . ولی

("C:\WINDOWS\CALC.EXE", 1)
این 1 برای چیه ؟ راستی این کد رو باید در کد اون تکمه بنویسم دیگه درسته؟

M-Gheibi
شنبه 18 بهمن 1382, 16:20 عصر
کاملا درسته این کد را باید برای دکمه مروبطه بنویسید.
اون عدد 1 هم نحوه برخورد با برنامه مورد نظر را نشان میدهد.


Const vbHide = 0
Const vbNormalFocus = 1
Const vbMinimizedFocus = 2
Const vbMaximizedFocus = 3
Const vbNormalNoFocus = 4
Const vbMinimizedNoFocus = 6
:wink:

rouzbeh
شنبه 18 بهمن 1382, 16:26 عصر
به به کار کرد . واقعا تشکر از همه شما دوستان خوبم. مرسی :) :موافق:

rouzbeh
چهارشنبه 29 بهمن 1382, 21:18 عصر
سلام اقای مسعود

اقا مسعود من این کد را می نویسم ولی خطا میده که مسیر پیدا نشد ؟!


<span dir=ltr>Dim RetVal
RetVal = Shell("\3.htm", 1)</span>

Vahab
چهارشنبه 29 بهمن 1382, 21:49 عصر
aaa

Vahab
چهارشنبه 29 بهمن 1382, 21:50 عصر
با سلام

شما با دستور Shell فقط میتوانید فایلهای exe را اجرا کنید



http://smilies.sofrayt.com/^/9971/hit.gif

rouzbeh
پنج شنبه 30 بهمن 1382, 09:30 صبح
دوست گرامی vahab عزیز من یه فایل exe رو هم دادم نشد .

راستی پس با چه دستوری فایل بالایی رو باز کنم ؟

:متفکر:

HoneySaberi
پنج شنبه 30 بهمن 1382, 10:55 صبح
دوست عزیزم سلام.
فکرمیکنم ShellExecute که یک API به غول معروف راست کارت باشه. راستش وقت ندارم توضیخاتشو برات ترجمه کنم :roll: شرمنده.
پس اصل مطب که از برنام; بسیار بدردبخور API-Guide گرفتم برات میزارم.

The ShellExecute function opens or prints a specified file. The file can be an executable file or a document file.

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

· hwnd
Specifies a parent window. This window receives any message boxes that an application produces. For example, an application may report an error by producing a message box.

· lpOperation
Pointer to a null-terminated string that specifies the operation to perform. The following operation strings are valid:
“open”
The function opens the file specified by lpFile. The file can be an executable file or a document file. The file can be a folder to open.
“print”
The function prints the file specified by lpFile. The file should be a document file. If the file is an executable file, the function opens the file, as if “open” had been specified.
“explore”
The function explores the folder specified by lpFile.

The lpOperation parameter can be NULL. In that case, the function opens the file specified by lpFile.

· lpFile
Pointer to a null-terminated string that specifies the file to open or print or the folder to open or explore. The function can open an executable file or a document file. The function can print a document file.

· lpParameters
If lpFile specifies an executable file, lpParameters is a pointer to a null-terminated string that specifies parameters to be passed to the application.
If lpFile specifies a document file, lpParameters should be NULL.

· lpDirectory
Pointer to a null-terminated string that specifies the default directory.

· nShowCmd
If lpFile specifies an executable file, nShowCmd specifies how the application is to be shown when it is opened. This parameter can be one of the following values:
SW_HIDE
Hides the window and activates another window.
SW_MAXIMIZE
Maximizes the specified window.
SW_MINIMIZE
Minimizes the specified window and activates the next top-level window in the Z order.
SW_RESTORE
Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when restoring a minimized window.
SW_SHOW
Activates the window and displays it in its current size and position.
SW_SHOWDEFAULT
Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window.
SW_SHOWMAXIMIZED
Activates the window and displays it as a maximized window.
SW_SHOWMINIMIZED
Activates the window and displays it as a minimized window.
SW_SHOWMINNOACTIVE
Displays the window as a minimized window. The active window remains active.
SW_SHOWNA
Displays the window in its current state. The active window remains active.
SW_SHOWNOACTIVATE
Displays a window in its most recent size and position. The active window remains active.
SW_SHOWNORMAL
Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when displaying the window for the first time.

If lpFile specifies a document file, nShowCmd should be zero.

اینم یه مثال که میتونی تو Click یک دکمه بزاری:
ShellExecute Me.hwnd, vbNullString, "c:\Program Files", vbNullString, "C:\", SW_SHOWNORMAL
این مثال پنجرۀ Program Files باز میکنه.
-------------------------------
امیدوارم مفید بوده باشه :wink:
کوچیکت حمید.

Vahab
پنج شنبه 30 بهمن 1382, 11:21 صبح
سلام اقای مسعود

اقا مسعود من این کد را می نویسم ولی خطا میده که مسیر پیدا نشد ؟!


<span dir=ltr>Dim RetVal
RetVal = Shell("\3.htm", 1)</span>



مسیر رو درست وارد کردید؟


اگه فایل در شاخه برنامه است شما بک اسلش را باید بردارید

به این صورت
Shell&#40;"3.exe",1&#41;

در ضمن اگه برنامه جدیدی ایجاد کردید و هنوز اونو Save نکردید فایل شما باید در شاخه نصب VB باشد

rouzbeh
پنج شنبه 30 بهمن 1382, 16:06 عصر
Shell("3.exe",1)

دوست گرامی نه فایل exe در همون فلدر پروژه vb است . در فلدر دیگری به نام file\program که مگر این طور نبایستی بنویسم :


Dim RetVal
= Shell("\file\program\*.exe", 1)
در ضمن :
:) متشکرم از شما هم اقای حمید صابری عزیز خودم ترجمش میکنم : فکر کنم مفید باشه :

راستی vahab عزیز شما به نظرتان مطالب ارایه شده دوست گرامیمان خوب است :؟ :)

M-Gheibi
پنج شنبه 30 بهمن 1382, 21:58 عصر
آقا روزبه ببخشید که دیر جواب دادم.
برای استفاده از دستور شل و باز کردن یک فایل اجرایی موجود در پوشه برنامه خود از کد نمونه زیر استفاده کنید:


Shell App.Path & "/Yourapp.exe", VbAppWinStyle

که در کد بالا منظور از VbAppWinStyle همان کدهایی هست که در چند پست بالاتر معرفی کردم.
منظور از Yourapp.exe همان فایل اجرایی مورد نظر است.
کد App.Path برای بدست آوردن مسیر برنامه خود شما هست که در انتهای آن / وجود ندارد که به همین علت قبل از نام برنامه مورد نظر شما علامت / آمده است تا نام برنامه از مسیر آن جدا شود.

اگه مشکلی بود در خدمتم.

Vahab
پنج شنبه 30 بهمن 1382, 22:26 عصر
آقا روزبه ببخشید که دیر جواب دادم.
برای استفاده از دستور شل و باز کردن یک فایل اجرایی موجود در پوشه برنامه خود از کد نمونه زیر استفاده کنید:


Shell App.Path & "/Yourapp.exe", VbAppWinStyle

که در کد بالا منظور از VbAppWinStyle همان کدهایی هست که در چند پست بالاتر معرفی کردم.
منظور از Yourapp.exe همان فایل اجرایی مورد نظر است.
کد App.Path برای بدست آوردن مسیر برنامه خود شما هست که در انتهای آن / وجود ندارد که به همین علت قبل از نام برنامه مورد نظر شما علامت / آمده است تا نام برنامه از مسیر آن جدا شود.

اگه مشکلی بود در خدمتم.


منم موافقم


ممنون از راهنماییتون

M-Gheibi
پنج شنبه 30 بهمن 1382, 22:31 عصر
اگر هم تمایل به استفاده از api دارید و یا نیاز به باز کردن فایلهای غیر از exe دارید میتوانید از api یی که دوست عزیز در بالا گفتند استفاده کنید که مثال پست قبلی من بر اساس این api به شکل زیر است:


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" &#40;ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long&#41; As Long
Const SW_SHOWNORMAL = 1
Private Sub Form_Load&#40;&#41;
ShellExecute Me.hwnd, vbNullString, App.Path & "/Yourapp", vbNullString, "C&#58;\", SW_SHOWNORMAL
End Sub


**** : به جای yourapp.exe فایلهای غیر اط اجرایی نیز قابل استفده است.

M-Gheibi
پنج شنبه 30 بهمن 1382, 22:41 عصر
اگر هم نوشته هایی که به زبان انگلیسی تسط جناب صابری معرفی شد برایتان واضح نیست میتوانید به آدرس زیر رفته و همه نوسته ها ر بطور تفکیک شده مشاهده کنید:
http://www.mentalis.org/apilist/ShellExecute.shtml

M-Gheibi
پنج شنبه 30 بهمن 1382, 22:46 عصر
کد زیر هم نمونه ای کامل و خوبی از سایت vbaccelerator هست.
کد زیر را در قسمت کد فرم خود وارد کنید:


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
&#40;ByVal hWnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long&#41; As Long

Private Declare Function ShellExecuteForExplore Lib "shell32.dll" Alias "ShellExecuteA" _
&#40;ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, lpParameters As Any, _
lpDirectory As Any, ByVal nShowCmd As Long&#41; As Long

Public Enum EShellShowConstants
essSW_HIDE = 0
essSW_MAXIMIZE = 3
essSW_MINIMIZE = 6
essSW_SHOWMAXIMIZED = 3
essSW_SHOWMINIMIZED = 2
essSW_SHOWNORMAL = 1
essSW_SHOWNOACTIVATE = 4
essSW_SHOWNA = 8
essSW_SHOWMINNOACTIVE = 7
essSW_SHOWDEFAULT = 10
essSW_RESTORE = 9
essSW_SHOW = 5
End Enum

Private Const ERROR_FILE_NOT_FOUND = 2&amp;
Private Const ERROR_PATH_NOT_FOUND = 3&amp;
Private Const ERROR_BAD_FORMAT = 11&amp;
Private Const SE_ERR_ACCESSDENIED = 5 ' access denied
Private Const SE_ERR_ASSOCINCOMPLETE = 27
Private Const SE_ERR_DDEBUSY = 30
Private Const SE_ERR_DDEFAIL = 29
Private Const SE_ERR_DDETIMEOUT = 28
Private Const SE_ERR_DLLNOTFOUND = 32
Private Const SE_ERR_FNF = 2 ' file not found
Private Const SE_ERR_NOASSOC = 31
Private Const SE_ERR_PNF = 3 ' path not found
Private Const SE_ERR_OOM = 8 ' out of memory
Private Const SE_ERR_SHARE = 26


Public Function ShellEx&#40; _
ByVal sFIle As String, _
Optional ByVal eShowCmd As EShellShowConstants = essSW_SHOWDEFAULT, _
Optional ByVal sParameters As String = "", _
Optional ByVal sDefaultDir As String = "", _
Optional sOperation As String = "open", _
Optional Owner As Long = 0 _
&#41; As Boolean
Dim lR As Long
Dim lErr As Long, sErr As Long
If &#40;InStr&#40;UCase$&#40;sFIle&#41;, ".EXE"&#41; &lt;> 0&#41; Then
eShowCmd = 0
End If
On Error Resume Next
If &#40;sParameters = ""&#41; And &#40;sDefaultDir = ""&#41; Then
lR = ShellExecuteForExplore&#40;Owner, sOperation, sFIle, 0, 0, essSW_SHOWNORMAL&#41;
Else
lR = ShellExecute&#40;Owner, sOperation, sFIle, sParameters, sDefaultDir, eShowCmd&#41;
End If
If &#40;lR &lt; 0&#41; Or &#40;lR > 32&#41; Then
ShellEx = True
Else
' raise an appropriate error&#58;
lErr = vbObjectError + 1048 + lR
Select Case lR
Case 0
lErr = 7&#58; sErr = "Out of memory"
Case ERROR_FILE_NOT_FOUND
lErr = 53&#58; sErr = "File not found"
Case ERROR_PATH_NOT_FOUND
lErr = 76&#58; sErr = "Path not found"
Case ERROR_BAD_FORMAT
sErr = "The executable file is invalid or corrupt"
Case SE_ERR_ACCESSDENIED
lErr = 75&#58; sErr = "Path/file access error"
Case SE_ERR_ASSOCINCOMPLETE
sErr = "This file type does not have a valid file association."
Case SE_ERR_DDEBUSY
lErr = 285&#58; sErr = "The file could not be opened because the target application is busy. Please try again in a moment."
Case SE_ERR_DDEFAIL
lErr = 285&#58; sErr = "The file could not be opened because the DDE transaction failed. Please try again in a moment."
Case SE_ERR_DDETIMEOUT
lErr = 286&#58; sErr = "The file could not be opened due to time out. Please try again in a moment."
Case SE_ERR_DLLNOTFOUND
lErr = 48&#58; sErr = "The specified dynamic-link library was not found."
Case SE_ERR_FNF
lErr = 53&#58; sErr = "File not found"
Case SE_ERR_NOASSOC
sErr = "No application is associated with this file type."
Case SE_ERR_OOM
lErr = 7&#58; sErr = "Out of memory"
Case SE_ERR_PNF
lErr = 76&#58; sErr = "Path not found"
Case SE_ERR_SHARE
lErr = 75&#58; sErr = "A sharing violation occurred."
Case Else
sErr = "An error occurred occurred whilst trying to open or print the selected file."
End Select

Err.Raise lErr, , App.EXEName &amp; ".GShell", sErr
ShellEx = False
End If

End Function

برای استفاده از این کد در قسمت کد فرم برای نمونه کد زیر را وارد کنید:


Private Sub Command1_Click&#40;&#41;
ShellEx App.Path &amp; "/test.htm", essSW_SHOWNORMAL
End Sub

این کد فایل test.htm موجود در پوشه برنامه شما را باز میکند.

فکر کنم هرچه نیاز بوده را گفته باشم ولی اگه چیزی از قلم افتاده حتما بگید اگه بلد بودم جواب میدم. :wink:

Vahab
جمعه 01 اسفند 1382, 11:37 صبح
ممنون

HoneySaberi
جمعه 01 اسفند 1382, 12:38 عصر
دوستان سلام.
اولا شرمنده از اینکه اون متن اونطور بهم ریخته بود :oops:
ببخشید دیگه من هنوز راه نیوفتادم.

فکر میکنم اکثرا با [url]www.allapi.net و API-Guide آشنا باشند. ولی فکر میکنم ارزش داشته باشه که اونارو به همه معرفی کرد.
شما که با سابقه تر هستید اگه صلاح میدونید اونارو به همه معرفی کنید.

ببخشید که فضولی کردم.
ممنونم.
ک.چیک همه حمید.

M-Gheibi
جمعه 01 اسفند 1382, 12:53 عصر
اولا خواهش میکنم.
دوما جناب صابری همونطور که شما گفتید این برنامه و سایت مربوط به آن بسیار مفید هستند و به همین علت در پست های قبلی موجود در سایت معرفی شده اند.

در ضمن اگر برنامه و یا سایت جالب و مفیدی در تمامی موارد VB به نظرتون اومد حتما در این فروم بنویسید.
ممنون از توجهتون

rouzbeh
جمعه 01 اسفند 1382, 18:12 عصر
متشکرم . دوست گرامی مسعود عزیز و vahab

سعید قدیری مقدم
سه شنبه 05 اسفند 1382, 21:47 عصر
سلام به همه برو بچه ها این مدتی که نبودم چه خبره واقعا دمتون گرم :flower:
روزبه جان اگه شما بخوای یک فایل رو که exe نیست اجرا کنی مثلا htm رو که خودت مثال زده بودی می تونی این کار رو به عهده ویندوز یزاری واست انجام بده . تو ویندوز تو شاخه coomand یک فایل اجرایی هست به اسم start.exe که شما هر فایلی رو که از نوع اجرایی نیست با اون صدا بزنی ویندز خودش میگرده و با راه اندازی که داره اونو اجرا میکنه . مثلا اگه یک htm باشه اون رو با اینترنت ایکسپلورر اجراش میکنه.




shell "start c&#58;\yahoo.htm",1


دستور shell میره فایل شما رو با کمک فایل start اجراش میکنه
البته نمیدونم چرا رو بعضی از نسخه های ویندز این فایل start.exe وجود نداره اگه رو سیستم شما هم نبود بگو تا من اونو برای دانلود اینجا بزارم

M-Gheibi
سه شنبه 05 اسفند 1382, 22:33 عصر
جناب قدیری مقدم ازتون ممنونم. استفاده کردیم.

rouzbeh
چهارشنبه 06 اسفند 1382, 08:55 صبح
متشکرم جناب اقای قدیری . ممنون
راستی اقای قدیری من یه سئوال داشتم و تا حالا از هر دوستانی که پرسیدم گفتن می پرسم میگم . شما می توانید به من کمک کنین؟ :)

سعید قدیری مقدم
چهارشنبه 06 اسفند 1382, 10:12 صبح
اگه بتونم حتما کمک می کنم
سوالتون چی هست؟

M-Gheibi
چهارشنبه 06 اسفند 1382, 22:30 عصر
من یه سئوال داشتم و تا حالا از هر دوستانی که پرسیدم گفتن می پرسم میگم
البته با اجازه آقای قدیری مقدم آقا روزبه این سوالتون چیه که همه میکن میرن میپرسند؟ :wink:

rouzbeh
پنج شنبه 07 اسفند 1382, 09:35 صبح
بله یه دقیقه :
من یه برنامه نوشتم البته برای پروژه دانشگاهم است توو یه قسمتیش موندم .
من تو برنامه یه web browser تعریف کردم بعد استادم گفته که باید کاربر بتونه به طور مثال اگه webbrowser به سایت یاهو لینک داده شده . بتونه اگه یه text مهمی بود اونو تو بانک اطلاعاتی ذخیره کنه مانند ارشیو که بعدا باز بتونه از ارشیو بخونه
حالا من اینجاش موندم که اخه چه جوری تو بانک اطلاعاتی نوشته های داخل web browser رو با یه نام ذخیره کنم که بعدا باز بتونم بازش کنم؟

شما می تونید کمکم کنید.
حتی استاد گفتن می تونی اصلا خود اون webbrowser رو تو بانک ذخیره کنی .!

سعید قدیری مقدم
پنج شنبه 07 اسفند 1382, 10:06 صبح
برای ذخیره متن های داخل یک صفحه سایت کار آسون هست و شما براحتی میتونی این کار رو بکنی اما اینکه یک صفحه رو با تمام متعلقاتش ذخیره کنی من روش کار نکردم و نمیدونم.

شما به کمک Microsoft Internet Transfer Control 6 میتونی یک برنامه ساده بنویسی که اگه یک URL بهش دادی Source اون صفحه رو که بصورت متنی هست برات بیاره. خوب در این صورت شما فقط یک سری اطلاعات متنی داری که ذخیره اون تو پایگاه داده کار ساده ای است

برای مثال شما روی form برنامت یک کنترل Inet و یک کنترل RichTextBox بزار با یک Command اون وقت دستور زیر رو تو Command بنویس


RichTextBox1.text=inet1.openurl&#40;"http&#58;//www.yahoo.com",icstring&#41;

حالا وقتی شما رو دکمه کلیک کنی بعد از چند ثانیه source صفحه یاهو میره تو RichTextBox که بصورت متنی هست
البته من تو مثال بالا از openurl استفاده کردم که زیاد جالب نیست چون تو حالت آسنکرون از اینترنت داده ها رو میگیره اگه شما بخوای برنامت انعطاف پذیر تر بشه از getchunk استفاده کن البته یک خورده به کد نویسی احتیاج داره

اما اگه لازم بود کد اون رو مینویسم
امیدوارم تونسته باشم مشکلتو حل کنم

rouzbeh
پنج شنبه 07 اسفند 1382, 10:18 صبح
اقای قدیری متشکرم انگار همونه که میخواستم . ولی ببخشید میشه یه نمونه از اونو برام بزارین.
میدونین اخه من می خوام که به صورت عملی نیز نتیجه کار رو ببینم .
حالا پس با این برنامه میشه که از RichTextBox کاربر متن مورد نظرش را پیدا کنه اخه با source کدهای اضافی وب مشکل ساز نخواهد بود؟
نمی دونم ! :(

سعید قدیری مقدم
پنج شنبه 07 اسفند 1382, 11:36 صبح
خوب شما وقتی source یک صفحه رو بصورت متن داری خیلی کارا می تونی باهاش بکنی مثلا اگه فقط متن های داخل صفحه رو می خوای می تونی یک function بنویسی که تمام کد های بین &lt;> رو حذف کنه این جوری فقط متن برات باقی میمونه و کد های html حذف میشن
من یک function آماده میکنم و میزارم تا دانلود کنید و کارشو ببینید

rouzbeh
پنج شنبه 07 اسفند 1382, 12:04 عصر
خیلی از شما ممنونم . مرسی

سعید قدیری مقدم
پنج شنبه 07 اسفند 1382, 12:27 عصر
وظیفه هست عزیز :)

تو این برنامه شما آدرس سایتی رو که می خوایی تو text1 می نویسی بعد دکمه Go رو می زنی بعد از چند ثانیه surce آدرس مورد نظر شما میره تو RichTextBox1 بعد شما رو دکمه Only Text میزنی اینجوری متن داخل RichTextBox1 وارد فانکشن onlytext میشه و داخل RichTextBox2 متن بدون کد های html نوشته میشه

البته فانکش onlytext فقط عبارات بین &lt;> رو حذف میکنه . شما می تونی با تغییر جز عی تو این فانکشن کاری کنی که عبارات بین {} که معمولا اسکریژت ها هستن رو حذف کنی و یا خطوط خالی رو حذف کنی

البته این کدی که نوشتم یک چیز حرفه ای نیست اما با تغییر روی اون میتونی تکمیلش کنی
اگه قسمتی از کد نامفهوم بود رو بگو تا توضیح بدم

rouzbeh
پنج شنبه 07 اسفند 1382, 12:33 عصر
متشکرم .