DELPHI实现关机,兼容全部WINDOWS系统

{=======================================================================================================================
关闭Windows函数ExitWindowsEx(UINT uFlag,DWORD:dwReserved)说明:

控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等, ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数。如果Complile时提示EWX_XXXX未定义,那么请手动定义这几个常数,默认情况下是无需我们手动定义的。
const
EWX_FORCE=4; //关闭所有程序并以其他用户身份登录?(!!应为“强制执行否”吧!!)
EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式
EWX_REBOOT=2; //重新启动计算机
EWX_SHUTDOWN=1;//关闭计算机
EWX_POWEROFF=8;//切断电源
EWX_FORCEIFHUNG=$10;//不记得了,有谁好心查下MSDN
调用方法:
ExitWindowsEx(EWX_REBOOT,0); //重启计算机
ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN,0); //强行关机
不过博主经常听到有人说这一API只在Windows 95/98/98SE/Me下有效,而在Windows NT/2000/XP下无效。
其实这是不正确的,这一API在上述平台下均是有效的,只是我们在Windows NT/2000/XP平台下执行此函数之前,必须要获取得关机特权罢了,其实就算是Windows NT/2000/XP系统自身关机也必须要走这一流程的。
view plainprint?
获取关机特权函数如下:
procedure Get_Shutdown_Privilege; //获得用户关机特权,仅对Windows NT/2000/XP
var
rl: Cardinal;
hToken: Cardinal;
tkp: TOKEN_PRIVILEGES;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[

另一个关机API,InitiateSystemShutdown(PChar(Computer_Name),PChar(Hint_Msg),Time,Force,Reboot);在Windows NT/2000/XP平台下还会自动调用系统本身的关机提示窗口。
InitiateSystemShutdown(PChar(Computer_Name), PChar(Hint_Msg),Time,Force,Reboot);
//关机计算机名,关机提示信息,停留时长,是否强行关机,是否要重启
当我们把Computer_Name设为nil时,默认为本机,如 InitiateSystemshutdown(nil,nil,0,True,False);//强行关机

由于我们需要制作一个通用的关机程序,故要对当前的操作系统进行判断,这个比较简单,函数如下:
function GetOperatingSystem: string;//获取操作系统信息
var osVerInfo: TOSVersionInfo;
begin
Result :='';
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then
case osVerInfo.dwPlatformId of
VER_PLATFORM_WIN32_NT:
begin
Result := 'Windows NT/2000/XP'
end;
VER_PLATFORM_WIN32_WINDOWS:
begin
Result := 'Windows 95/98/98SE/Me';
end;
end;
end;

执行关机的主函数:
procedure ShutDownComputer;
begin
if GetOperatingSystem='Windows NT/2000/XP' then
begin
Get_Shutdown_Privilege;
//调用此函数会出现系统关机提示窗口,并允许用户取消关机动作
//InitiateSystemShutDown(nil,'关机提示:讨厌你所以关了你!',0,True,False);
ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG,0);
end else
begin
ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG,0);
end;
end;
=========================================================================================================================}

使用:

procedure TShutDownForm.btn_PowerOffClick(Sender:Object);
begin
ShutDownComputer;
end;

Posted in 软件开发 at September 7, 2015. by 傻猫 .    Views: 1776    No Comments

Windows 9真的要免费了?

微软会在本周三凌晨召开新版Windows的发布会,Windows 9的技术预览版可能提前放出,而最终版本要等到2015年春才会和我们正式见面。Windows 9免费是大势所趋首先,关于Windows 9是否免费,虽然微软印度尼西亚总裁安德里斯•迪亚特罗(Andreas Diantoro)近日称,Windows 8用户可免费升级至Windows 9,但是目前微软官方对此依然是三缄其口。不过,种种现实的状况在一步一步推动着Windows 9走向免费。

众所周知,鲍尔默时代的Vista系统市场反映平庸,而后辈Windows 7的出现才让微软重获市场和用户的信心。可是,2012年的Win8遇到了此前Windows Vista一样冷遇。此外,微软主流的Windows XP和Windows7都是旧版的老系统,前者服役13年,后者服役7年。微软急需一款新的操作系来捍卫自己在桌面霸主的地位,Windows 9的推出将是扭转外界对Windows看法的一个重要契机,而免费则是最好的加速剂。

另外,微软错过了移动操作系统的爆发期,而谷歌(微博)和苹果分别依靠Android和iOS迅速瓜分了移动市场。来自微软2014年8月的数据显示,微软旗下的PC、平板和智能手机等所有硬件设备的全球份额仅有14%,其中WP手机也仅有2.5%的份额。Windows 9的推出将会为硬件设备迎来发展的又一个契机。虽然现在微软的平板和智能手机的内核也走向了统一,但是在操作体验方面却是相互撕裂各自为政。所以,随着Windows 9的推出将迅速打通两者之间的“任督二脉”,开发者一次开发的应用和游戏将可以在整合后的Windows Phone和Windows RT两大平台上使用,这对微软来说意义重大。

查看更多内容...

Posted in 杂七杂八 at September 30, 2014. by 傻猫 .    Views: 2493    No Comments

Windows Phone 8 发布

今天微软刚刚在美国的旧金山完成了Windows Phone 8系统的发布会。发布会上除了最后鲍尔默出场将即将上市的新款诺基亚、三星、HTC的WP8设备作逐个介绍之外,这场发布会还解释了众多Windows Phone 8的新特性。

本场发布会离Windows Phone 8系统与我们首度见面已经相隔了4个月时间了,今天所展示的是一个相较上次更加成熟的Windows Phone系统。这款和上代系统相比拥有全新可自动制瓷砖大小首屏界面的Windows Phone 8保持了其一贯的Modern风格,与Android和iOS系统皆有较大差异。

新款体统提供对NFC近场通讯技术、多核心处理器以及可扩展内存的良好支持,将Windows Phone系统的运行效率和速度提升到新的台阶,真正与竞争对手站在同一起跑线。强大的应用市场、内置的Skype以及IE10都是我们先前就曾了解的内容。

查看更多内容...

Posted in 手机相关 at October 30, 2012. by 傻猫 .    Views: 2951    No Comments

nginx 1.0.0终于发布了

nginx(发音同engine x)是一款由俄罗斯程序员Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。起初是供俄国大型的门户网站及搜索引擎 Rambler(俄语:Рамблер)使用。此软件BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。

Changes with nginx 1.0.0 12 Apr 2011
*) Bugfix: a cache manager might hog CPU after reload. Thanks to Maxim Dounin.
*) Bugfix: an "image_filter crop" directive worked incorrectly coupled with an "image_filter rotate 180" directive.
*) Bugfix: a "satisfy any" directive disabled custom 401 error page.

下载地址:
linux:http://nginx.org/download/nginx-1.0.0.tar.gz
windows:http://nginx.org/download/nginx-1.0.0.zip

恭喜nginx到1.0了

Posted in Web开发 at April 12, 2011. by 傻猫 .    Views: 4247    No Comments

MSDN 正式公布简体中文版Windows 7

Windows 7 Ultimate (x86) - DVD (Chinese-Simplified)文件名 cn_windows_7_ultimate_x86_dvd_x15-65907.iso 邮寄日期 (UTC): 8/23/2009 10:16:24 PM SHA1: B589336602E3B7E134E222ED47FC94938B04354F ISO/CRC: E6FDF910

Windows 7 Ultimate (x64) - DVD (Chinese-Simplified)文件名 cn_windows_7_ultimate_x64_dvd_x15-66043.iso 邮寄日期 (UTC): 8/23/2009 10:16:25 PM SHA1: 4A98A2F1ED794425674D04A37B70B9763522B0D4 ISO/CRC: 05E9026C

Windows 7 Enterprise (x86) - DVD (Chinese-Simplified)
文件名 cn_windows_7_enterprise_x86_dvd_x15-70737.iso 邮寄日期 (UTC): 8/23/2009 10:15:32 PM SHA1: 50F2900D293C8DF63A9D23125AFEEA7662FF9E54 ISO/CRC: CEEE9884

查看更多内容...

Posted in 杂七杂八 at August 24, 2009. by 傻猫 .    Views: 5068    1 Comment

Windows XP SP4得到间接确认

早在2006年年中Windows XP SP3远未发布的时候,就有传闻说微软还会为这套经典操作系统推出第四个SP服务包,但此后就再也没有更多消息。在Windows XP RTM大限迫近的时候,ZDNet博客作者Mary-Jo Foley总结了多款Windows系统和Office软件的技术支持情况,其中就提到了Windows XP SP4。不过XP拥趸也不要太兴奋,这个终极升级包很可能要到五年后才会面世,届时应该早就是Windows 7(或者说SP1乃至SP2)的天下了。

2009年4月14日,这就是Windows XP Professional、Windows XP Home、Windows Server 2003 SP1、Office 2003主流支持结束的日子,之后微软只会免费为它们发布安全补丁。用户如果想继续得到微软的全部支持,就必须付费了,其中Windows XP Professional将持续到2014年4月8日,Office 2003则只到2012年8月4日为止。

不出意外的话,Windows Vista SP2和Office 2007 SP2两个升级服务包也有望在4月份发布。

以下就是各款Windows系统与Office软件的寿命期限:

Windows 2000:免费支持已止于2005年6月30日,付费支持将持续到2010年7月13日;不会再有SP5了。

Windows XP SP2:2010年7月13日退休。

Windows XP SP3:SP4发布两年后或2014年4月退休,具体取决于哪个先到。

Windows Vista Business:免费支持截至2012年4月10日,付费支持截至2017年4月11日。

Windows Vista SP1:SP2发布(预计4月)两年后退休,因此很可能是2011年4月份。

Office 2003 SP3:SP4发布两年后或2014年8月退休,具体取决于哪个先到。

Office 2007:免费支持截至2012年4月10日,付费支持截至2017年4月11日。

Office 2007 SP1:SP2发布(预计4月)一年后退休,可能是2010年4月份。

Windows Server 2008:免费支持截至2013年7月9日,付费支持截至2018年10月7日。

文/驱动之家

Posted in 杂七杂八 at March 27, 2009. by 傻猫 .    Views: 3411    No Comments

Windows 7时代64位版将成主流

微软内部人士日前向媒体透露,截至2008年底,美国境内的Vista用户中25%为64bit版本.由于DDR2内存的“白菜价”,很多用户都能够轻松搭建内存容量4GB以上的系统,推动了64位操作系统的普及.
微软认为,在64位处理器和操作系统推出多年后,走向普及的“质变转折点”已经到来.
负责Windows核心操作系统部门的微软高级副总裁Jon DeVaan向媒体表示:“从我们的观点来看,我们已经达到了64位普及从量变到质变的关键转折点.由于内存价格下降,美国有很多零售商采用推荐内存升级 的方式来提高利润率,这让更多的客户开始采用64bit操作系统,也让我们对64位系统的支持显得越发重要.”

由于内存寻址能力的限制,内存容量在4GB及以上的系统必须安装64位操作系统,否则将只能识别其中的3GB到3.5GB内存.尽管目前的PC 主流内存容量还未到4GB档次,但很多人已经开始“未雨绸缪”的提前安装64位操作系统.Windows在美国市场75%的销量来自于厂商预装,而OEM 厂商和零售商正是推动64位变革的积极力量.

微软近年来对64位操作系统的态度几乎是“免费”推广.如果用户购买了零售版Windows Vista,只需要支付订单处理和运送费用,就可以拿到免费的64bit版本.而Windows Vista Ultimate的零售盒装更是直接内置了32bit和64bit两张光盘.在很多品牌PC厂商的配置选项中,也开始提供低价甚至免费的64bit升级.

预计,Windows 7将是最后一个原生支持32bit的微软操作系统,此后所有的主流Windows系统都将原生运行在64bit环境下,并用兼容模式运行32bit程序.Windows Server 2008 R2则已经是一款64bit独占操作系统.

微软Windows客户通讯团队总监Chris Flores表示:“简单的说,64bit Windows Vista的增长速度比32bit快得多,随着零售商越来越多的推销64bit机型,这一增长速度还会越来越快.”

64bit操作系统面临的最后一个障碍只剩下驱动问题.随着越来越多的新产品提供64bit Vista驱动,而Windows 7能够兼容大量Vista驱动,这一问题也将逐步解决.Jon DeVaan承认,驱动问题是他们目前64bit支持工作的重中之重.

Posted in 杂七杂八 at February 1, 2009. by 傻猫 .    Views: 4460    1 Comment

Delphi集成Windows验证登录函数

The first and biggest of these restrictions is that on Windows NT and Windows 2000, the process that is calling LogonUser must have the SE_TCB_NAME privilege (in User Manager, this is the ""Act as part of the Operating System"" right). The SE_TCB_NAME privilege is very powerful and should not be granted to any arbitrary user just so that they can run an application that needs to validate credentials. The recommended method is to call LogonUser from a service that is running in the local system account, because the local system account already has the SE_TCB_NAME privilege.  

delphi代码
  1. function   VerifyWindowsUser(const   Machine,Username,Password:String):boolean;      
  2.   var   hToken:THandle;      
  3.   begin      
  4.     hToken:=0;      
  5.     Result:=LogonUser(PChar(UserName),PChar(Machine),PChar(Password),LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,hToken);      
  6.     if(hToken<>0)then      
  7.       CloseHandle(hToken);      
  8.   end;     
Posted in 软件开发 at October 17, 2007. by 傻猫 .    Views: 4251    No Comments