PDA

View Full Version : نحوه reset کردن کامپیوتر داخل دلفی پس از خروج



pooyeshpajooh
پنج شنبه 20 خرداد 1389, 10:06 صبح
یه برنامه کنترلی با دلفی دارم که همیشه با پورت کام ارتباط دارد
بعضی اوقات برنامه خود به خود بسته میشه
می خام هر بار که برنامه در اثر هر خطایی یا غیره بسته میشه سیستم کامپیوتر ریست بشه
(چون برنامه را در startup قرار دادم ودوباره اجرا خواهد شد)
چطوری باید کد نویسی کنم ؟
مرسی

Felony
پنج شنبه 20 خرداد 1389, 11:13 صبح
اگر برنامه برای خودتون هست که هیچ ولی اگر این برنامه قراره دست کاربر بیچاره بره شما اجازه این کار رو ندارید ... !!!

در کل اگر برنامه بر اثر خطا بسته میشه پس میشه خطا رو با بلوک Try ... Except کنترل کرد و در هنگام وقوع خطا سیستم رو ریست کرد ، اگر هم به دلایل نامعلوم بسته میشه ( برنامتون مشکل داره ) یک برنامه جدا بنویسید که همراه با برنامه به صورت مخفی یا سرویس اجرا بشه و وجود پروسه برنامه شما رو در لیست پروسه ها چک کنه و اگر برنامتون بسته شد دوباره اجراش کنه یا سیستم رو ریست کنه .

حسین شهریاری
پنج شنبه 20 خرداد 1389, 12:18 عصر
این کد سیستم را ریست میکنه.به هر شکلی صلاح میدونین ازش بهره ببرید.

WinExec(pchar('shutdown /r -t 0'),1);

pooyeshpajooh
پنج شنبه 20 خرداد 1389, 12:37 عصر
اگر برنامه برای خودتون هست که هیچ ولی اگر این برنامه قراره دست کاربر بیچاره بره شما اجازه این کار رو ندارید ... !!!
.



خوشبختانه هیچ کاربری با برنامه کار نمی کنه وبرنامه داره یه سخت افزار رو کنترل می کنه
من می خام هر وقت خطا داد ریست بشه و کنترل رو دوباره شروع کنه

Felony
پنج شنبه 20 خرداد 1389, 15:37 عصر
این کد سیستم را ریست میکنه.به هر شکلی صلاح میدونین ازش بهره ببرید.

WinExec(pchar('shutdown /r -t 0'),1);

تابع WinExec یک تابع منسوخ شده هست و در برنامه های فعلی نباید ازش ازش استفاده کنید ، دلیل وجود این تابع پشتیبانی از برنامه های قدیمی هست ( این تابع یادگار ویندوز 3.1 هست ) و جایگزین فعلی آن تابع SehllExecute از کتابخانه ShellAPI هست .

در ضمن برای ریست کردن سیستم به صورت زیر عمل کنید :
NTSetPrivilege('SeShutdownPrivilege', True);
ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0);

برای ریست کردن باید دسترسی این کار رو از سیستم عامل درخواست کنید ، قبلا یک یونیت برای این کار ( درخواست دسترسی ) نوشته بودم که براتون ضمیمه کردم ، DebugPrivilege رو به uses برنامتون اضافه کنید و با کد بالا سیستم رو ریست کنید .


خوشبختانه هیچ کاربری با برنامه کار نمی کنه وبرنامه داره یه سخت افزار رو کنترل می کنه
من می خام هر وقت خطا داد ریست بشه و کنترل رو دوباره شروع کنه
پس اگر کاربر خودتون هستید که ریش و قیچی دست خودتونه !

حسین شهریاری
پنج شنبه 20 خرداد 1389, 16:21 عصر
سلام

تابع WinExec یک تابع منسوخ شده هست و در برنامه های فعلی نباید ازش ازش استفاده کنید ، دلیل وجود این تابع پشتیبانی از برنامه های قدیمی هست ( این تابع یادگار ویندوز 3.1 هست ) و جایگزین فعلی آن تابع SehllExecute از کتابخانه ShellAPI هست .

آقا مجتبی عزیزم تابع WinExec قدیمی و منسوخ نیست!! اگه خاطر مبارکتون باشه توی پاسکال تابعی به نام Exec وجود داشت که یه فایل اجرایی را میتونستیم باهاش باز کنیم.بعد از اومدن توی ویندوز کلمه Win هم به همون تابع Exec اظافه گردید.
در ضمن این تابع جزو کتابخانه خود دلفی و یه تابع داخلی است و کاری با SehllExecute که یه تابع از ShellAPI نداره و فقط کارکردشون شبیه به هم هست و جایگزینی هم براش تعیین نشده.البته توابع زیادی هستند که توی دلفی وجود دارن ولی همکارشون توی ShellAPI هم هست.
در اصل این تابع یادگاری از پاسکال است.

vcldeveloper
پنج شنبه 20 خرداد 1389, 17:18 عصر
آقا مجتبی عزیزم تابع WinExec قدیمی و منسوخ نیست!! اگه خاطر مبارکتون باشه توی پاسکال تابعی به نام Exec وجود داشت که یه فایل اجرایی را میتونستیم باهاش باز کنیم.بعد از اومدن توی ویندوز کلمه Win هم به همون تابع Exec اظافه گردید.
در ضمن این تابع جزو کتابخانه خود دلفی و یه تابع داخلی است و کاری با SehllExecute که یه تابع از ShellAPI نداره و فقط کارکردشون شبیه به هم هست و جایگزینی هم براش تعیین نشده.البته توابع زیادی هستند که توی دلفی وجود دارن ولی همکارشون توی ShellAPI هم هست.WinExec یک تابع API ویندوز هست:
http://msdn.microsoft.com/en-us/library/ms687393%28VS.85%29.aspx

این تابع قدیمی هست، و مربوط میشه به زمان Windows 3.1 که 16 بیتی بود، فقط هم برای حفظ سازگاری با نسخه های گذشته هنوز وجود داره:

Note This function is provided only for compatibility with 16-bit Windows.

حسین شهریاری
پنج شنبه 20 خرداد 1389, 18:48 عصر
Note This function is provided only for compatibility with 16-bit Windows.
بله حق با شماست ممنون!