| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2453 人关注过本帖
标题:关闭计算机
只看楼主 加入收藏
caijiawei
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:162
专家分:101
注 册:2008-10-7
结帖率:82.14%
收藏
已结贴  问题点数:20 回复次数:20 
关闭计算机
如果想用代码来控制计算机关闭该如何实现呢?
给个实例!
谢谢……
搜索更多相关主题的帖子: 计算机 
2009-12-28 23:51
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:2 
这个原来我用API做过,没有做成,希望高手来上代码,另外一定要加上注释,让大家学学习习。

QQ:81704464
2009-12-29 09:05
qingshuiliu
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:17
帖 子:323
专家分:1538
注 册:2009-12-28
收藏
得分:2 
我还在学习呢
等我学好了,我上传代码
2009-12-29 11:24
vxbb
Rank: 6Rank: 6
等 级:侠之大者
帖 子:163
专家分:440
注 册:2008-8-18
收藏
得分:2 
回复 楼主 caijiawei
https://bbs.bccn.net/thread-293406-1-1.html

我在这个程序里有这个功能-------定时关机和低网速关机。
主要代码:
调用方法   
                      WinApi.CloseComputer();

程序代码:
class WinApi
    {
        [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;

        //声明API
        [DllImport("user32")]
        public static extern long SetWindowPos(long hwnd, long hWndInsertAfter, long X, long y, long cx, long cy, long wFlagslong);
        [DllImport("user32")]
        public static extern long ExitWindowsEx(long uFlags, long dwReserved);
        [DllImport("shell32")]
        public static extern long ShellAbout(long uFlags, long dwReserved);

        // 增加窗体类的变量
        static long dwReserved;
        const int SHUTDOWN = 1;
        const int REBOOT = 2;
        const int LOGOFF = 0;
        static long sh;

        public static void CloseComputer()
        {
            //获取重启和关机的权限
            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);
            sh = ExitWindowsEx(SHUTDOWN, dwReserved);
        }
    }

QQ:491697374  Mail:vxbb@
2009-12-29 11:46
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:0 
楼上的,我用你的代码大概试了试,不报错,但没有任何反应,是怎么回事?

QQ:81704464
2009-12-29 12:49
vxbb
Rank: 6Rank: 6
等 级:侠之大者
帖 子:163
专家分:440
注 册:2008-8-18
收藏
得分:0 
回复 5楼 athenalux
是你太邪恶了

QQ:491697374  Mail:vxbb@
2009-12-29 17:10
zhougou17
Rank: 1
等 级:新手上路
帖 子:8
专家分:8
注 册:2009-8-31
收藏
得分:2 
不知道,我也想编写关闭计算机的C语言代码
2009-12-29 19:00
李光亮
Rank: 2
等 级:论坛游民
帖 子:43
专家分:51
注 册:2009-9-21
收藏
得分:2 
直接用system(),然后加入shutdown -s -t 的多好啊,(我现在就会这个)
2009-12-29 19:51
caijiawei
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:162
专家分:101
注 册:2008-10-7
收藏
得分:0 
还是不行!
那位高手给个有注释的实例来学习一下!
谢谢……

不懂就要问,我从不感觉请教他人是一件很丢人的事!
2009-12-30 00:02
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:0 
回复 6楼 vxbb
这你都能看的出来?

QQ:81704464
2009-12-30 07:56
快速回复:关闭计算机
数据加载中...
 
   



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

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