ネットワーク接続が中断されたシャットダウンの実装(デルファイ)

さて、この機能は難しいことではありません、いくつかの機能を使用することです。それは私にちょうどデルファイ数日の学習を、完了するまでに数時間を要し、常にAPI関数の使用を探して、後でシャットダウン特典カードで..が消去/ 。..

InternetGetConnectedState(nil, 0) //这个函数需要调用winInet头文件,此函数返回本地系统的网络连接状态。
 
 

関数のパラメータと戻り値

BOOL InternetGetConnectedState(

  __out LPDWORD lpdwFlags、
  DWORD dwReserved __in
  );

 lpdwFlags [出]  

-------------------------------------------------- ----------------- --------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------
それを指す 変数 の記述を受け取る変数に接続され、。関数がFLASE返すとき、このパラメータは、まだ有効フラグを返すことができます。パラメータは、次の値の一つ以上であってもよいです。
意味
INTERNET_CONNECTION_CONFIGURED0x40 ローカルシステムは、インターネットへの有効な接続を持っていますが、それは可能性がありますか、現在接続されていない可能性があります。
INTERNET_CONNECTION_LANが0x02 ローカルシステムは、インターネットに接続するローカルエリアネットワークを使用しています。
INTERNET_CONNECTION_MODEM0x01 ローカルシステムは、インターネットに接続するモデムを使用しています。
INTERNET_CONNECTION_MODEM_BUSY0x08 現在使用されていません。
INTERNET_CONNECTION_OFFLINEは0x20 ローカルシステムがオフラインモードです。
INTERNET_CONNECTION_PROXY0x04 ローカルシステムは、インターネットに接続するためにプロキシサーバーを使用しています。
INTERNET_RAS_INSTALLED0x10 ローカルシステムは、RASがインストールされています。
   dwReserved [中]  
リテンション。それはゼロでなければなりません。

返却値

  モデムまたはLAN接続がある場合はそこにはインターネット接続がされていないか、現在の接続のすべてが活性化されていない、falseを返すとき、それは、TRUEを返します。
  関数がfalseを返した場合、プログラムが呼び出すことができるのGetLastErrorを受信するエラーコードを

-------------------------------------------------- ----------------- --------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------

関数がTRUEを返した場合、少なくとも接続が有効であることを示します。これは、特定のも、有効な接続であることを保証するものではありませんホスト常にAPI接続を使用してサーバーへのリターンを確認する必要があり、エラーコードを、接続状態を決定するために使用されます。使用InternetCheckConnectionの機能は、ホストが指定した接続の確立に接続されたか否かを判断することができます。

  また、それは戻り値はTRUEアクティブなモデム接続やLAN接続がアクティブであることを示しています。接続状態にFALSEないモデムとLANの代表。それはFALSEを返した場合、INTERNET_CONNECTION_CONFIGUREDアイデンティティは自動ダイヤルが「常にダイヤル」に設定されていることを示すために設定されますが、現在はアクティブではありませんされます。自動ダイヤルが設定されていない場合、この関数はFALSEを返します。
  他の追加機能のWinInet APIとして、この関数はのDLLMainまたはグローバルからのものではないコンストラクタデストラクタセキュアコール。

注意を払います

  WinINet不支持实现服务器。另外,它也不应该用来作为服务。实现服务器或者服务可用Microsoft Windows HTTP Services (WinHTTP)

---------------------------------------------------------------------------------- 下面是对窗口进行提权(SE_SHUTDOWN_NAME )关机权限---------------------------------------------------------------

var
  hToken:Thandle;
  tp:TOKEN_PRIVILEGES;
  buf:Cardinal;
  aLuid:Int64;
begin
  OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,hToken);
  tp.PrivilegeCount:=1;
  LookupPrivilegeValue(nil,'SeShutdownPrivilege',aLuid);
  tp.Privileges[0].Luid:=aLuid;
  tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken,false,tp,SizeOf(tp),nil,buf);
  CloseHandle(hToken);
end;

代码也是我复制过来,以后有时间在解释一下吧!!

-----------------------------------------------------------------------------------------------这个是关机函数ExitWindowsEx---------------------------------------------------------------------------------------------

参数

ExitWindowsEX()函数用来退出、重启或注销系统。

  函数原型:
  BOOL ExitWindowsEx(
  UINT uFlags, // 关闭参数
  DWORD dwReserved // 系统保留,一般取0
  );



参数uFlag

  参数:uFlags
  指定关闭的类型。此参数必须有下列值的组合:

EWX_FORCE

  EWX_FORCE
  强制终止进程。当此标志设置,Windows不会发送消息WM_QUERYENDSESSION和WM_ENDSESSION的消息给目前在系统中运行的程序。这可能会导致应用程序丢失数据。因此,你应该只在紧急情况下使用此标志。

EWX_LOGOFF

  EWX_LOGOFF
  关闭所有进程,然后注销用户。

EWX_POWEROFF

  EWX_POWEROFF
  关闭系统并关闭电源。该系统必须支持断电。
  Windows要求:
  Windows NT中调用进程必须有 SE_SHUTDOWN_NAME 特权。
  Windows 9X中:可以直接调用。

EWX_REBOOT

  EWX_REBOOT
  关闭系统,然后重新启动系统。
  Windows要求:
  Windows NT中:调用进程必须有SE_SHUTDOWN_NAME特权。
  Windows 9X中:可以直接调用。

EWX_SHUTDOWN

  EWX_SHUTDOWN
  关闭系统,安全地关闭电源。所有文件缓冲区已经刷新到磁盘上,所有正在运行的进程已经停止。
  Windows要求:
  Windows NT中:调用进程必须有SE_SHUTDOWN_NAME特权。
  Windows 9X中:可以直接调用。

参数dwReserved

  参数:dwReserved
  保留,这参数被忽略。一般取0。
  返回值
  如果函数成功,返回值为非零。
  如果函数失败,返回值是零。想获得更多 错误信息 ,请调用GetLastError函数。

编辑本段备注

  ExitWindowsEx函数返回后,启动了关闭。关闭或注销。
  在关机或登录操作中,应用程序在允许关闭的时间具体数额内回应关机请求。如果时间到期时,Windows会显示一个对话框,允许用户强行关闭应用程序:关闭、重试,或取消关机要求。如果存在EWX_FORCE指定值,Windows会关闭应用程序而不显示该对话框。
  Windows NT中:关闭或重新启动系统,调用进程必须使用AdjustTokenPrivileges函数使SE_SHUTDOWN_NAME特权。Windows 95中:安全特权,不支持或需要。


おすすめ

転載: blog.csdn.net/showmessage0804/article/details/7952581