posted @ 2010-08-18 09:40 要每天开心 阅读(48) 评论(0) 编辑
posted @ 2010-08-18 09:40 要每天开心 阅读(48) 评论(0) 编辑
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
|
//防止页面多次刷新页面执行 for (int i = 0; i < all; i++) //根据input的Name属性,找到提交按钮并执行动作 |
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
posted @ 2010-05-19 17:13 要每天开心 阅读(995) 评论(0) 编辑
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
去掉边框
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
实现最大最小关闭
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnMin_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
private void btnMax_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
}
else
{
this.FormBorderStyle = FormBorderStyle.None;
this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
}
}
因为无边框后,winform无法拖动,实现拖动
-----首先在类内创建两个成员变量
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
///---------------添加三个关于鼠标的事件
private void form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight -
SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
}
private void form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X, mouseOffset.Y);
Location = mousePos;
}
}
private void form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (result == DialogResult.Yes)
{
e.Cancel = false;
Application.Exit();
}
else
{
e.Cancel = true;
this.Hide();
this.Visible = false;
}
}
private void ConExit_Click(object sender, EventArgs e)
{
result=MessageBox.Show("确认退出系统?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
Application.Exit();
}
【hbxtlhx】:
你一定要在如下的方法里添加参数来标识是不是应该真的退出程序:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!this.m_allowExit)
{
this.WindowState = FormWindowState.Minimized;
e.Cancel = true;
}
}
然后在弹出的菜单的Click事件里设置这个this.m_allowExit=true;
这样窗口就会顺利的关闭了.
【txwd0033】:
Application.Exit(true);行不?
如果不行的话设置一个变量,在formClosing中根据变量的值来设置e。Cancel的值
【hbxtlhx】:
云南特产
健康论坛
创业论坛
淘宝客
低空飞行
网页目录
在程序开始的时候设置this.m_allowExit=false,只有在菜单的退出事件代码里设置这个this.m_allowExit=true;就可以了.具体看你的思路了.
【lxcnn】:
可以加个全局变量判断一下是由哪里触发Closing事件,如果是关闭按钮就最小化,是右键菜单就关闭
【liutaoyue】:
/// <summary>
/// 重写窗体关闭事件
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
{
this.Hide();
return;
}
base.WndProc (ref m);
}
【bejon】:
点x和使用菜单关闭程序执行不同程序
你只要在菜单那多设一个变量加以区分就OK了
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
posted @ 2010-05-19 17:07 要每天开心 阅读(1780) 评论(0) 编辑
|
c# winform最小化到托盘,也就是最小化到右下角,其实很简单,winform中有专门的控件。 下面是完整的代码,没太多需要解释的。 先在winform中添加notifyIcon控件,然后激活相应事件,添加代码。因为屏蔽了关闭窗体事件,可以设定一个全局变量bool变量来分辨是哪里引起的close事件。 //设置全局变量bool closeTag = true; //最小化 } |
posted @ 2010-05-19 17:06 要每天开心 阅读(883) 评论(1) 编辑
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
在用Visual C#动态创建组件的时候,要涉及到二种数据类型变量的转换,这二种类型变量就是实值类型(Value Type)变量和参考类型(Reference Type)变量,而这种转换过程在Visual C#中被称为Boxing (装箱)和Unboxing (出箱)。其中把实值类型变量转换成参考类型变量就是Boxing (装箱);把参考类型变量转换成实值类型变量就是Unboxing (出箱)。那么什么是实值类型,说的简单些,就是我们平常使用的整型、布尔型、枚举型等,这些类型的变量就是实值类型变量了;所谓参考类型,在Visual C#中指的就是Object、Class、Interface、Delegate、String、Array等,他和实值类型最主要的不同之处就是,参考类型变量存放的是指向实体对象的指针,而实值类型变量却是实实在在地实体对象。在本文介绍的程序中,主要涉及的是出箱。具体的处理方法,在下面有着具体介绍。
二. 程序设计中的关键步骤以及解决方法:
文中软件主要功能是用通过窗体上的二个按钮来创建二个不同类型的WinForm组件--Button组件和TextBox组件,并在创建的同时为每一个组件的属性赋值,给每一个创建的组件也创建了事件。
(1).如何在窗体上创建Button组件:
其实用Visual C#创建一个组件是十分方便的,只用下列二行语句就可以完成了:
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
Button myButton = new Button ( ) ;
//在窗体中显示此按钮
this.Controls.Add ( myButton ) ;
但此时创建的这个Button组件没有任何属性,并且也没有任何事件,在本文中介绍的程序中创建的Button组件,不仅有属性也有事件,下列语句就是本文程序创建Button组件源代码:
//按钮数量计算器在每次按钮按动后加"1"
counter += 1 ;
//对要产生的按钮的纵坐标的相对位置是前一个产生按钮的相对位置的纵坐标加"3"
locY += this.btnAdd.Height + 3 ;
//创建一个新的Button组件
Button myButton = new Button ( ) ;
//设定他的名称和Text属性,以及产生的相对位置
myButton.Name = "Button " + counter ;
myButton.Text = "按钮 " + counter ;
myButton.Location = new Point ( btnAdd.Location.X , locY ) ;
//为产生的新的Button组件设定事件,本文中为产生的按钮设定了三个事件
myButton.MouseEnter += new System.EventHandler ( this.btn_MouseEnter ) ;
myButton.MouseLeave += new System.EventHandler ( this.btn_MouseLeave ) ;
myButton.Click += new System.EventHandler ( this.btn_Click ) ;
//在窗体中显示此按钮
this.Controls.Add ( myButton ) ;
程序不仅为每一个组件的属性都赋值,而且为每一个组件都创建了三个事件。细心的读者可能已经注意到,程序为每一个组件创建的事件的名称都是一样的。这样就有一个问题,如何在这一样的事件中,识别到底是哪个Button组件触发了事件。
(2).确定是哪个组件触发了事件:
由于程序中为每一个创建的Button组件的事件都是一样的,要想正确处理这些组件的事件,就需要在事件触发的程序中判断到底是哪个组件触发了这个事件。这就需要用到上面所提出的装箱和出箱。我们知道Sender对象是一个参考类型变量,他存放的是指向触发当前事件实体对象的指针。要把他给转换成实值对象类型,通过下列语句就可以确定是哪个组件触发了当前事件:
private void btn_MouseEnter ( object sender , System.EventArgs e )
{
//出箱
Button currentButton = ( Button ) sender ;
//设定按钮的背景色
currentButton.BackColor = Color.Red ;
}
其他事件可以仿照此事件的处理过程来处理。
(3). 如何在窗体上创建TextBox组件:
创建TextBox组件的过程和创建Button组件过程相类似,只是在创建的组件类型上面有一点区别,具体实现语句如下:
//文本框数量计算器在每次按钮按动后加"1"
counter01 += 1 ;
//对要产生的文本框的纵坐标的相对位置是前一个产生按钮的相对位置的纵坐标加"3
locY1 += this.txtAdd.Height + 3 ;
//创建一个新的TextBox组件
TextBox myBox = new TextBox ( ) ;
//设定他的名称和Text属性,以及产生的位置
myBox.Name = "TextBox " + counter01 ;
myBox.Text = "文本框 " + counter01 ;
myBox.Location = new Point ( txtAdd.Location.X , locY1 ) ;
//为产生的新的TextBox组件设定事件,本文中为产生的文本框设定了一个事件
myBox.Click += new System.EventHandler ( this.btn_Click ) ;
//在窗体中显示此文本框
this.Controls.Add ( myBox ) ;
此时细心的读者又会发现,为每一个TextBox组件创建Click事件和为Button组件创建的Click事件也是一样的,这样在Click事件中不仅要判断是哪个组件触发了事件,还要判断是那种类型的组件触发了事件,下面语句是实现这些判断地具体方法:
private void btn_Click ( object sender , System.EventArgs e )
{
if ( sender.GetType ( ) == typeof ( Button ) )
{
Button control = ( Button ) sender ;
MessageBox.Show ( control.Text + "被按动了!");
}
else
{
TextBox control = ( TextBox ) sender ;
MessageBox.Show ( control.Text + "被按动了!" ) ;
}
}
当然如果你也可以单独为TextBox组件创建Click事件。此时创建的事件语句可改为:
myBox.Click += new System.EventHandler ( this.txt _Click ) ;
下面是实现txt _Click ( )事件的程序代码:
private void txt_Click ( object sender , System.EventArgs e )
{
TextBox currentButton = ( TextBox ) sender ;
MessageBox.Show ( currentButton.Text + "被按动了!");
}
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
posted @ 2010-05-19 17:03 要每天开心 阅读(750) 评论(0) 编辑
Net已经成为许多软件公司的选择,而.Net自定义WinForm界面控件,也成为编程的热点,越来越多的程序员会开发自己需要的自定义界面控件.小作坊网介绍了多种自定义的界面控件,基本了包括了日常所需的各种基本控件,介绍的自定义控件,都对原有的界面控件作了扩展,使之更适用了系统或更美观.
下面作一个小结:
.Net自定义控件之WinForm的经典OutlookBar
http://www.rcomponent.com/News/DotNetUserInterface/20080201073632383.html
主要介绍一个样子与经典Outlook的导航栏差不多的自定义控件,因为Outlook的导航栏使用比较广泛,样子也比较大方,所以,很多程序员希望得到这一款的自定义控件.
.Net自定义WinForm控件之滚动栏ScrollBar
http://www.rcomponent.com/News/DotNetUserInterface/20080203074004385.html
介绍一个功能类型Html中Marquee的控件,它的内容是滚动显示的,与Foxmail的滚动显示比较相似,也比较生动有趣.
DotNet自定义WinForm控件之PickBox控件
http://www.rcomponent.com/News/DotNetUserInterface/20080207020222390.html
介绍一个自定义的程序运行时的选择控件,可以实现修改大小和拖动的功能.
.Net(C#)的WinForm自定义控件之GroupBox
http://www.rcomponent.com/News/DotNetUserInterface/20080208095730391.html
介绍一个样子十分美观的GroupBox自定义控件,继承UserControl的控件,是完整地将GroupBox控件重做一次,加入了许多美工的原素.
.Net(C#)自定义WinForm控件之FontComboBox
http://www.rcomponent.com/News/DotNetUserInterface/20080209014905392.html
介绍一个选择字体类型(如宋体,隶书等)的自定义控件,是一个继承ComboBox,并有大量扩展的控件.
.Net(C#)自定义WinForm控件之Message Balloon
http://www.rcomponent.com/News/DotNetUserInterface/20080210062156393.html
介绍一个新颖的ToolTip自定义控件,提供了时间设置和关闭的按钮.
.Net(C#)自定义WinForm控件之BalloonWindow
http://www.rcomponent.com/News/DotNetUserInterface/20080211042334394.html
介绍一个将ToolTip做成Form的自定义控件,其实质是Form,那,当然,作为一个Form,它可以实现很多的功能,当然可以加入按钮和文本框等功能了.
.Net(C#)自定义WinForm控件之BalloonHelp
http://www.rcomponent.com/News/DotNetUserInterface/20080212095206396.html
介绍一个利用BalloonWindow做扩展的ToolTip控件,其继承了BalloonWindow,并重写了大量的接口和方法,使之拥有了ToolTip的轻巧和Form的功能强大.
.Net(C#)自定义WinForm控件之CheckBox
http://www.rcomponent.com/News/DotNetUserInterface/20080213071311398.html
介绍一个CheckBox的自定义控件,继承自标准的CheckBox,原理是在原有的CheckBox上面增加一层图片,以完全覆盖旧CheckBox的样子,达到美观的效果.
.Net(C#)自定义WinForm控件之RadioButton
http://www.rcomponent.com/News/DotNetUserInterface/20080214081333399.html
介绍一个RadioButton 的自定义控件,继承自标准的RadioButton ,原理是在原有的RadioButton 上面增加一层图片,以完全覆盖旧RadioButton的样子,达到美观的效果.
.Net(C#)自定义WinForm控件之Button
http://www.rcomponent.com/News/DotNetUserInterface/20080215090628400.html
介绍一个继承自标准Button的自定义控件,其华丽的外观和优美的渐变效果,会深深打动每个用户,这是一个Profession级别的自定义控件.
.Net(C#)自定义WinForm控件之Chart Control
http://www.rcomponent.com/News/DotNetUserInterface/20080216035233401.html
介绍纯.Net语言编写的自定义Chart控件,可以显示线图,通过对线图的每个部件的描绘和重写OnPaint事件,实现一个功能良好的图形控件.
.Net(C#)自定义WinForm控件之MdiClientControl
http://www.rcomponent.com/News/DotNetUserInterface/20080217053005403.html
介绍一个可以去除MdiParentForm边框的控件,因为作为MdiParent的Form,它的Mdi区域在默认情况下,边框BorderStyle是使用3D的,背景色是使用普通的系统定义色,有了MdiClientControl就可以改变Mdi区域性的边框的形状和背景色的颜色,甚至还可以设计背景图.
.Net(C#)自定义WinForm控件之FlatTabControl
http://www.rcomponent.com/News/DotNetUserInterface/20080218015302405.html
介绍一个TabControl控件,系统默认使用的TabControl是一个边框(BorderStyle)为3D的样子,这样是比较土气的,利用FlatTabControl的定义,可以将TabPage变成Flat形状,以这一点基础,你可以定义更加强大的功能,如过渡色,鼠标悬浮色,鼠标点击色等等。
.Net(C#)自定义WinForm控件之屏幕捕捉(Teboscreen)
http://www.rcomponent.com/News/DotNetUserInterface/20080220010644407.html
介绍一个屏幕捕捉的功能,使用纯.Net的代码实现屏幕捕捉,这是比较吸引人的,而代码的简单,就更加的吸引人,因为.Net本来就支持这样。
DotNet(C#)自定义运行时窗体设计器Runtime FormDesigner
http://www.rcomponent.com/News/DotNetUserInterface/20080221013104408.html
介绍一个.Net(C#)的窗体运行时设计器,Runtime FormDesigner,设计一下,你的程序可以在运行时,像VisualStudio 2005一样增加控件和设计属性,这是多少强大的功能。
DotNet(C#)自定义WinForm控件之XPPanel
http://www.rcomponent.com/News/DotNetUserInterface/20080225082607414.html
介绍一个这样的功能,“文件夹中显示常见任务”的功能,也就是点击,文件夹选项-常规-任务所见过的内容,是一个导航栏式的服务,你可以像使用Xp操作系统一样,设置这个控件显示“文件和文件夹任务,其它位置,详细信息”等信息,
DotNet(C#)自定义界面控件常用Design属性
http://www.rcomponent.com/News/DotNetUserInterface/20080228083019417.html
介绍设计自定义控件时,需要使用的常用设计属性,如ToolboxItem, ToolboxBitmap, Category, Description等等
DotNet(C#)自定义WinForm界面控件之Window消息
http://www.rcomponent.com/News/DotNetUserInterface/20080302011507420.html
介绍设计自定义控件时,需要使用常用Window系统消息,如WM_PAINT,WM_NCPAINT等
posted @ 2010-05-19 17:02 要每天开心 阅读(320) 评论(0) 编辑
public delegate void 委托类型(string msg);//首先声明一个委托类型
委托类型 委托变量;//声明该委托类型的成员
private void myButton_Click(object sender, EventArgs e)
{
委托变量 = new 委托类型(委托方法);//委托与方法挂钩
Thread t = new Thread(new ThreadStart(doSomeThing));//新开线程
t.Start();//线程启动
}
private void doSomeThing()
{
if (控件名.InvokeRequired)//如果跨线程调用
{
this.控件名.Invoke(委托变量, new object[] { "Message!" });//Invoke委托方法
}
}
private void 委托方法(string p)//这个是委托方法。
{
this.控件名.Text = p;
}

部份源码:
程序代码#region 跨线程调用
delegate void 跨线程委托( string text );
跨线程委托 跨线程委托变量名;
private int Pint = 0;
//一、先将委托变量的方法指向为 跨线程委托方法
//二、将线程的方法指向为 跨线程数数
//三、在 跨线程数数 中BeginInvoke,参数为(委托变量,数字)
//以上过程为先读取下一个数字,然后显示到myTextBox中
private void button跨线程调用_Click( object sender , EventArgs e )
{
跨线程委托变量名 = new 跨线程委托 (跨线程委托方法);
Thread thread = new Thread (new ThreadStart (跨线程数数));
thread.Start (); //开始
}
private void 跨线程数数()
{
for(int i = 0 ; i < 20 ; i++)
{
if(myTextBox.InvokeRequired)//如果控件的 Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false
{
myTextBox.BeginInvoke (跨线程委托变量名 , 跨线程数字增加 ());
Thread.Sleep (2000);
}
else
{
跨线程委托方法 (i.ToString ());
}
}
}
private string 跨线程数字增加()
{
Pint = Pint + 1;
return Pint.ToString ();
}
private void 跨线程委托方法( string text )
{
myTextBox.Text += text + System.Environment.NewLine;
myTextBox.Refresh ();
}
#endregion 跨线程调用
#region 进度条
private delegate void 进度条委托( int myInt );
private 进度条委托 进度条委托变量名;
private void button进度条_Click( object sender , EventArgs e )
{
进度条委托变量名 = new 进度条委托 (进度条委托方法);
Thread thread = new Thread (new ThreadStart (进度条数数));
thread.Start ();
}
private void 进度条数数()
{
while(true)
{
if(this.InvokeRequired)
{
if(Pint > 20)
{
MessageBox.Show ("进度条最大了");
break;
}
else
{
this.BeginInvoke (进度条委托变量名 , Pint++);
}
}
else
{
MessageBox.Show ("在同一线程");
break;
}
Thread.Sleep (200);
}
}
private void 进度条委托方法( int myInt )
{
label进度条最大数.Text = myInt.ToString ();
myTextBox.Text = myInt.ToString ();
myTextBox.Refresh ();
label进度条最大数.Refresh ();
progressBar1.Value = myInt;
progressBar1.Refresh ();
}
#endregion 进度条
posted @ 2010-05-19 17:00 要每天开心 阅读(2009) 评论(0) 编辑
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
对于内存泄露的状况不在本文讨论的范围之内 你需要检测程序代码是否有内存泄露,本文针对大型软件内存没有泄露时的软件内存占用大的情况
c#和其他语言有所区别,它是一门很占资源的语言,速度慢,占内存。一个普通的winform程序内存占到50兆以上是很平常的事,但是c#的优点也让它称为现在的热门 C#优点:开发速度快,简单,开发难度低,产品维护和升级相对容易。相比(C/C++)语言,开发者较容易掌握
既然c#占用这么多的内存 我们有什么办法使他保存一种较快的速度运行呢?办法当然有
以下是代码片段:
/// <summary>
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
/// </summary>
/// <param name="maxWorkingSet"></param>
public static void SetWorkingSet(int maxWorkingSet)
{
System.Diagnostics.Process.GetCurrentProcess().MaxWorkingSet = (IntPtr)maxWorkingSet;
}
可以设置 private int maxWorkingSet = 750000;
然后用一个times控件 定时清理不用的内存
| 云南特产 | 健康论坛 | 创业论坛 | 淘宝客 | 低空飞行 | 网页目录 | ||
posted @ 2010-05-19 16:58 要每天开心 阅读(517) 评论(1) 编辑
复制 保存
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace chkipsrv
{
public class Shudown
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid
{
public int Count;
public long Luid;
public int Attr;
}
[DllImport("kernel32.dll", ExactSpelling = true)]
internal static extern IntPtr GetCurrentProcess();
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
[DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool ExitWindowsEx(int DoFlag, int rea);
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
internal const int EWX_LOGOFF = 0x00000000;
internal const int EWX_SHUTDOWN = 0x00000001;
internal const int EWX_REBOOT = 0x00000002;
internal const int EWX_FORCE = 0x00000004;
internal const int EWX_POWEROFF = 0x00000008;
internal const int EWX_FORCEIFHUNG = 0x00000010;
private static void DoExitWin(int DoFlag)
{
bool ok;
TokPriv1Luid tp;
IntPtr hproc = GetCurrentProcess();
IntPtr htok = IntPtr.Zero;
ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
ok = ExitWindowsEx(DoFlag, 0);
}
public static void Reboot()
{
DoExitWin(EWX_FORCE | EWX_REBOOT);
}
public static void PowerOff()
{
DoExitWin(EWX_FORCE | EWX_POWEROFF);
}
public static void LogOff()
{
DoExitWin(EWX_FORCE | EWX_LOGOFF);
}
}
}posted @ 2010-05-19 16:58 要每天开心 阅读(180) 评论(0) 编辑
