ورود

View Full Version : مبتدی: باز و بسته کردن یک برنامه با دلفی (خیلی خیلی فوری)



maryam11065
سه شنبه 18 بهمن 1390, 22:43 عصر
با سلام:
من یه برنامه با دلفی نوشتم و حالا می خوام براش یه زمانبندی بزارم که بعد از مدت مشخصی برنامه بسته بشه و دوباره باز بشه و اجرا بشه البته از مسیری که خودم بهش میدم .میخوام فایل exe اش اجرا بشه. لطفا راهنماییم کنید فقط فوری چون خیلی نیاز دارم . ممنون

joooje
سه شنبه 18 بهمن 1390, 22:49 عصر
خب وقتی برنامتون بسته میشه، چطوری میخواین دستور اجرای مجددش رو بدید؟؟؟
به نظرم میتونید از CMD کمک بگیرین
یادمه یه دستوری داشت که میدادین و برنامتون رو میبستین
اون خودش بعد از یه زمان مشخص که بهش داده بودید برنامه رو اجرا میکرد

maryam11065
سه شنبه 18 بهمن 1390, 22:55 عصر
با استفاده از دستور shell execute میشه exe رو فراخوانی کرد ولی دقیقا نمیدونم چطوری

tiphooo
سه شنبه 18 بهمن 1390, 23:15 عصر
شما حتما مجبور نیستید که برنامه را ببندید می توانید از کامپوننت TrayIcon استفاده کنید و برای بستن برنامه آن را MinimizeToTry کنید و یا با استفاده از تایمر و یا هر زمان که خواستید آن را از Try در بیاورید مانند عملکرد بسیاری از برنامه ها شبیه آنتی ویروسها و .... با بسته شدنشان آیکنی در سمت راست پایین صفحه ویندوز دارند.
ShellExecute هم به صورت زیر است
ShellExecute(handle, 'open', 'مسیر و نام فایل اجرایی', 0, 0, SW_SHOWNORMAL);
Handle هم از نوع HWND است

joooje
چهارشنبه 19 بهمن 1390, 08:48 صبح
با استفاده از دستور shell execute میشه exe رو فراخوانی کرد ولی دقیقا نمیدونم چطوری

این دستور زمانی به کارتون میاد که برناتون باز باشه و این دستور رو بده، اگه بسته باشه که نمیتونه این دستور رو اجرا کنه!
اگرم قبل از بسته شدن این دستور رو بدید و برنامه رو ببندید، که دیگه فاصله زمانی نخواهد داشت و همون لحظه اجرا میشه
میتونید فرم برنامتون رو مخفی کنید به جای بستنش!

maryam11065
چهارشنبه 19 بهمن 1390, 11:14 صبح
من می خوام برنامه ام رو چک کنه که اگه باز بود برنامه رو ببنده و دوباره اجراش کنه طوری که کاربر نفهمه برنامه ریست شده. فکر کنم از طریق کد رجیستری میشه تعیین کرد ولی کدش رو ندارم از استادای گرامی اگه کسی کدش رو داره در اختیارم بذاره، ممنون میشم

maryam11065
چهارشنبه 19 بهمن 1390, 11:40 صبح
کسی نیست کمکم کنه؟:گریه:

mojiparadox
چهارشنبه 19 بهمن 1390, 12:01 عصر
من می خوام برنامه ام رو چک کنه که اگه باز بود برنامه رو ببنده و دوباره اجراش کنه طوری که کاربر نفهمه برنامه ریست شده. فکر کنم از طریق کد رجیستری میشه تعیین کرد ولی کدش رو ندارم از استادای گرامی اگه کسی کدش رو داره در اختیارم بذاره، ممنون میشم

میتونم دلیل این‌کار رو بپرسم؟ شاید روش‌های بهتری برای این‌کار باشه...

mohsen24000
چهارشنبه 19 بهمن 1390, 12:59 عصر
شما باید از یک BatchFile استفاده کنید:


var bfile:Tstringlist;
....
bfile.Clear;
bfile.Add('@echo off');
bfile.Add('app.exe');
bfile.SaveToFile('run.bat');
SetFileAttr('run.bat',true,false);
bfile.free;
............
WinExec('run.bat',0);

بهروز عباسی
پنج شنبه 20 بهمن 1390, 21:13 عصر
درود به شما دوست عزیز
شما با این کد میتونی در حال اجرا بودن یا نبودن برنامه رو چک کنی

function processExists(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeF ile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);

end;