سلام دوستان
من از تابع ShellExecuteA برای اجرا کردن یک فایل exe استفاده می کنم...
حالا کاری که می خوام انجام بدم اینه :
مثلا بعد از فراخوانی تابع ShellExecuteA یک دستور msgbox میذارم. حالا اگه برنامه رو اجرا کنم ... فایلی که توی تابع گذاشتم اجرا میشه و بعدش هم msgbox میاد.
من می خوام وقتی که فایلی که توی تابع گذاشتم اجرا شد ... برنامه منتظر بمونه تا اون فایل بسته بشه بعد msgbox بده...
فکر می کنم منظورمو خوب رسوندم...
مرسی
تا بعد...!
سلام
دو برنامه زیر کاری که شما می خواید رو می کنن با این تفاوت که
یا شما می خوای که کاربر وقتی برنامه بازه به برنامه خودت دسترسی داشته باشه که باید از سورس اول استفاده کنی
یا شما می خوای وقتی برنامه بازه برنامه شما به حالت معلق در بیاد که برای این منظور باید از سورس دومی استفاده کنید ( که این راه اصولی تر هست )
سلام
مرسی دوست من
ولی یه مشکل هست...
من توی سورس دوم نتوستم پارامتر یا همون کمند لاین به برنامه ارسال کنم...
من نیاز دارم که یک برنامه رو با استفاده از پارامترهایی که بهش ارسال می کنم فراخوانی بشه.
تا بعد...!
من که مشکل خاصی ندیدم
فایل ران رو برای مشاهد نتیجه کار اجرا کنید
سلام
منظور منو متوجه نشدید...
من مثالی که شما گذاشتید و نمی گم... اون برنامه ای که با create process اجرا میشه رو می خوام پارامتر بهش ارسال کنم...
مرسی
تا بعد...!
خوب اگه از همون اول درست توضیح می دادید از همون اول به این جواب می رسیدیم
بازم سلام
شرمندم جناب Iron Fist...
دستور ShellExecuteA یک آرگومان داره که میشه با استفاده از اون برنامه ای رو که قرار اجرا بشه با این دستور مخفی ( Hide ) می کنه..
می خواستم ببینم آیا این دستور create process هم این قابلیت رو داره ؟
یا اگه نداره ، لطفا دستوری رو معرفی کنی که ضمن کار اصلی تاپیک ، این کاری هم که گفتم تواناییشو داشته باشه...
بازم شرمنده و خیلی ممنونم...
تا بعد...!
سلام اختیار دارید این چه حرفیه حالا که تا اینجاش رو اومدیم بهتره تا تهش بریم
فکر نمی کنم این کاری که شما بخواید بکنید کار جالبی باشه در هرصورت تابع CreateProcess امکان این که وضعیت اولیه برای پنجره تعریف کنید را دارد . در زیر لیست ثابت ها رو می بینید ولی در این مورد شما به دلیلی که نمی دونم و شاید به صورت منطقی بشه اینطور اثبات کرد که با شرط این برنامه یک معلق شده که برنامه دو اماده به کار باشد نمی توان از کانستنت SW_HIDE استفاده کرد و استفاده از آن عملا بی تاثیر است .
کد:
Private Const SW_AUTOPROF_LOAD_MASK As Long = &H1
Private Const SW_AUTOPROF_SAVE_MASK As Long = &H2
Private Const SW_ERASE As Long = &H4
Private Const SW_FORCEMINIMIZE As Long = 11
Private Const SW_HIDE As Long = 0
Private Const SW_INVALIDATE As Long = &H2
Private Const SW_MAX As Long = 10
Private Const SW_MAXIMIZE As Long = 3
Private Const SW_MINIMIZE As Long = 6
Private Const SW_NORMAL As Long = 1
Private Const SW_OTHERUNZOOM As Long = 4
Private Const SW_OTHERZOOM As Long = 2
Private Const SW_PARENTCLOSING As Long = 1
Private Const SW_PARENTOPENING As Long = 3
Private Const SW_RESTORE As Long = 9
Private Const SW_SCROLLCHILDREN As Long = &H1
Private Const SW_SHOW As Long = 5
Private Const SW_SHOWDEFAULT As Long = 10
Private Const SW_SHOWMAXIMIZED As Long = 3
Private Const SW_SHOWMINIMIZED As Long = 2
Private Const SW_SHOWMINNOACTIVE As Long = 7
Private Const SW_SHOWNA As Long = 8
Private Const SW_SHOWNOACTIVATE As Long = 4
Private Const SW_SHOWNORMAL As Long = 1
Private Const SW_SMOOTHSCROLL As Long = &H10
ببیند تابع WaitForSingleObject می آد و کنترل برنامه یک رو با شرط نمایش برنامه دو می گیره و وقتی بهمون کنترل برنامه یک رو می ده که برنامه دو برو ببندیم و من فکر می کنم مخفی کردن برنامه یک جور دخالت و ایجاد اختلال در کار این تابع باشه . من برای اطمینان خاطر به طور دستی هنگامیکه کنترل روی برنامه دو بود از طریق یک تایمر داخلی فرم دو را ناپید و پس از زمانی آن را ظاهر کردم ولی مشکلی که اینجا وجود داره این هست که دقیقا تایمی که در تایمر تایین کرده بودم برای ظاهر شدن دوباره برنامه 2 رعایت نشد و این هم می تونه ناشی از دخالت در کار تابع باشه . در هر صورت شما می تونید از گزینه های دیگه ظاهر شدن اولیه تابع CreateProcess استفاده کنید که برای این کار کافیه قبل از اجرای تابعCreateProcess دو دستور زیر رو اضافه کنید و به si.wShowWindow مقدار کانستنت مورد نظرتون رو بدید .
کد:
si.dwFlags = STARTF_USESHOWWINDOW
si.wShowWindow = SW_MAXIMIZE
سلام
آقا حال دادی بد فرم...
با توضیحاتی که شما دادی ناامید شده بودم. ولی با تست های مکرر فهمیدم جواب میده و خیلی عالی هم جواب میده.
یعنی برنامه با پارامتر به صورت مخفی اجرا میشه و برنامه اصلی منتظر میمونه تا کار تموم بشه..
احسن...
خیلی لطف کردید واقعا.
بازم ممنون
تا بعد...!
سلام
میتونی از تابع sleep استفاده کنید