PDA

View Full Version : سوال: اجرا کردن و خاتمه دادن به برنامه ها



arash ka
سه شنبه 28 خرداد 1392, 13:23 عصر
سلام
می خواستم بپرسم چجوری میتونم از طریق vb یک برنامه رو اجرا کنم و هم بهش خاتمه بدم؟؟
مثلا بگم با زدن این دکمه برنامه nero که یک shortcut ازش کنار برنامه اصلی دارم اجرا بشه و با زدن یک دکمه دیگه از nero خارج بشه؟؟
اینم بگم که برنامه هایی که لازمه اجرا و بسته بشن در کنار محل نصب برنامه ای که نوشتم هستند.
کلی بخوام بگم فایل exe که کنار برنامه هست اجرا و بسته بشه
ممنون

javaweb341
سه شنبه 28 خرداد 1392, 19:01 عصر
با سلام و دورود
برای بستن برنامه شما می توانید از چند راه استفاده نمایید
1. از طریق CMD
Shell "taskkill /f /im cmd.exe", vbHide
مثلا کد بالا خود cmd را می بندد
2. با استفاده از هندل
مانند کد زیر
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_CLOSE = &H10

Private Sub Command1_Click()

Dim tskmgr_hWnd As Long
tskmgr_hWnd = FindWindow("#32770", "windows task manager")
If tskmgr_hWnd = 0 Then MsgBox "not found this windows", vbExclamation, "oh no ...": Exit Sub

Closeresult = SendMessage(tskmgr_hWnd, WM_CLOSE, 0&, 0&)

End Sub
کد بالا برنامه ی tskmgr رو می بنده

شما با قرار دادن نام برنامه ی مورد نظر در هر یک از کدها می توانید آن را ببندید
برای باز کردن تا چند دقیقه ی دیگه:چشمک:

javaweb341
سه شنبه 28 خرداد 1392, 19:04 عصر
دوست عزیز پیداش کردم
می تونی از API استفاده کنی:
Private 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
برای استفاده :
ShellExecute Me.hwnd, vbNullString, "آدرس فایل", vbNullString, app.path, 1
در کد بالا به جای "آدرس فایل" آدرس برنامه رو قرار بده تا اجراش کنه:چشمک:

arash ka
چهارشنبه 29 خرداد 1392, 08:13 صبح
دوست عزیز ممنون از راهنمایی هاتون
یک سوال دیگه!
کدی هست که بشه باهاش همه برنامه های در حال اجرا رو که در task manager هست رو بست؟؟

javaweb341
چهارشنبه 29 خرداد 1392, 08:24 صبح
با سلام دوست عزیز
یه سورس برات قرار دادم که تمامی برنامه های در حال اجرا را نمایش می دهد.
شما در این برنامه نام تمامی برنامه ها را دارید و می توانید با استفاده از کدهای بالا آن ها را ببندید
اگر هم نشد بگید تا یه فکری براش بکنیم:چشمک:

arash ka
چهارشنبه 29 خرداد 1392, 08:53 صبح
ممنون
تست می کنم اگه مشکلی بود می پرسم
بازم ممنونم

diamond-program
چهارشنبه 29 خرداد 1392, 09:13 صبح
برای بدست آوردن موقعیت کنونی برنامه می تونی از کد app.path استفاده کنی و برای لود کردن یک فایل exe میتونی از کد shellاستفاده کنی.اگه بعدش یه پرانتز باز بذاری خود وی بی کمکت میکنه.
امیدوارم کمک کرده باشم

arash ka
چهارشنبه 29 خرداد 1392, 12:17 عصر
برای بدست آوردن موقعیت کنونی برنامه می تونی از کد app.path استفاده کنی و برای لود کردن یک فایل exe میتونی از کد shellاستفاده کنی.اگه بعدش یه پرانتز باز بذاری خود وی بی کمکت میکنه.
امیدوارم کمک کرده باشم

ممنون دوست عزیر
لطف کردید

arash ka
پنج شنبه 30 خرداد 1392, 11:26 صبح
چجوری میشه همه برنامه هایی رو که تو task manager هستند رو بست؟؟؟؟؟؟
فففففففففففففففوووووووووو ووووورررررررررررییییییییی یییییییی

javaweb341
پنج شنبه 30 خرداد 1392, 12:54 عصر
با سلام دوست عزیز
در همون پروژهای که اینک دانشو قرار دادم یک Command با نام EndALL قرار بده بعد کد زیرو توی اون قرار بده
On Error GoTo e
For i = 1 To 1000000
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
Next i
Exit Sub
e:


اینجوری کل برنامه ها رو می بنده:شیطان:
من کار داشتم خیلی روش کار نکردم اگر کارت راه نیفتاد بگو تا بیشتر بررسی کنم:چشمک:

SlowCode
پنج شنبه 30 خرداد 1392, 13:07 عصر
واسه چندتا پروسس یه حلقه به طول 1 میلیون نیاز نیستا!
کافیه به همون اندازه باشه.

For i = 0 To Lv1.ListItems.Count-1
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
Next

javaweb341
پنج شنبه 30 خرداد 1392, 13:14 عصر
دوست عزیز اون کد بالا امکان داره کار نکنه این کد جدیدو تست کن 99.99% کار می کنه:چشمک:
Private Sub EndALL_Click()
On Error Resume Next
For i = 2 To Lv1.ListItems.Count
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
Next i
End Sub
فعلا :چشمک:

javaweb341
پنج شنبه 30 خرداد 1392, 13:17 عصر
با سلام دوست عزیز
یه سری توضیحات

با سلام دوست عزیز
در همون پروژهای که اینک دانشو قرار دادم یک Command با نام EndALL قرار بده بعد کد زیرو توی اون قرار بده
On Error GoTo e
For i = 1 To 1000000
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
Next i
Exit Sub
e:
کد بالا درسته اگر i=2 ، این حلقه به تعداد برنامه های در حال اجرا انجام می شود نه 1000000 بار چون زمانی که i از ListItems بیشتر می شود موجب بروز خطا و به علت قرار دادن کد On Error GoTo e حلقه به پایان می رسد و خیلی فرقی نمی کند که به جای 1000000 قرار دهیم ListItems.Count

For i = 0 To Lv1.ListItems.Count-1
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
Next
شروع ListItems از یک است نه از 0

دوست عزیز اون کد بالا امکان داره کار نکنه این کد جدیدو تست کن 99.99% کار می کنه

Private Sub EndALL_Click()
On Error Resume Next
For i = 2 To Lv1.ListItems.Count
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
Next i
End Sub
چرا i=2 ؟ چون شروع از یک است و اولین Item هم [System Process] است که بیخیالش می شیم اگر هم نشیم مشکلی پیش نمی آید چون On Error Resume Next قرار دادیم

:چشمک:

arash ka
جمعه 31 خرداد 1392, 09:04 صبح
سلام دوست عزیز
ممنون ولی فکر کنم منظورمو درست نرسوندم
با این کدی که شما دادی کل دسکتاپ خالی میشه تا ری استارت نکنی هیچی بالا نمیاد
من می خوام فقط برنامه های در حال اجرا مثل موزیلا - نرو - یاهو مسنجر و اینجور برنامه ها بسته بشه نه همه ویندوز

javaweb341
جمعه 31 خرداد 1392, 09:09 صبح
OK،من باید برم تا چند ساعت آینده همینی که گفتی برات درست می کنم:چشمک:
فقط شما گفته بودید همه برنامه هایی رو که تو task manager هستند رو بست من گفتم شاید می خواهید ویروسی چیزی بسازید:قهقهه:
فعلا

arash ka
جمعه 31 خرداد 1392, 09:15 صبح
ممنون
ویروس که نهههههههه
ی چیزی مثل هندی کافی که وسط هر برنامه ای که باشی همه رو میبنده
ممنون

javaweb341
جمعه 31 خرداد 1392, 09:17 صبح
با سلام دوست عزیز با کد زیر می توانید تمامی برنامه های اجرا شده به وسیله ی کاربر را ببندید
On Error Resume Next
For i = 1 To Lv1.ListItems.Count
If Lv1.ListItems(i).SubItems(1) <> "SYSTEM" And Lv1.ListItems(i).SubItems(1) <> "LOCAL SERVICE" And Lv1.ListItems(i).SubItems(1) <> "NETWORK SERVICE" Then
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
End If
Next i
امید وارم این همونی باشه که می خواستی:چشمک:
یه راه دگه هم دارم یه کم دگه می گم تا بنویسمش:چشمک:

SlowCode
جمعه 31 خرداد 1392, 09:40 صبح
دوست عزیز اون کد بالا امکان داره کار نکنه این کد جدیدو تست کن 99.99% کار می کنه:چشمک:
Private Sub EndALL_Click()
On Error Resume Next
For i = 2 To Lv1.ListItems.Count
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
Next i
End Sub
فعلا :چشمک:
میشه علتش رو بگی؟ چرا ممکنه کار نکنه؟
شما اینجا اومدی ایندکس رو از 2 شروع کردی و آیتمهای اول و دومی رو پریدی، آخر حلقه هم یه خطا به وجود میاد چون تو مرحله آخر مقدار i یه واحد از ایندکس آیتم آخر بیشتره به همون خاطر on error رو نوشتی.

ایند کد آخریت بهتره:



On Error Resume Next
For i = 1 To Lv1.ListItems.Count
If Lv1.ListItems(i).SubItems(1) <> "SYSTEM" And Lv1.ListItems(i).SubItems(1) <> "LOCAL SERVICE" And Lv1.ListItems(i).SubItems(1) <> "NETWORK SERVICE" Then
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
End If
Next i

ولی اینجا هم حلقه رو باید از 0 شروع کنی و تا Lv1.ListItems.Count-1 ادامه بدی.(چون ایدنکس از صفر شروع میشه)
اینطوری دیگه نیازی به on error نیست چون اصلا خطایی رخ نمیده.

arash ka
جمعه 31 خرداد 1392, 09:40 صبح
دوست عزیز ممنون ولی بازم تمام دستکتاپ رو از بین برد
من فقط می خوام برنامه های نصب شده در حال اجرا بسته بشن نه همه دستکتاپ
بازم ممنون

SlowCode
جمعه 31 خرداد 1392, 09:43 صبح
دوست عزیز ممنون ولی بازم تمام دستکتاپ رو از بین برد
من فقط می خوام برنامه های نصب شده در حال اجرا بسته بشن نه همه دستکتاپ
بازم ممنون
شما یه شرط بذار که اگه اسم پروسس explorer.exe نبود ببندش.
این برنامه رو نباید ببندی.

javaweb341
جمعه 31 خرداد 1392, 09:52 صبح
میشه علتش رو بگی؟ چرا ممکنه کار نکنه؟
شما اینجا اومدی ایندکس رو از 2 شروع کردی و آیتمهای اول و دومی رو پریدی، آخر حلقه هم یه خطا به وجود میاد چون تو مرحله آخر مقدار i یه واحد از ایندکس آیتم آخر بیشتره به همون خاطر on error رو نوشتی.

ایند کد آخریت بهتره:
ولی اینجا هم حلقه رو باید از 0 شروع کنی و تا Lv1.ListItems.Count-1 ادامه بدی.(چون ایدنکس از صفر شروع میشه)
اینطوری دیگه نیازی به on error نیست چون اصلا خطایی رخ نمیده.


با سلام دوست عزیز
نه دوست عزیز ایندکس از 1 شروع می شود مدرک
کد زیر را در یک دکمه قرار دهید
For i = 0 To Lv1.ListItems.Count - 1
MsgBox Lv1.ListItems(i)
Next
می بینید که خطا رخ می دهد و MsgBoxنمی آید

چرا i=2 ؟ چون شروع از یک است و اولین Item هم [System Process] است_________________________

ایند کد آخریت بهتره:
On Error Resume Next
For i = 1 To Lv1.ListItems.Count
If Lv1.ListItems(i).SubItems(1) <> "SYSTEM" And Lv1.ListItems(i).SubItems(1) <> "LOCAL SERVICE" And Lv1.ListItems(i).SubItems(1) <> "NETWORK SERVICE" Then
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
End If
Next i
ولی اینجا هم حلقه رو باید از 0 شروع کنی و تا Lv1.ListItems.Count-1 ادامه بدی.(چون ایدنکس از صفر شروع میشه)
اینطوری دیگه نیازی به on error نیست چون اصلا خطایی رخ نمیده.اینجا هم اگر i رو 2 قرار می دادم بهتر بود:چشمک:

javaweb341
جمعه 31 خرداد 1392, 09:54 صبح
خوب دوست عزیز کد تا اینجا مثل زیر شد
Private Sub EndALL_Click()
On Error Resume Next
For i = 2 To Lv1.ListItems.Count
If Lv1.ListItems(i).SubItems(1) <> "SYSTEM" And Lv1.ListItems(i).SubItems(1) <> "LOCAL SERVICE" And Lv1.ListItems(i).SubItems(1) <> "NETWORK SERVICE" Then
If Lv1.ListItems(i) <> "explorer.exe" Then
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
End If
End If
Next i
End Sub
اینو امتحان کن ببین چی میشه:چشمک:

arash ka
جمعه 31 خرداد 1392, 09:56 صبح
شما یه شرط بذار که اگه اسم پروسس explorer.exe نبود ببندش.
این برنامه رو نباید ببندی.


چجوری؟؟؟
میشه شرطشو بنویسید؟؟؟

arash ka
جمعه 31 خرداد 1392, 09:59 صبح
خوب دوست عزیز کد تا اینجا مثل زیر شد
Private Sub EndALL_Click()
On Error Resume Next
For i = 2 To Lv1.ListItems.Count
If Lv1.ListItems(i).SubItems(1) <> "SYSTEM" And Lv1.ListItems(i).SubItems(1) <> "LOCAL SERVICE" And Lv1.ListItems(i).SubItems(1) <> "NETWORK SERVICE" Then
If Lv1.ListItems(i) <> "explorer.exe" Then
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
End If
End If
Next i
End Sub
اینو امتحان کن ببین چی میشه:چشمک:



ممنون دوست عزیز
دستتون درد نکنه
مشکلم حل شد
واقعا از زحماتتون سپاس گذارم

arash ka
جمعه 31 خرداد 1392, 10:00 صبح
شما یه شرط بذار که اگه اسم پروسس explorer.exe نبود ببندش.
این برنامه رو نباید ببندی.


دستتون درد نکنه
مشکلم حل شد
ممنون

arash ka
جمعه 31 خرداد 1392, 10:09 صبح
ی سوال دیگه
ببخشی که من اینقد سوال می کنم
می خواستن بپرسم میشه بعد از اجرای این کد و بسته شدن برنامه ها برنامه ای که می خوایم یا فرمی که می خوایم اجرا بشه؟؟؟
مثلا ی برنامه دیگه با پسوند exe در کنار این برنامه (برنامه بستن فایل ها) باشه بعد از بسته شدن برنامه ها این برنامه exe اجرا بشه؟؟؟

SlowCode
جمعه 31 خرداد 1392, 10:21 صبح
اگه کنار برنامت باشه این کد رو بعد از next i بنویس:

shell "program.exe",vbNormalFocus

ولی اگه تو یه مسیر دیگه باشه باید به جای program.exe مسیر برنامت رو بدی.

javaweb341
جمعه 31 خرداد 1392, 10:41 صبح
دوست عزیز کد پایین را در Form_Load بده تا برنامه ی خودت در بین برنامه های در حال اجرا در task manager نمایش داده نشود،در صورت نمایش برنامه ی ما را هم میبندد و امکان اجرای اون برنامه هم نیستApp.TaskVisible = False
خوب حالا اگر خواستی برنامه ی خودت هم بسته بشه و اون یکی برنامه اجرا بشه کد زیر
Private Sub EndALL_Click()
On Error Resume Next
For i = 2 To Lv1.ListItems.Count
If Lv1.ListItems(i).SubItems(1) <> "SYSTEM" And Lv1.ListItems(i).SubItems(1) <> "LOCAL SERVICE" And Lv1.ListItems(i).SubItems(1) <> "NETWORK SERVICE" Then
If Lv1.ListItems(i) <> "explorer.exe" Then
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
End If
End If
Next i
'---------بسته شدن برنامه ی ما-------
Shell "taskkill /f /im " & App.EXEName + ".exe", vbHide
'---------باز کردن برنامه ی مورد نظر--------
shell "program.exe",vbNormalFocus
End Sub
:چشمک:

arash ka
جمعه 31 خرداد 1392, 10:44 صبح
اگه کنار برنامت باشه این کد رو بعد از next i بنویس:

shell "program.exe",vbNormalFocus

ولی اگه تو یه مسیر دیگه باشه باید به جای program.exe مسیر برنامت رو بدی.


دوست عزیز این کدو اضاف کردم ولی اجرا نکرد
راه حل دیگه ای نیست؟؟؟؟؟؟

javaweb341
جمعه 31 خرداد 1392, 10:48 صبح
دوست عزیز کد پایین را در Form_Load بده تا برنامه ی خودت در بین برنامه های در حال اجرا در task manager نمایش داده نشود،در صورت نمایش برنامه ی ما را هم میبندد و امکان اجرای اون برنامه هم نیستApp.TaskVisible = False
خوب حالا اگر خواستی برنامه ی خودت هم بسته بشه و اون یکی برنامه اجرا بشه کد زیر
Private Sub EndALL_Click()
On Error Resume Next
For i = 2 To Lv1.ListItems.Count
If Lv1.ListItems(i).SubItems(1) <> "SYSTEM" And Lv1.ListItems(i).SubItems(1) <> "LOCAL SERVICE" And Lv1.ListItems(i).SubItems(1) <> "NETWORK SERVICE" Then
If Lv1.ListItems(i) <> "explorer.exe" Then
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
End If
End If
Next i
'---------بسته شدن برنامه ی ما-------
Shell "taskkill /f /im " & App.EXEName + ".exe", vbHide
'---------باز کردن برنامه ی مورد نظر--------
shell "program.exe",vbNormalFocus
End Sub
:چشمک:
اینی که من گفتم انجام دادی؟
اسم برنامه program.exe است؟این برنامه(program.exe) باید کنار برنامه ی شما باشد

arash ka
جمعه 31 خرداد 1392, 10:48 صبح
دوست عزیز کد پایین را در Form_Load بده تا برنامه ی خودت در بین برنامه های در حال اجرا در task manager نمایش داده نشود،در صورت نمایش برنامه ی ما را هم میبندد و امکان اجرای اون برنامه هم نیستApp.TaskVisible = False
خوب حالا اگر خواستی برنامه ی خودت هم بسته بشه و اون یکی برنامه اجرا بشه کد زیر
Private Sub EndALL_Click()
On Error Resume Next
For i = 2 To Lv1.ListItems.Count
If Lv1.ListItems(i).SubItems(1) <> "SYSTEM" And Lv1.ListItems(i).SubItems(1) <> "LOCAL SERVICE" And Lv1.ListItems(i).SubItems(1) <> "NETWORK SERVICE" Then
If Lv1.ListItems(i) <> "explorer.exe" Then
Shell "taskkill /f /im " & Lv1.ListItems(i), vbHide
End If
End If
Next i
'---------بسته شدن برنامه ی ما-------
Shell "taskkill /f /im " & App.EXEName + ".exe", vbHide
'---------باز کردن برنامه ی مورد نظر--------
shell "program.exe",vbNormalFocus
End Sub
:چشمک:


ممنون
درست شد
دستتون درد نکنه
کد فرم لود رو که اضافه کردم درست شد