هر كي API كار كرده بياد تو !

hamed_h

Member
سلام
سوال من در مورد نحوه كار كردن با يكي از توابع API هست .
تابع ExitWindowsEX
باهاش تونستم LogOff كنم . اما Restart , ShutDown رو نتونستم .
ممنون ميشم اگه راهنماييم كنين . در ضمن كسايي هم كه دلفي كار مي كنن شايد بدونن كه
اين تابع windows هستش .
:wink:
 

CenoByte

Member
سلام خسته نباشيد اينم يك راهنمايي كامل
فقط توجه داشته باشيد كه اي پي آي ها در ويندوز هاي مختلف فرق ميكنند.
The ExitWindowsEx function either logs off, shuts down, or shuts down and restarts the system. [align=left:7b45fbd3c6][align=justify][align=right][align=left][align=left][align=left]

BOOL ExitWindowsEx(

UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);


Parameters

uFlags

Specifies the type of shutdown. This parameter must be some combination of the following values:

Value Meaning
EWX_FORCE Forces processes to terminate. When this flag is set, Windows does not send the messages WM_QUERYENDSESSION and WM_ENDSESSION to the applications currently running in the system. This can cause the applications to lose data. Therefore, you should only use this flag in an emergency.
EWX_LOGOFF Shuts down all processes running in the security context of the process that called the ExitWindowsEx function. Then it logs the user off.
EWX_POWEROFF Shuts down the system and turns off the power. The system must support the power-off feature.Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section. Windows 95: Security privileges are not supported or required.
EWX_REBOOT Shuts down the system and then restarts the system. Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section. Windows 95: Security privileges are not supported or required.
EWX_SHUTDOWN Shuts down the system to a point at which it is safe to turn off the power. All file buffers have been flushed to disk, and all running processes have stopped. Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section. Windows 95: Security privileges are not supported or required.


dwReserved

Reserved; this parameter is ignored.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The ExitWindowsEx function returns as soon as it has initiated the shutdown. The shutdown or logoff then proceeds asynchronously.
During a shutdown or log-off operation, applications that are shut down are allowed a specific amount of time to respond to the shutdown request. If the time expires, Windows displays a dialog box that allows the user to forcibly shut down the application, to retry the shutdown, or to cancel the shutdown request. If the EWX_FORCE value is specified, Windows always forces applications to close and does not display the dialog box.

The ExitWindowsEx function sends a separate notification message, CTRL_SHUTDOWN_EVENT or CTRL_LOGOFF_EVENT as the situation warrants, to console processes. A console process routes these messages to its HandlerRoutine functions, which are added and removed by calls to the SetConsoleCtrlHandler function. ExitWindowsEx sends these notification messages asynchronously; thus, an application cannot assume that the console notification messages have been handled when a call to ExitWindowsEx returns.

Windows NT: To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information about security privileges, see Privileges.
Windows 95: Security privileges are not supported or required.[/align:7b45fbd3c6][/align][/align][/align][/align][/align]
 

hamed_h

Member
سلام cenobyte عزيز
مي دوني من همه اين ارگومانها رو امتحان كردم
اما فقط logoff جواب داده .
در ضمن اگه اسم و نويسنده اين كتاب رو بگي ممنون ميشم
 

hamed_h

Member
راستي يه اشتباهي هم شده
اين تابع توي كتلبخانه windows از دلفي هستش .يادم رفته بود بالا بنويسم
 

Babak Sateli

Active Member
دوست من براي Shutdown ، Logoff يا Reboot كردن ويندوز مي توانيد از اين دستور استفاده كنيد :

کد:
function MyExitWindows(RebootParam: Longword): Boolean;
var
  TTokenHd: THandle;
  TTokenPvg: TTokenPrivileges;
  cbtpPrevious: DWORD;
  rTTokenPvg: TTokenPrivileges;
  pcbtpPreviousRequired: DWORD;
  tpResult: Boolean;
const
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
    tpResult := OpenProcessToken(GetCurrentProcess(),
      TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
      TTokenHd);
    if tpResult then
    begin
      tpResult := LookupPrivilegeValue(nil,
                                       SE_SHUTDOWN_NAME,
                                       TTokenPvg.Privileges[0].Luid);
      TTokenPvg.PrivilegeCount := 1;
      TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      cbtpPrevious := SizeOf(rTTokenPvg);
      pcbtpPreviousRequired := 0;
      if tpResult then
        Windows.AdjustTokenPrivileges(TTokenHd,
                                      False,
                                      TTokenPvg,
                                      cbtpPrevious,
                                      rTTokenPvg,
                                      pcbtpPreviousRequired);
    end;
  end;
  Result := ExitWindowsEx(RebootParam, 0);
end;

به طور مثال براي shutdown كردن ويندوز مي توانيد به اين صورت عمل كنيد :

کد:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyExitWindows(EWX_POWEROFF or EWX_FORCE);
end;

يا براي Reboot كردن آن به اين صورت :

کد:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyExitWindows(EWX_REBOOT or EWX_FORCE);
end;

و در انتها يادآوري مي كنم پارامترهاي اين دستور به اين صورت هستند :

کد:
EWX_LOGOFF 
EWX_POWEROFF 
EWX_REBOOT 
EWX_SHUTDOWN 
EWX_FORCE 
EWX_FORCEIFHUNG

البته راه ديگري هم براي اين كار وجود دارد كه استفاده از Console Window هست اما راه بالا در تمامي نسخه هاي ويندوز كار مي كند. من به دلايلي نمي توانم درباره دلفي بيشتر بحث كنم اما فكر كردم شايد اين كد در كار شما كمك بكند.

موفق باشيد
 

CenoByte

Member
به به آقا بابك ....باز هم مثل هميشه جواب هاي كوتاه - كامل - كار راه انداز ....
بسيار ممنون از پاسخ كامل و جامع شما.
آقا ما از اين كامپوننت مورف دلفي 5 شما خيلي خيلي حال كرديم.
موفق و پيروز باشيد.
 

Babak Sateli

Active Member
ممنونم CenoByte جان
اون رو خیلی سالهای پیش نوشتم ... یادش بخیر.
اما هنوز هم کاربر خوبی داره ... من عاشق گرافیک
هستم و شاید هر چی کامپوننت از من پیدا کنی به
یک نحوی به گرافیک بر می گرده ...
به هر حال لطف کردی.
موفق باشی
 

hamed_h

Member
بابا اي ول
دم هر دوتاتون گرم
بايد كمي باهاش كار كنم . چون شما به زبان دلفي نوشتي . اما من vb.net كار مي كنم .
و اينكه من فقط توي xp نتونستم اينو بكار ببندم . اونم
به خاطر همون دليلي هست كه cenobyte توي متنش گذاشته بود .
به هرحال از هر دوتاي شما تشكر مي كنم . خيلي مفيد بود .
 

جدیدترین ارسال ها

بالا