PDA

View Full Version : فایل exe در حال اجرا



bamzy
سه شنبه 10 آبان 1384, 11:53 صبح
با سلام
من یک فایل exe دارم که بسته به فایل ورودی اوون زمان اجرا شدنش فرق می کند دنبال راهی می گردم که برنامه تشخیص بده کی این فایل کامل اجرا و بسته میشه و بعد به سراغ خط بعدی برنامه بره.
البته می دانم که میشه از sleep استفاده کرد ولی چون روی هر کامپیوتری یک سرعتی داره می خواهم برنامه خودش تشخیص بده کی کار تمام میشه.من این فایل exe را از داخل برنامه با دستور Shell اجرا میکنم.ممنون می شوم اگر راهی به ذهنتون می رسه راهنمایی کنید.

sinpin
سه شنبه 10 آبان 1384, 14:54 عصر
Public Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Const SEE_MASK_INVOKEIDLIST = &HC
Public Const SEE_MASK_FLAG_NO_UI = &H400

Public Const INFINITE = &HFFFF 'Infinite Wait Time
Public Const SW_NORMAL = 1


Public Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
' Optional Fields
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type


Public Declare Function ShellExecuteEx Lib "shell32.dll" (SEI As SHELLEXECUTEINFO) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long


Public Sub ExecAndWait(ByVal hwnd As Long, ByVal ProgramPath As String)

Dim SEI As SHELLEXECUTEINFO

'Filling SEI structure
With SEI
.cbSize = Len(SEI) 'Bytes of the structure
.fMask = SEE_MASK_NOCLOSEPROCESS 'I need hProcess to be retrieved
.lpFile = ProgramPath 'Program Path
.lpVerb = "Open" 'Action to do
.nShow = SW_NORMAL 'How the program will be showed
.lpDirectory = Left(ProgramPath, (InStrRev(ProgramPath, "\")) - 1)
.hwnd = hwnd 'Window Handle

End With

ShellExecuteEx SEI 'Execute the program hProcess recives the Process Handle used next.

WaitForSingleObject SEI.hProcess, INFINITE 'Here wait until close the program

CloseHandle hProcess

End Sub


این هم هست :
http://www.vb-helper.com/howto_shell_wait.html

sinpin
سه شنبه 10 آبان 1384, 15:10 عصر
همچنین :
http://www.developerfusion.co.uk/show/107/

mohsengrisly
سه شنبه 10 آبان 1384, 15:32 عصر
http://www.barnamenevis.org/forum/showthread.php?t=23614
http://www.barnamenevis.org/forum/showthread.php?t=23649
یه سری بزن
البته متاسفانه ضمیمه های من کاملا پاک شده و همچنان پس از چند ماه هنوز هم نمی تونم فایلی رو برای دوستان ضمیمه کنم اما برنامه رو چند تن از دوستان استفاده کردند و مشکلشون حل شد فکر کنم اونا بتونن فایل ارسال کنند

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

sinpin
سه شنبه 10 آبان 1384, 15:59 عصر
لطفا عنوان تاپیک رو به عنوان مناسبی تغییر دهید :

مثلا :‌ "اجرای یک پروسه و تشخیص زمان پایان یافتن آن"

bamzy
سه شنبه 10 آبان 1384, 16:31 عصر
سلام.
واقعا ممنون.لطف کردید.

bamzy
چهارشنبه 11 آبان 1384, 08:58 صبح
ببخشید من یک دو تا سوال دیگه هم دارم.این کد که sinpin عزیز لطف کردند و خودشون اینجا نوشتن یک سری پارامتر مثل حالت اجرای برنامه که نرمال باشه و ... داره ،یکی از خصوصیت های فایل exe که میشه تعیین کرد گزینه close on exit اون است. که اگر فعال نباشه کد شما کار نمی کنه و منتظرر بسته شدن دستی برنامه می مونه.من می خواهم اول تو برنامه چک کنه اگر این گزینه فعال نیست اون را فعال کنه،نمی دانم شاید یکی از همین خصوصیتهای تعریف شده در همین تابع مربوط به این باشه؟
و سوال دوم : این پارامتر hwnd که در ورودی برنامه میگیره چیه؟ من الان 0 دادم و اجرا شد ولی نمی دانم این پارامتر چیه؟ممنون می شوم اگر راهنمایی کنید.

sinpin
چهارشنبه 11 آبان 1384, 20:26 عصر
دوست عزیز این سورس رو من online از اینترنت برای شما پیدا کردم چون خودم فعلا vb6 کار نمیکنم
و اما در مورد hwnd یک عدد منحصربفرد و لحظه ای است که به پنجره در حال اجرا اشاره میکند
و تا بسته شدن پنجره قابل استفاده است (دستگیره پنجره خوانده میشود)
مثلا :‌ me.hwnd دستگیره پنجره جاری است
سعی میکنم سورسی رو که قبلا استفاده میکردم (بعد از یافتن) براتون آپلود کنم

sinpin
چهارشنبه 11 آبان 1384, 20:42 عصر
خوشبختانه پیدا شد.

bamzy
شنبه 14 آبان 1384, 09:15 صبح
خیلی متشکرم.البته همون کد اولی بیشتر به درد من میخوره اگر بتونم گزینه close on window را فعال کنم.به هر حال واقعا لطف کردید.

sinpin
شنبه 14 آبان 1384, 09:56 صبح
خیلی متشکرم.البته همون کد اولی بیشتر به درد من میخوره اگر بتونم گزینه close on window را فعال کنم.به هر حال واقعا لطف کردید.

با عرض معذرت منظور از close on window رو متوجه نشدم.