PDA

View Full Version : سوال: کد خاموشی موقت کامپیوتر



nsco_nsco
پنج شنبه 14 بهمن 1389, 00:22 صبح
سلام دوستان
یک سوال داشتم اگر یادتون باشه در ویندوز اکس پی قابلیتی داشتیم که می امدیم برای اینکه ویندوز ما همین حالت بماند با زدن اون دکمه در هنگام خاموشی اصطلاحا فر یز می کردیم و بعدش کامپیوتر به صورت کلی خاموش می شد و دفعه بعد بازدن دکمه روشنی سیستم ویندوز به همان صورتی ( مثلا 3 برنامه باز بود) که قبلا بود بالا می امد حالا من در ویندوز سون این قابلیت رو ندیدم ممنون می شوم اگر می دونید کدش برای دلفی چیست بهم بگید خیلی مهمه ممنون می شوم سریع جواب بدید. با تشکر از همه شما دوستان .

Touska
پنج شنبه 14 بهمن 1389, 09:38 صبح
منظور شما از Freeze همان Hibernate هست دیگه ، در ویندوز 7 هم هست ، حتی با یک دستور ساده CMD میشه اونو شبیه سازی کرد :

http://www.howtogeek.com/howto/7564/how-to-manage-hibernate-mode-in-windows-7/

nsco_nsco
پنج شنبه 14 بهمن 1389, 21:44 عصر
سلام ممنون از پاسختون
من امتحان کردم و به درستی انجام نداد اما من کد دلفی این رو لازم دارم د صورت امکان کد اون رو قرار دهید . :قلب::تشویق:

nsco_nsco
پنج شنبه 14 بهمن 1389, 22:12 عصر
سلام دوستان

این کد همین هایبرنت هست ببینید :



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
var
_SetSuspendState: function (Hibernate, ForceCritical, DisableWakeEvent: BOOL): BOOL
stdcall = nil;

function LinkAPI(const module, functionname: string): Pointer; forward;

function SetSuspendState(Hibernate, ForceCritical,
DisableWakeEvent: Boolean): Boolean;
begin
if not Assigned(_SetSuspendState) then
@_SetSuspendState := LinkAPI('POWRPROF.dll', 'SetSuspendState');
if Assigned(_SetSuspendState) then
Result := _SetSuspendState(Hibernate, ForceCritical,
DisableWakeEvent)
else
Result := False;
end;

function LinkAPI(const module, functionname: string): Pointer;
var
hLib: HMODULE;
begin
hLib := GetModulehandle(PChar(module));
if hLib = 0 then
hLib := LoadLibrary(PChar(module));
if hLib <> 0 then
Result := getProcAddress(hLib, PChar(functionname))
else
Result := nil;
end;

// Example Call:
// Beispielaufruf:


procedure TForm1.Button1Click(Sender: TObject);
begin
SetSuspendState(True, False, False);
end;

end.





اما این دستور کامپیوتر رو کامل خاموش نمی کنه که بعدش بیایم با زدن دکمه روشنی کامیپوتر بالا بیاد یعنی همان گونه مثلا 3 پوشه باز بوده ممنون می شوم راهنمایییکنید . با تشکر

AliReza Vafakhah
پنج شنبه 14 بهمن 1389, 23:44 عصر
این یک برنامه Auto Shutdown هست که آقای کشاورز نوشتن ، OpenSource هم میباشد.
تو سورس کدهایی خیلی زیبایی در رابطه با تغییر وضعیت سیستم همراه با توضیح است

http://vcldeveloper.com/products/products-freeware/auto-shutdown/

nsco_nsco
جمعه 15 بهمن 1389, 00:34 صبح
سلام ممنون از پاسختون اما

این رو هم تست کردم اما این اون چیزی که می خوام نیست ببینید اگر یادتون باشه تو اکسپی موقع شات دون می امدیم یک مدل شات دون می کردیم که کامپیوتر خاموش می شد ام (( زمانی که روشن می کردی مثلا هر نرم افزاری باز بود در زمان قبل از خاموشی مجدد روی صفحه همون طور می امد و می تونستی ادامه کار بدید )) العان که می بینم در سون این کار انجام نمیشه و باید بگم Hibernate نیز این کار رو نمی کنه و مانند استند بای عمل می کند لطفا یک کد برای این مهم بهم بدید و کمکم کنید با تشکر از همه شما دوستان

nsco_nsco
جمعه 15 بهمن 1389, 00:57 صبح
سلام نامش Sleep هست ممنون می شوم کد این رو بهم بدید با تشکر از همه شما.:خجالت:

nsco_nsco
جمعه 15 بهمن 1389, 19:22 عصر
سلام دوستان کسی نیست یه کمکی به ما بکنه خیلی واجب هست ممنون می شم کمکم کنید :قلب:

nsco_nsco
شنبه 16 بهمن 1389, 00:39 صبح
سلام دوستان یه مطالبی در مورد اسلیپ پیدا کردم گفتم بخونید و شاید کمکم کنید :

یا خوابیدن
برای سریع بوت کردن و خاموش کردن سیستم بکار میره مخصوصا در نوت بوک کارایی بالایی داره. سیستمی که قرار است 15 یا 20 دقیقه بی جهت رها بشه معمولا به وضعیت sleep فرو میبرند. ولی دلیلش چی هست که سریع اینکار را انجام میده و مثل shutdown کند نیست بخاطر حافظه سیستم است که بیدار است. شما وقتی shutdown میکنید تمام سیستم خاموش میشه و درواقع برق کامل قطع و انگار مرده ولی در وضعیت sleep نمرده و فقط خوبیده ولی حافظه یا مغز اون هنوز نیمه جان هست. البته تعریف استانداردی براش وجود نداره ولی standby یا sleep هرچی که اسمش را بگذارید، ACPI دوراه اصلی برای اون ارائه میکنه که البته راههای مختلف هم وجود داره.
1- راهی که کمترین اثر را داره power -on-suspend یا مخففش pos که در ACPI به عنوان S1 شناخته میشه. اگر در بایوس مادربورد چرخ زده باشید آنرا حتما دیدید. این حالت انرژی برق منتهی به قطعات با کابل های S1 از قبیل پردازشگر را کاهش میدهد ولی منبع تغذیه سیستم و فن خنک کننده سیستم همچنان روشن است. قطعاتی که از s1 پشتیبانی نمیکنند خاموش میشوند ولی حافظه همچنان روشن است.
2- شدیدترین حالت s3 که suspend-to-ram هم میگن در این حالت تقریبا تمام مصرف توان قطع میشه و فقط برق مربوط به حافظه باقی میمونه که چیزی در حدود 5 ولت است تا چیپ حافظه را زنده نگهداره برای نگهداری فایلهای داخل اون. در این حالت سیستم کاملا shutdown بنظر میاد و چیزی در اون روشن نیست.
این دو حالت دلیلی است برای تفاوت sleep روی کامپیوتر شما و دوستتون که یکی وقتی به خواب میره کاملا خاموش بنظر میاد و یکی هم خوابیده ولی روشن بنظر میاد و فنها مشغول کار هستند.
sleep اولین پیشرفت برای ویندوز بود در این زمینه که سریع خاموش و روشن میشد و سیستم آماده بکار بود ولی یکی از مشکلاتش برق جاری درون سیستم است. در اول همین مطلب گفتم که هنگامیکه ویستا را power off میکردید اگر در حین خاموشی برق میرفت اونوقت همه چیز بهم میخورد و سیستم از نوع راه اندازی میشد و سریع بوت نمیشد.
حالا که برق مصرف میشه برای لبتاپ زیاد مناسب نیست شاید تا چند ساعت کار با این لبتاپ نداشتیم و این درحال مصرف برق است. حالا گزینه جدیدی به نام hibernate اومده که البته جدید نیست و از ویندوز 98 اومد ولی خیلی خوب در ویستا پیشرفت کرد.
Hibernate چکاری انجام میده؟
زیاد پیچیده نیست همون اطلاعاتی که در sleep روی رم ذخیره میشه اینبار روی هارد ذخیره میشه. sleep زیاد و طولانی مدت میتونه برای رم خطرناک باشه و در عمر اون تاثیر بذاره ولی hibernate تاثیری در عمر سیستم نداره. این در جواب بعضی از دوستان در فروم سخت افزار گفتم که فکر میکردند هایبرنیت زیادی در عمر هارد تاثیر داره در صورتیکه در hibernate هارد هم کاملا خاموش است و برقی نداره و هیچ تاثیری هم براش نداره.
این حالت تحت عنوان S4 شناخته میشه. چیزی را که میدونم نمیدونید این است که در اوایل که hibernate اومده یه پارتیشن خاص براش در نظر گرفته میشد و اگه کاربر پارتیشن را پاک میکرد هایبرنیت هم نابود میشد. اما hibernate امروزی اینطوری نیست و یه فایل سیستمی مخفی بنام hiberfil.sys است که آنرا در خود نگه میداره. بدلیل اینکه در این حالت باید اطلاعات از رم خارج شده و روی هارد بروند کمی طولانی تر از sleep عملیات انجام میشه بخصوص اگر فایل swap شما بزرگ باشد یعنی دستی بزرگش کرده باشید.
شما گزینه hibernate را در xp دیدید و فکر میکنید از اونجا اومده ولی بار اول همینطور که گفتم از ویندوز 98 اومد که نامش suspend-to-disk یود و زیاد مورد استفاده کاربران هم قرار نگرفت چون احتیاج به یک پارتیشن اختصاصی داشت.
hibernate با درایوهایی که با fat32 فرمت شدند مشکل داره بخاطر همین امکان داره در ویندوز 2000 و xp به مشکل بخورید. این یکی از چند 10 دلیلی است که ویندوز ویستا و 7 فقط روی ntfs نصب میشوند چون جلوی ایرادات را بگیرند. حالا که اسم ntfs اومد بگم هنوز مطالب را راجع به ntfs ویستا کامل نکردم و در آینده باز هم درباره اش خواهم نوشت.

یه کدی هم پیدا کردم :
SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MO NITORPOWER,2);
اما کامل کامپیوتر خاموش نمیشه لطفا کمکم کنید .

nsco_nsco
شنبه 16 بهمن 1389, 18:29 عصر
سلام دوستان

خواهش می کنم کمک کنید برای دستور standby دستتون درد نکنه

nsco_nsco
شنبه 16 بهمن 1389, 18:41 عصر
سلام دوستان
این کد مانیتور رو به حالت استند بای میبره :


procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MO NITORPOWER,2);
end;



اما دوستان کدی برای استند بای خود سیستم پیدا نکردم همون اسلیپ در ویندوز سون ممنون می شوم راهنماییم کنید با تشکر (( هر چه سریع تر انگشتم لای درهست ))

nsco_nsco
شنبه 16 بهمن 1389, 22:39 عصر
سلام دوستان یعنی هیچ کدوم از دوستان جواب این سوال رو نمیدونه !!!