یک سوال درباره Shell و Feedback آن
دوستان می خوام از برنامم یک فایل اجرایی رو اجرا کنم می خوام تا زمانی که اون برنامه کارش تموم نشده برنامه من قفل بشه.
مثال :
Add or Remove Program ویندوز رو در نظر بگیرید
وقتی روی دکمه Unistall کلیک می کنیم برنامه Unistall باز شده و نکته اینه که خوده پنجره Add or Remove قفل می شه تا زمانی که کاره حذف نرم افزار انجام بشه.
یا مثال دیگه ما وقتی پنجره ای رو بصورت ShowModal باز می کنیم دقیقا همین اتفاق میافته.
فقط دقت کنید که من می خوام یک فایل Exe رو اجرا کنم ، فرمی رو از داخل برنامه نمی خوام
نقل قول: یک سوال درباره Shell و Feedback آن
يك راه پيش پا افتاده اينه كه يك تايمر بزاري و caption پنجره هاي فعال رو چك كني اگر پنجره موردنظر فعال بود اونوت فرم رو قفل كني.
ميشه از تايمر هم استفاده نكرد بستگي به برنامه داره كه شما مي دونيد اون فايل exe كي اجرا ميشه يا نه.
البته من كوچيكتر از اوني هستم كه بخوام شما رو راهنمايي كنم.
موفق باشيد.
نقل قول: یک سوال درباره Shell و Feedback آن
مي توني وقتي كه فرم مورد نظرت رو باز مي كني فرم قبلي تو تا موقعي كه فرم جديدتو نبستي غير فعال نگهداري . براي مثال اگر فرم اصليت frmMain و فرم جديدت frmNew باشه توي يكي از اجزاي frmMain مي توني بنويسي frmNew.Show 1 اون يكي كه بعد از frmNew.Show مي نويسي فرم قبلي يعني frmMain تو رو تا زماني كه فرم جديدت بازه قفل مي كنه
نقل قول: یک سوال درباره Shell و Feedback آن
دوست عزیز اگر دقت کنید من عرض کردم خدمتتون که نمی خوام فرمی رو نمایش بدم به قول فرمایش شما همون Form1.Show 1 جواب کاره منو می ده ولی من سوالم چیزه دیگست و مثالی که زدم فکر می کنم مکفی باشه.می خوام فایل Exe رو اجرا کنم تا زمانی که کاره فایل EXE انجام نشده برنامه من کاری انجام نده
نقل قول: یک سوال درباره Shell و Feedback آن
سلام دوست عزیز
شما اگر برای فایلی که میخواین execute کنین یه فرم به صورت vbmodal باز کنید و کنترلهای فرم رو هم بردارید min,max,close و برای اجرا exe از command button استفاده کنی و هنگامی که میخوایی دستورات رو اجرا کنی enabel دگمه رو false کن و وقتی که پنجره فایل exe در حال اجرا است enabel دگمه هم false وقتی کار exe تموم شد میتونی دگمه های خروج و دوباره اجرا کردن exe رو enabel رو true کنی همین و به قول دوستمون با timer هم میتونی فعال یا غیر فعال بودن پنجر فایل اجرایی رو چک کنید
با آرزوی سر بلندی
نقل قول: یک سوال درباره Shell و Feedback آن
1 - اگر قرار بود با فایل اجرایی در ارتباط باشم که روشهای خیلی بهتری هم هست
2 - اسم یا عنوان پنجره فایل اجرایی رو ندارم
3 - نمی خوام حتی تایمرهای نرم افزار کار کنه
4 - فایل اجرایی یک فایل نصبی هستش که باید یک فایل مورد نیاز رو نصب کنه
نقل قول: یک سوال درباره Shell و Feedback آن
پس از فايل exe چه چيزي در اختيار دارين تا بتونين از طريق اون كنترل رو دست بگيرين؟
نقل قول: یک سوال درباره Shell و Feedback آن
اين دقيقا همون چيزي كه شما مي خوان:
بدون نياز به تايمر.
اين كد رو داخل ماژول قرار بديد:
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
start.cb = Len(start)
ret& = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
ret& = WaitForSingleObject(proc.hProcess, INFINITE)
ret& = CloseHandle(proc.hProcess)
End Sub
حالا اونجايي كه مي خواين اون فايل exe رو به اين صورت اجرا كنيد:
ExecCmd "c:\windows\system32\calc.exe"
اينجا برنامه ماشين حساب ويندوز رو در نظر مي گيريم كه تا زماني كه ماشين حساب بسته نشود نمي توانيم از برنامه استفاده كنيم.
موفق باشيد