| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2453 人关注过本帖
标题:关闭计算机
只看楼主 加入收藏
vxbb
Rank: 6Rank: 6
等 级:侠之大者
帖 子:163
专家分:440
注 册:2008-8-18
收藏
得分:0 
回复 10楼 athenalux
我很费解啊 ,真的不行么

我都用它定时关机或者按要求关机了。

难不成我的 XP 牛X些???

我还单独是了代码,秒关。

QQ:491697374  Mail:vxbb@
2009-12-30 10:42
云中雾
Rank: 1
等 级:新手上路
威 望:1
帖 子:168
专家分:3
注 册:2005-12-30
收藏
得分:2 
程序代码:
using System;
using System.Drawing;
using System.Collections;
using  System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace ShutDownComputer
{
    /// <summary>
    /// Form1 的摘要说明。
    /// </summary>
    /// 
    public class Form1 : System.Windows.Forms.Form
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private  components = null;

        public Form1()
        {
            //
            // Windows 窗体设计器支持所必需的
            //
            InitializeComponent();

            //
            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            //
        }

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows 窗体设计器生成的代码
        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.label1 = new System.Windows.Forms.Label();
             = new System.Windows.();
            this.label2 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.timer1 = new System.Timers.Timer();
            (()(this.timer1)).BeginInit();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.BackColor = System.Drawing.Color.Olive;
            this.button1.Location = new System.Drawing.Point(32, 80);
            this.button1.Name = "button1";
            this.button1.TabIndex = 0;
            this.button1.Text = "开始";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // label1
            // 
            this.label1.Location = new System.Drawing.Point(16, 40);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(120, 23);
            this.label1.TabIndex = 2;
            this.label1.Text = "您想让你的计算机在";
            // 
            // comboBox1
            // 
            (new object[] {
                                                           "10",
                                                           "20",
                                                           "30",
                                                           "40",
                                                           "50",
                                                           "60",
                                                           "70",
                                                           "80",
                                                           "90",
                                                           "100",
                                                           "110",
                                                           "120"});
             = new System.Drawing.Point(16, 56);
             = "comboBox1";
             = new System.Drawing.Size(40, 20);
             = 3;
             = "10";
            // 
            // label2
            // 
            this.label2.Location = new System.Drawing.Point(56, 56);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(96, 16);
            this.label2.TabIndex = 4;
            this.label2.Text = "分之后自动关机";
            // 
            // label3
            // 
            this.label3.Location = new System.Drawing.Point(24, 8);
            this.label3.Name = "label3";
            this.label3.TabIndex = 5;
            // 
            // timer1
            // 
            this.timer1.Interval = 1000;
            this.timer1.SynchronizingObject = this;
            this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            this.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(192)), ((System.Byte)(255)));
            this.ClientSize = new System.Drawing.Size(152, 109);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.label2);
            this.Controls.Add();
            this.Controls.Add(this.label1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            (()(this.timer1)).EndInit();
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
        }

        [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 flg, 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;

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Label label1;
        private System.Windows. comboBox1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;
        private System.Timers.Timer timer1;

        internal const int EWX_FORCEIFHUNG = 0x00000010;

        private void DoExitWin( int flg )
        {
            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( flg, 0 );
        }


        DateTime ShutDownItTime = new DateTime();

        int status = 0;  //0: 表示还没有开始计时关机;   1: 已经开始计时关机

        private void button1_Click(object sender, System.EventArgs e)
        {            
            if(status == 1)            
            {
                this.timer1.Enabled = false;
                status = 0;
                this.button1.Text = "开始";
                return;
            }            
            int intTime = 0;
            if( == 0)
            {
                this.label3.Text = "请输入时间!";
                return;
            }
            try
            {
                intTime = int.Parse();
            }
            catch
            {
                this.label3.Text = "时间只能为整数,请重新输入!";
            }
            this.ShutDownItTime=DateTime.Now.AddMinutes(intTime);
            this.timer1.Enabled = true;
            status = 1;
            this.button1.Text = "停止";
        }

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if(DateTime.Now >= this.ShutDownItTime)
            {
                this.label3.Text = "正在关机...";
                DoExitWin(EWX_SHUTDOWN);
            }    
        }
    }
}


白色的忧郁让我白色的思念从洁白到苍白,从苍白到空白,比空白更空白,变成深白的坦白!
2009-12-30 11:06
zhan910912
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2009-12-28
收藏
得分:2 
对了,这种代码是怎样写成的哦,有谁愿教我下,我感激不尽!!!
2009-12-30 13:05
caijiawei
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:162
专家分:101
注 册:2008-10-7
收藏
得分:0 
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using
using System.Runtime.InteropServices;

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        string dateTimer = null;
        string date = null;
        public Form1()
        {
            InitializeComponent();
            lblTime.Text = DateTime.Now.ToShortTimeString();
        }

        [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 flg, 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 void DoExitWin(int flg)
        {

            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(flg, 0);

        }   
        private void btnCloseSystem_Click(object sender, EventArgs e)
        {
            if (txtDateTimer.Text == "")
            {
                MessageBox.Show("关机时间不能为空!");
                return;
            }
            txtDateTimer.Enabled = false;
            dateTimer = DateTime.Parse(txtDateTimer.Text).ToShortTimeString();
        }

        private void timeDateTime_Tick(object sender, EventArgs e)
        {
            //获取当前时间
            lblTime.Text = DateTime.Now.ToShortTimeString();
            date = DateTime.Now.ToShortTimeString();
        }

        private void timerDate_Tick(object sender, EventArgs e)
        {
            //关机
            if (txtDateTimer.Enabled == false)
            {
                if (dateTimer == date)
                {
                    //MessageBox.Show("UUUUUUUUU");
                    DoExitWin(EWX_SHUTDOWN);
                     
                }
            }

        }
        // 清空
        private void btnBare_Click(object sender, EventArgs e)
        {
            txtDateTimer.Enabled = true;
            txtDateTimer.Text = null;
        }
        
具体代码已经搞定!这是我在网上找到的,所有没多少注释,
实话说我也不都上面那一段!
图片附件: 游客没有浏览图片的权限,请 登录注册

setup.rar (162.53 KB)
这的我打包好的!

不懂就要问,我从不感觉请教他人是一件很丢人的事!
2010-01-07 23:37
snowprince
Rank: 2
来 自:武汉
等 级:论坛游民
帖 子:108
专家分:48
注 册:2009-5-1
收藏
得分:0 
不能直接调用CMD吗?

你要是想做定时的话,以前做优化大师时做过,把代码给你看看吧
程序代码:
using System;
using System.Collections.Generic;
using  System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace my
{
    public partial class shutdown : UserControl
    {
        public shutdown()
        {
            InitializeComponent();
        }
        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        private struct tokpriv1luid
        {
            public int count;
            public long luid;
            public int attr;
        }
        [DllImport("kernel32.dll", ExactSpelling = true)]
        private static extern IntPtr GetCurrentProcess();
        [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
        private static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
        [DllImport("advapi32.dll", SetLastError = true)]
        private static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
        [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
        private static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref tokpriv1luid newst, int len, IntPtr prev, IntPtr relen);
        [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
        private static extern bool ExitWindowsEx(int doflag, int rea);
        private const int se_privilege_enabled = 0x00000002;
        private const int token_query = 0x00000008;
        private const int token_adjust_privileges = 0x00000020;
        private const string se_shutdown_name = "seshutdownprivilege";
        private const int ewx_logoff = 0x00000000;
        private const int ewx_shutdown = 0x00000001;
        private const int ewx_reboot = 0x00000002;
        private const int ewx_force = 0x00000004;
        private const int ewx_poweroff = 0x00000008;
        internal const int ewx_forcehung = 0x00000010;
        private static void doexitwin(int doflag)
        {
            tokpriv1luid tp;
            IntPtr hproc = GetCurrentProcess(); //句柄,操作系统指向每个窗体的对象   获取当前运行窗体的句柄
            IntPtr htok = IntPtr.Zero; //空句柄
            OpenProcessToken(hproc, token_adjust_privileges | token_query, ref htok); //打开当前应用程序的伪句柄
            tp.count = 1;
            tp.luid = 0;
            tp.attr = se_privilege_enabled; //授权
            LookupPrivilegeValue(null, se_shutdown_name, ref tp.luid); //检查是否可以授权,必要
            AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);//授权
            ExitWindowsEx(doflag, 0);   //关机函数
        }

        private void button1_Click(object sender, EventArgs e)
        {
            doexitwin(ewx_force | ewx_reboot);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            doexitwin(ewx_force | ewx_logoff);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            doexitwin(ewx_force | ewx_poweroff);
        }

        string taskType="重启";
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                taskType = "重启";
            }
            else if (radioButton2.Checked)
            {
                taskType = "注销";
            }
            else
            {
                taskType = "关机";
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (DateTime.Now.Hour > 9)
            {
                this.textBox1.Text = DateTime.Now.Hour.ToString();
            }
            else
            {
                this.textBox1.Text = "0" + DateTime.Now.Hour.ToString();
            }
            if (DateTime.Now.Minute > 9)
            {
                this.textBox2.Text = DateTime.Now.Minute.ToString();
            }
            else
            {
                this.textBox2.Text = "0" + DateTime.Now.Minute.ToString();
            }
            if (DateTime.Now.Second > 9)
            {
                this.textBox3.Text = DateTime.Now.Second.ToString();
            }
            else
            {
                this.textBox3.Text = "0" + DateTime.Now.Second.ToString();
            }
        }

        private void textBox1_Leave(object sender, EventArgs e)
        {
            string input = textBox1.Text;
            string Input = input == "" ? "00" : input;
            try
            {
                if (int.Parse(Input) >= 0 && int.Parse(Input) <= 24)
                {
                    if (int.Parse(Input) <= 9)
                    {
                        textBox1.Text = "0" + Input;
                    }
                }
                else
                {
                    MessageBox.Show("你输入的时间有误!");
                    textBox1.Text = "00";
                }
            }
            catch
            {
                MessageBox.Show("你输入的时间有误!");
                textBox1.Text = "00";
            }
        }

        private void textBox2_Leave(object sender, EventArgs e)
        {
            string input = textBox2.Text;
            string Input = input == "" ? "00" : input;
            try
            {
                if (int.Parse(Input) >= 0 && int.Parse(Input) <= 60)
                {
                    if (int.Parse(Input) <= 9)
                    {
                        textBox2.Text = "0" + Input;
                    }
                }
                else
                {
                    MessageBox.Show("你输入的时间有误!");
                    textBox2.Text = "00";
                }
            }
            catch
            {
                MessageBox.Show("你输入的时间有误!");
                textBox2.Text = "00";
            }
        }

        private void textBox3_Leave(object sender, EventArgs e)
        {
            string input = textBox3.Text;
            string Input = input == "" ? "00" : input;
            try
            {
                if (int.Parse(Input) >= 0 && int.Parse(Input) <= 60)
                {
                    if (int.Parse(Input) <= 9)
                    {
                        textBox3.Text = "0" + Input;
                    }
                }
                else
                {
                    MessageBox.Show("你输入的时间有误!");
                    textBox3.Text = "00";
                }
            }
            catch
            {
                MessageBox.Show("你输入的时间有误!");
                textBox3.Text = "00";
            }
        }

        DateTime dtExecutTime;
        private void button5_Click(object sender, EventArgs e)
        {
            if (this.button5.Text == "启动任务")
            {
                dtExecutTime = new DateTime(this.dateTimePicker1.Value.Year, this.dateTimePicker1.Value.Month, this.dateTimePicker1.Value.Day, int.Parse(textBox1.Text), int.Parse(textBox2.Text), int.Parse(textBox3.Text));
                if (dtExecutTime < DateTime.Now)
                {
                    MessageBox.Show("你选择的时间无效");
                    return;
                }

                timer1.Start();
                button5.Text = "取消任务";
                this.dateTimePicker1.Enabled = false;
                this.textBox1.Enabled = false;
                this.textBox2.Enabled = false;
                this.textBox3.Enabled = false;
                this.button4.Enabled = false;
            }
            else
            {
                timer1.Stop();
                button5.Text = "启动任务";
                label6.Text = "";

            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime dtnow = DateTime.Now;
            TimeSpan ts = dtExecutTime - dtnow;
            label6.Text = string.Format("距离你设置的任务----{0},还有{1}日{2}小时{3}分{4}秒!", taskType, ts.Days, ts.Hours, ts.Minutes, ts.Seconds);
            if (dtnow.ToString() == dtExecutTime.ToString())
            {
                if (taskType == "注销")
                {
                    timer1.Enabled = false;
                    doexitwin(ewx_force | ewx_logoff);
                }
                else if (taskType == "重启")
                {
                    timer1.Enabled = false;
                    doexitwin(ewx_force | ewx_reboot);
                }
                else
                {
                    timer1.Enabled = false;
                    doexitwin(ewx_force | ewx_poweroff);
                }
            }
        }

    }
}
2010-01-15 20:10
forest1980
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-8-19
收藏
得分:0 
学习了,顶上去
2010-02-06 11:26
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
写个掉用dos命令的程序进行关机不就可以了么?用不了那么复杂啊!

♂ 死后定当长眠,生前何须久睡。♀
2010-02-08 14:36
C灬黄祖
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-5-28
收藏
得分:0 
private void button2_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process myprocess = new System.Diagnostics.Process();
            myprocess.StartInfo.FileName = "cmd.exe";
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.StartInfo.RedirectStandardInput = true;
            myprocess.StartInfo.RedirectStandardOutput = true;
            myprocess.StartInfo.RedirectStandardError = true;
            myprocess.StartInfo.CreateNoWindow = true;
            myprocess.Start();
            myprocess.StandardInput.WriteLine("shutdown -r -t 0");
        }
2010-02-08 17:32
adrian0
Rank: 2
等 级:论坛游民
帖 子:78
专家分:70
注 册:2010-1-28
收藏
得分:0 
procedure Get_Shutdown_Privilege;//提权
var
    rl: Cardinal;
    hToken: Cardinal;
    tkp: TOKEN_PRIVILEGES;
begin
    OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
    if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
    begin
      tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      tkp.PrivilegeCount := 1;
      AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
    end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN,0);
end;

end.
2010-02-08 17:32
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
以下是引用C灬黄祖在2010-2-8 17:32:38的发言:

private void button2_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process myprocess = new System.Diagnostics.Process();
            myprocess.StartInfo.FileName = "cmd.exe";
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.StartInfo.RedirectStandardInput = true;
            myprocess.StartInfo.RedirectStandardOutput = true;
            myprocess.StartInfo.RedirectStandardError = true;
            myprocess.StartInfo.CreateNoWindow = true;
            myprocess.Start();
            myprocess.StandardInput.WriteLine("shutdown -r -t 0");
        }
这个就相当的不错哦。

♂ 死后定当长眠,生前何须久睡。♀
2010-02-09 15:26
快速回复:关闭计算机
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079090 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved