دستوري در ويژوال بيسيك كه بتونه يك فايل اجرايي را اجرا كنه.

saalek110

Well-Known Member
بي زحمت دستورات اجراي فايل را در ويژوال بيسيك بگيد.
آيا فقط اجرايي ها را ميشه اجرا كرد؟
يا هر نوع فايلي ميشه؟
.ممنون
.
 

MnavidM

Active Member
سلام.

اینجا رو ببین [پایین Page رو نگاه کن].

با استفاده از دستور Shell می تونید این کار رو انجام بدید .

موفق باشی.
نوید.
 

saalek110

Well-Known Member
با تشكر از پاسخ اساتيد.
صفحه اي كه مديريت فرستادند را نقل مي كنم.
از:
http://www.experts-exchange.com/Programming/Q_21306777.html

dear sir ,
how can i run an exe file from a visual basic command
thanks
چطور مي توانم يك فايل exe را با دستورات ويژوال بيسيك اجرا كنم؟


You mean like another file? Use

Shell "program.exe"
where program.exe is another exe program.

There are also several options around Shell - in the VB environment, it should show you the options (options including window state - foreground or background - etc.).
اين جوري بنويس:

کد:
Shell "program.exe"

و program.exe برنامه اجرايي ديگري غير از برنامه وي بي شماست.
دستور shell داراي option هايي هست. Option شامل حالت پنجره و بك گراند و فورگراند است.


Hi,
Here are some examples.
------------
Most common example:
Dim lngReturn As Long
lngReturn = Shell("C:\Windows\Notepad.exe", vbNormalFocus)

----------------
Example with cmdline switches:
Shell "c:\crc95 -gd -k \keyfile export.txt export.crc", vbNormalNoFocus

------------------------
Example with Variables:
Dim result as Long
mypath = App.Path
myfile = mypath & "\Help.pdf"
result = Shell("c:\program files\internet explorer\iexplore.exe " & myfile, vbNormalFocus)


---------------
Yet another example...
Shell("wordpad filename.rtf")
---------------
Example where the shelled program is maximized.
retval = Shell("...", vbMaximizedFocus)


** ** ** ** ** ** ** ** ** ** ** ** **

در ادامه مطلب(فكر كنم) مي خواهد كه برنامه وي بي بياستد تا فايل اجرا شده خاتمه يابد. شايد مورد نياز شما نباشد توجه نكنيد.



If you want to stop the vba-program until the started program ends, then use this code:

' Dieser Code benutzt die Win32-API-Funktionen
' CreateProcessA und WaitForSingleObject um
' auf das Ende eines Shell-Befehls zu warten.

کد:
Option Compare Database
Option Explicit

   Private Type STARTUPINFO
      cb As Long
      lpReserved As String
      lpDesktop As String
      lpTitle As String
      dwX As Long
      dwY As Long
      dwXSize As Long
      dwYSize As Long
      dwXCountChars As Long
      dwYCountChars As Long
      dwFillAttribute As Long
      dwFlags As Long
      wShowWindow As Integer
      cbReserved2 As Integer
      lpReserved2 As Long
      hStdInput As Long
      hStdOutput As Long
      hStdError As Long
   End Type

   Private Type PROCESS_INFORMATION
      hProcess As Long
      hThread As Long
      dwProcessID As Long
      dwThreadID As Long
   End Type

   Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
      hHandle As Long, ByVal dwMilliseconds As Long) As Long

   Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
      lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
      lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
      ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
      ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
      lpStartupInfo As STARTUPINFO, lpProcessInformation As _
      PROCESS_INFORMATION) As Long

   Private Declare Function CloseHandle Lib "kernel32" (ByVal _
      hObject As Long) As Long

   Private Const NORMAL_PRIORITY_CLASS = &H20&
   Private Const INFINITE = -1&

Public Sub ExecCmd(cmdline$)
      Dim proc As PROCESS_INFORMATION
      Dim start As STARTUPINFO
      Dim ReturnValue As Integer

      ' Initialisierung  der STARTUPINFO Struktur:
      start.cb = Len(start)

      ' Starten der ausf�hrbaren Anwendung:
      ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
         NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

      ' Warten bis die ausf�hrbare Anwendung bendet ist:
      Do
         ReturnValue = WaitForSingleObject(proc.hProcess, 0)
         DoEvents
         Loop Until ReturnValue <> 258

      ReturnValue = CloseHandle(proc.hProcess)
End Sub

Sub Testing()
      ExecCmd "NOTEPAD.EXE"
      MsgBox "Anwendung beendet"
End Sub



To use it just type "Testing" and it starts a notepad and waits until the windows closes.



use the shell execute command to run any ,exe application......
U will find the way to do that in the MSDN help files and believe me its truly easy.............
u just have to use simle coding style like this
shell(application path + nameoffile.exe)

and do not forget to add a reference to the shell commands from the
project -> reference dialogoue box

فراموش نكنيد كه در قسمت reference ، منوي پروجكت ، reference ديالوگ باكس ، يك رفرنس اضافه كنيد.
.
 
آخرین ویرایش:

sh_sepehr

Member
اجرای یک برنامه در ویژوال بیسیک

سلام
من میخواستم یه برنامه مثل مثلاً نت پد یا مثلاً یه فایل ماله Help رو در ویژوال با زدن یک کلید اجرا بشه ! میخواستم ببینم چه جوری امکان پذیره !
 

sh_sepehr

Member
خیلی ممنون! کارمو تا حدودی راه انداخت !
ولی این فقط فایلهای exe رو اجرا میکنه ! من میخوام یک فایل برام با پسوند Hlp یا CHM که یک فایل کمکی هست رو اجرا کنه ! وقتی اینحا میزنم خطا میده !
 

nimja

Member
کمک برای یک کار ساده در وی بی

سلام
من در وی بی یک Command دارم.میخوام وقتی روش کلیک کنم یه فایل exe به نام test.exe را در درایو c (c:\test.exe) اجرا کنه و در یک پنجره جدید باز کنه. چه کدی را باید بنویسم؟
ممنون
 

EMIRATES

Active Member
با سلام

با دستور Shell میتونید این کار رو انجام بدید.

shell "C:\test.exe"

اتوماتیک در یک پنجره جدید باز میشه.

با تشکر.
 

explode

New Member
با سلام خدمت تمام اساتید عزیز
من یک مشکل تو vb دارم اونم اینه که میخوام یک ادرس از کاربر بگیرم بعد کاربر اون ادرس رو که داد مثلآ یک فایل تکست یا یک عکس یا یک برنامه exe اجرا بشه میخوام همه اینها رو ساپورت کنه از shell هم استفاده کردم ولی فقط مخصوص یک کاره تازه جواب هم نمیدهد میگه فایل پیدا نشد!!!!!!!!!
ممنون میشم جواب بدید
 

EMIRATES

Active Member
با سلام

دوست عزیز تاپیک ماله 2005 ئه!!

شما باید درخواستتونو تو یه تاپیک جدید مطرح کنید.

با تشکر.
 

saalek110

Well-Known Member
Emirates جان برای یک موضوع واحد تاپیکهای متعدد داشتن باعث سردگمی و اتلاف وقت است. من موضوعات را در تاپیکهای سنجاق شده لیست کردم تا باعث سهولت دسترسی بشود. اجازه دهید این موضوع در این تاپیک دنبال شود. البته در فرومهای دیگر این قانونی که شما فرمودید هست ولی دیده شده مثلا برای یک سئوال واحد دهها بار تاپیک زده شده.
 

the_king

مدیرکل انجمن
ده جا هم در مورد نحوه فراخوانی فایلهای غیر اجرایی بنویسیم، باز نفر یازدهم همین سوال رو می کنه.
حالا چه ده تا گفتگو قبلی وجود داشته باشه، چه یه دونه گفتگو.
وقتی قبل از پرسیدن سوالشون، زحمت جستجو بخودشون ندن چه فایده؟

برای فراخوانی فایلهای غیر اجرایی مثل txt یا mp3 یا pdf و همچنین فراخوانی یک فایل صرفا توسط یک برنامه خاص
استفاده از تابع ShellExecute موجود در API ویندوز را توصیه می کنم.

برای بکارگیری ساده تر این تابع، من یک Module با نام ModuleShell ساختم که به همراه یک پروژه نمونه ضمیمه
این پست می باشد. در این Module دو تابع عمومی را ایجاد کرده ام :

تابع اول
OpenFile

این تابع دو پارامتر دارد که اولی مسیر یک فایل است که قرار است بازش کنیم، مثلا C:\File.txt
پارامتر دوم این تابع اختیاری است و مشخص می کند که فایل برای چه منظوری باز شود، مقادیر قابل استفاده
بستگی به نوع فایل و تعاریف سیستم عامل دارد ولی مقادیر عمومی اینها هستند :
"open"
"edit"
"print"
"explore"

مثلا اگر قصد باز کردن عادی یک فایل را داریم از مقدار "open" استفاده می کنیم.
یا اگر قصد ویرایش کردن یک فایل را داریم از مقدار "edit" استفاده می شود.
یا اگر قصد چاپ کردن یک فایل را داریم از مقدار "print" استفاده می شود.
یا اگر بخواهیم یک پوشه را در پنجره Explorer ویندوز باز کنیم از مقدار "explore" استفاده می شود.

اگر مقدار پارامتر دوم را مشخص نکنیم، فایل با متد پیشفرض باز می شود که در اغلب موارد شبیه عملکرد "open" است.

مثال 1 :
فایل C:\Text1.txt را بصورت عادی باز می کنیم.
کد:
[B]OpenFile[/B] "C:\Text1.txt"

مثال 2 :
فایل C:\Text1.txt را برای چاپ کردن باز می کنیم.
کد:
[B]OpenFile[/B] "C:\Text1.txt", "print"

مثال 3 :
پوشه C:\MyFolder را با Explorer باز می کنیم.
کد:
[B]OpenFile[/B] "C:\MyFolder", "explore"

تابع دوم
OpenWithFile

این تابع برعکس تابع قبلی مشخص می کند که فلان فایل با کدام برنامه باز شود. مثلا می توانید مشخص کنید که
فایل mp3 فقط با WinAmp باز شود. این تابع هم دو پارامتر دارد که اولی نام برنامه ای است که می خواهید فایل
را با آن باز کنید، مثلا C:\Program Files\Winamp\winamp.exe

پارامتر دوم مسیر فایلی است که قرار است باز شود، مثلا C:\Track01.mp3

مثال 1 :
فایل C:\Track01.mp3 را با WinAmp باز می کنیم.
کد:
[B]OpenWithFile[/B] Environ("ProgramFiles") & "\WinAmp\WinAmp.exe", "C:\Track01.mp3"
توجه کنید که بجای استفاده مستقیم از مسیری مثل C:\Program Files از تابع Environ("ProgramFiles") استفاده شده است.
با این ترفند، همواره مسیر صحیح Program Files را در اختیار خواهیم داشت که ممکن است در کامپیوتر های مختلف
یکسان نباشد.

مثال 2 :
فایل C:\Track01.mp3 را با Windows Media Player باز می کنیم.
کد:
[B]OpenWithFile[/B] Environ("ProgramFiles") & "\Windows Media Player\wmplayer.exe", "C:\Track01.mp3"

پروژه به همراه فایل اجرایی و یک فایل wav نمونه و یک فایل txt نمونه ضمیمه این پست شده است. ابتدا محتویات فایل
zip را در یک پوشه باز کنید و پروژه را در داخل آن پوشه اجرا نمایید تا در استفاده از فایلهای ضمیمه شده در برنامه
مشکلی نداشته باشید.
 

پیوست ها

  • OpenFile.zip
    32 کیلوبایت · بازدیدها: 153

hsshhchb

New Member
خیلی ممنون از برنامتون خیلی به دردم خورد :wink:
ماژول خیلی به دردبخوریه :rose:
 

rezabehmanesh

New Member
سلام اساتید بزرگوار
من شدیدا نیازمند کد vba هستم که بتونه یک فایل نرم افزار gams گمز را اجرا کنه.میخوام این دستور را در اکسل بنویسم که از طریق یک دکمه فایل مورد نظر را باز و اجرا کنه.
دستور shell نمیتونه فایل گمز مثلا file.gms را باز کنه.خطا میده. یک تابعی بنام gamsrun در جستجو پیدا کردم ولی باز خطا میده.ممنون میشم راهنمایی کنید.
 

the_king

مدیرکل انجمن
سلام اساتید بزرگوار
من شدیدا نیازمند کد vba هستم که بتونه یک فایل نرم افزار gams گمز را اجرا کنه.میخوام این دستور را در اکسل بنویسم که از طریق یک دکمه فایل مورد نظر را باز و اجرا کنه.
دستور shell نمیتونه فایل گمز مثلا file.gms را باز کنه.خطا میده. یک تابعی بنام gamsrun در جستجو پیدا کردم ولی باز خطا میده.ممنون میشم راهنمایی کنید.
شما فقط کافیه بدونید که اون فایل Gams.exe روی سیستم تون جا است، مسیر فایلش رو که بدونید دیگه بقیه اش راحته. همون Shell میتونه فایل اجرایی gams رو با مسیر یک فایل gms که پشت سرش نوشته میشه اجرا کنه :
کد:
Public Sub RunGams(ByVal path As String)
    Shell """C:\Program Files (x86)\Gams\gams.exe"" """ + path + """", vbNormalFocus
End Sub
مثلا اگه مسیر C:\Program Files (x86)\Gams\gams.exe درست باشه با این فرمان میشه فایل test.gms رو باز کرد :
کد:
    RunGams "C:\My Folder\test.gms"
تو همون منوی Start ویندوز اگه روی Gams راست کلیک کنید و Properties اش رو انتخاب کنید تو مسیر Target نوشته شده که فایل اجراییش کجا است.
 

rezabehmanesh

New Member
دوست عزیز بسیار سپاسگزارم از راهنماییتون خیلی کمک کردید. ایا دستوری هست که برنامه مورد نظر اجرا بشه؟ با این دستورات فقط فایل تست را باز میکنه .من میخوام برنامه خودش اجرا بشه برای فایل متلب چنین دستوری پیدا کردم که همزمان باز میشه اجرا میشه و برنامه بسته میشه.ممنون میشم راهنمایی کنید
 

the_king

مدیرکل انجمن
دوست عزیز بسیار سپاسگزارم از راهنماییتون خیلی کمک کردید. ایا دستوری هست که برنامه مورد نظر اجرا بشه؟ با این دستورات فقط فایل تست را باز میکنه .من میخوام برنامه خودش اجرا بشه برای فایل متلب چنین دستوری پیدا کردم که همزمان باز میشه اجرا میشه و برنامه بسته میشه.ممنون میشم راهنمایی کنید
در راهنماش که نوشته اجراش می کنه، نه فقط اینکه بازش کنه. من خودم gams رو ندارم ولی راهنماش اینطور میگه :
Running GAMS from the command line

Alphabetic list of all GAMS command line parameters
 

جدیدترین ارسال ها

بالا