C# 窗体自动关机源码
用c#自动关机
现在我们用visual C#来编写一个多功能的指令关机程序。该程序具有:定时关机、源码倒计时关机、命令关机提醒、指令系统信息获取等四项功能,源码 可设定关机时间精确到秒。并且让你很快掌握Visual C#中对API的命令电子病历系统 源码操作程序。
一. 设计关闭Windows窗体
1. 界面的指令设计
新建一个标准工程,向工程中增加一个Windows窗体并向窗体中添加如下控件,源码并分别设置其属性:
控件名 类别 Text 控件名 类别 Text
CheckBox1 CheckBox 自动关机 GroupBox1 GroupBox 当前系统时间
CheckBox1 CheckBox 倒计时执行操作 GroupBox2 GroupBox 设定时间
CheckBox1 CheckBox 定时报警 TxtTime TextBox
ButCancle Button 取消 SetupTime DateTimePicker
ButReOpen Button 重新启动 SetupDate DateTimePicker
ButClose Button 关机 Timer1 Timer
ButSysInto Button 系统信息 ButReLogin Button 注消
Windows窗体界面:
将窗体属性中的命令caption设置为"关闭windows",名称设置为"frmmain"。指令
2. 在窗体类中引用API函数
API函数是源码构筑Windows应用程序的基石,是命令Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的指令方法,或者是源码调用Windows API函数的接口,也就是命令说具备调用动态连接库的能力。Visual C#和其它开发工具一样也能够调用动态链接库的API函数。
在Visual C#中调用API的基本过程:
首先,在调用API之前,你必须先导入System.Runtime.InteropServices这个名称空间。该名称空间包含了在Visual C#中调用API的一些必要集合,具体的淘宝卖货源码方法如下:
using System.Runtime.InteropServices ;
using System.Text ;
在导入了名称空间后,我们要声明在程序中所要用到的API函数。我们的程序主要是获取系统的相关信息,所以用到的API函数都是返回系统信息的。先给出在Visual C#中声明API的方法:
[ DllImport("user") ]
public static extern long SetWindowPos(long hwnd , long hWndInsertAfter, long X , long y , long cx, long cy, long wFlagslong) ;
其中,"DllImport"属性用来从不可控代码中调用一个方法,它指定了DLL的位置,该DLL中包含调用的外部方法;"kernel"设定了类库名;"public"指明函数的访问类型为公有的;"static"修饰符声明一个静态元素,而该元素属于类型本身而不是指定的对象;"extern"表示该方法将在工程外部执行,同时使用DllImport导入的方法必须使用"extern"修饰符;最后GetWindowsDirectory函数包含了两个参数,一个为StringBuilder类型的,另一个为int类型的,该方法返回的内容存在于StringBuilder类型的参数中。同时,因为我们在这里使用到了StringBuilder类,所以在程序的开始处,我们还得添加System.Text这个名称空间,方法同上。
声明其它的在程序中所要用到的API函数:
[ DllImport("user") ]
public static extern long ExitWindowsEx(long uFlags, long dwReserved ) ;
[ DllImport("shell") ]
public static extern long ShellAbout(long uFlags, long dwReserved ) ;
3. 增加窗体类的变量
long dwReserved ;
const int SHUTDOWN = 1 ;
const int REBOOT = 2 ;
const int LOGOFF = 0 ;
long sh ;
int counter , n ;
4. 编写窗体类的方法
在窗体的Load(事件过程中编写如下代码:
private void frmmain1_Load(object sender, System.EventArgs e )
{
file://用系统时间初始化组件
Time.Text = System.DateTime.Today.ToShortDateString( ) + " "+ System.DateTime.Today.ToLongTimeString( ) ;
}
在组件Timer1的OnTimer事件过程中编写如下代码:
/ / 在组件Timer1的OnTimer事件过程中编写如下代码:
private void Timer1_Timer(object sender, System.EventArgs e )
{
file://接收当前日期和时间,用于即时显示
string CurrDate=System.DateTime.Today.ToShortDateString( ) ;
string CurrTime=System.DateTime.Today.ToShortTimeString( ) ;
file://随时检测设定的关机日期和时间是否有效
if( this.CheckBox1.Checked == true )
{
if(CurrDate== SetupDate.ToString( ) && CurrTime==SetupTime.ToString( ) )
ColseComputer( ) ;
}
}
private void ColseComputer( )
{ sh = ExitWindowsEx(SHUTDOWN, dwReserved) ; }
private void button1_Click(object sender, System.EventArgs e )
{
Form2 frm=new Form2( ) ;
frm.Show( ) ;
}
private void ButReOpen_Click(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(REBOOT, dwReserved) ; }
private void ButReLogin_Click(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(LOGOFF, dwReserved) ; }
private void ButCancle_Click(object sender, System.EventArgs e )
{ this.Close( ) ; }
private void ButClose_Click_1(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(REBOOT, dwReserved) ; }
二. 设计获取系统信息的Windows窗体
1. 界面的设计
向工程中增加一个Windows窗体并向窗体中添加如下控件:
2. 在窗体类中引用API函数
using System.Runtime.InteropServices ;
using System.Text ;
[ DllImport("kernel") ]
public static extern void GetWindowsDirectory(StringBuilder WinDir,int count) ;
[ DllImport("kernel") ]
public static extern void GetSystemDirectory(StringBuilder SysDir,int count) ;
[ DllImport("kernel") ]
public static extern void GetSystemInfo(ref CPU_INFO cpuinfo) ;
[ DllImport("kernel") ]
public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo) ;
[ DllImport("kernel") ]
public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo) ;
以上几个API的作用分别是获取系统路径,获得CPU相关信息,junite源码怎么查获得内存的相关信息,获得系统时间等。
3. 定义以下各结构
在声明完所有的API函数后,我们发现后三个函数分别用到了CPU_INFO、MEMORY_INFO、SYSTEMTIME_INFO等结构,这些结构并非是.Net内部的,它们从何而来?其实,我们在用到以上API调用时均需用到以上结构,我们将函数调用获得的信息存放在以上的结构体中,最后返回给程序输出。这些结构体比较复杂,但是如果开发者能够熟练运用,那么整个API世界将尽在开发者的掌握之中。以下就是上述结构体的声明:
//定义CPU的信息结构
[StructLayout(LayoutKind.Sequential) ]
public struct CPU_INFO
{
public uint dwOemId ;
public uint dwPageSize ;
public uint lpMinimumApplicationAddress ;
public uint lpMaximumApplicationAddress ;
public uint dwActiveProcessorMask ;
public uint dwNumberOfProcessors ;
public uint dwProcessorType ;
public uint dwAllocationGranularity ;
public uint dwProcessorLevel ;
public uint dwProcessorRevision ;
}
file://定义内存的信息结构
[StructLayout(LayoutKind.Sequential) ]
public struct MEMORY_INFO
{
public uint dwLength ;
public uint dwMemoryLoad ;
public uint dwTotalPhys ;
public uint dwAvailPhys ;
public uint dwTotalPageFile ;
public uint dwAvailPageFile ;
public uint dwTotalVirtual ;
public uint dwAvailVirtual ;
}
file://定义系统时间的信息结构
[StructLayout(LayoutKind.Sequential) ]
public struct SYSTEMTIME_INFO
{
public ushort wYear ;
public ushort wMonth ;
public ushort wDayOfWeek ;
public ushort wDay ;
public ushort wHour ;
public ushort wMinute ;
public ushort wSecond ;
public ushort wMilliseconds ;
}
5. 编写窗体类的方法
private void button1_Click(object sender, System.EventArgs e )
{
file://调用GetWindowsDirectory和GetSystemDirectory函数分别取得Windows路径和系统路径
const int nChars = ;
StringBuilder Buff = new StringBuilder(nChars) ;
GetWindowsDirectory(Buff,nChars) ;
WindowsDirectory.Text = "Windows路径:"+Buff.ToString( ) ;
GetSystemDirectory(Buff,nChars) ;
SystemDirectory.Text = " 系统路径:"+Buff.ToString( ) ;
file://调用GetSystemInfo函数获取CPU的相关信息
CPU_INFO CpuInfo ;
CpuInfo = new CPU_INFO( ) ;
GetSystemInfo(ref CpuInfo) ;
NumberOfProcessors.Text = "本计算机中有"+CpuInfo.dwNumberOfProcessors.ToString( ) +"个CPU";
ProcessorType.Text = "CPU的类型为"+CpuInfo.dwProcessorType.ToString( ) ;
ProcessorLevel.Text = "CPU等级为"+CpuInfo.dwProcessorLevel.ToString( ) ;
OemId.Text = "CPU的OEM ID为"+CpuInfo.dwOemId.ToString( ) ;
PageSize.Text = "CPU中的页面大小为"+CpuInfo.dwPageSize.ToString( ) ;
file://调用GlobalMemoryStatus函数获取内存的相关信息
MEMORY_INFO MemInfo ;
MemInfo = new MEMORY_INFO( ) ;
GlobalMemoryStatus(ref MemInfo) ;
MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString( ) +"%的内存正在使用" ;
TotalPhys.Text = "物理内存共有"+MemInfo.dwTotalPhys.ToString( ) +"字节" ;
AvailPhys.Text = "可使用的物理内存有"+MemInfo.dwAvailPhys.ToString( ) +"字节" ;
TotalPageFile.Text = "交换文件总大小为"+MemInfo.dwTotalPageFile.ToString( ) +"字节" ;
AvailPageFile.Text = "尚可交换文件大小为"+MemInfo.dwAvailPageFile.ToString( ) +"字节" ;
TotalVirtual.Text = "总虚拟内存有"+MemInfo.dwTotalVirtual.ToString( ) +"字节" ;
AvailVirtual.Text = "未用虚拟内存有"+MemInfo.dwAvailVirtual.ToString( ) +"字节" ;
file://调用GetSystemTime函数获取系统时间信息
SYSTEMTIME_INFO StInfo ;
StInfo = new SYSTEMTIME_INFO( ) ;
GetSystemTime(ref StInfo) ;
Date.Text = StInfo.wYear.ToString( ) +"年"+StInfo.wMonth.ToString( ) +"月"+StInfo.wDay.ToString( ) +"日" ;
Time.Text = (StInfo.wHour+8).ToString( ) +"点"+StInfo.wMinute.ToString( ) +"分"+StInfo.wSecond.ToString( ) +"秒" ;
}
三. 结束语。
上面介绍了Visual C#开发多功能关机程序的整个过程,该程序有一定的实用价值。通过本文的学习,我相信稍有API使用基础的开发者可以马上触类旁通,很快掌握Visual C#中对API的根号涨停指标源码操作。上面给出的实例仅仅是一个简单的程序,不过有兴趣的读者可以进一步完善其功能,做出更完美的系统应用程序。
手机怎么退出工厂测试模式
解决办法:1.你的手机必须root ,没有root的自寻教程
2.下载安装终端模拟器
3.安装完成后打开运行出现如下画面
4.首先输入 su 点击回车 以便获得最高权限
5.输入一下源码
rm /efs/FactoryApp/keystr
rm /efs/FactoryApp/factorymode
echo -n ON >> /efs/FactoryApp/keystr
echo -n ON >> /efs/FactoryApp/factorymode
chown . /efs/FactoryApp/keystr
chown. /efs/FactoryApp/factorymode
chmod /efs/FactoryApp/keystr
chmod /efs/FactoryApp/factorymode
reboot
复制代码
6.点击回车后手机会自动重启,重启后你的手机就退出了工厂模式
C++关机注销重启源码求修正QQ
主要是分号和尖括号的问题,分号忘加了,或是加成全角的。
if里面带尖括号干嘛,没这语法。
我的电脑汉字不好使,你自己把汉字复制进去吧。
#include<iostream>
#include<Windows.h>
using namespace std;
void main()
{
int a ;
cout<<": 1 2 3"<<'\n';
cin>>a;
if (a==1)
{
cout<<".\n";
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
}
else if (a==2)
{
cout<<".\n";
ExitWindowsEx(EWX_REBOOT, 0);
}
else if (a==3)
{
cout<<".\n";
}
else
cout<<""<<'\n';
}
终端模拟器禁止安装软件命令
free
1.作用
free命令用来显示内存的使用情况,使用权限是所有用户。
2.格式
free[-b|-k|-m][-o][-sdelay][-t][-V]
3.主要参数
-b-k-m:分别以字节(KB、MB)为单位显示内存使用情况。
-sdelay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。
4.应用实例
free命令是溯源码瓶装燕窝用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
#free-b-s5
使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。
Android系统在超级终端下必会的命令大全(一)
busybox
BusyBox是标准Linux工具的一个单个可执行实现。BusyBox包含了一些简单的工具,例如cat和echo,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。有些人将BusyBox称为Linux工具里的瑞士军刀.简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux的许多工具和命令。
1、BusyBox的诞生
BusyBox最初是由BrucePerens在年为DebianGNU/Linux安装盘编写的。其目标是在一张软盘上创建一个可引导的GNU/Linux系统,这可以用作安装盘和急救盘。
2、busybox的用法
可以这样用busybox
#busyboxls
他的功能就相当运行ls命令
最常用的用法是建立指向busybox的链接,不同的链接名完成不同的功能.
#ln-sbusyboxls
#ln-sbusyboxrm
#ln-sbusyboxmkdir
然后分别运行这三个链接:
#./ls
#./rm
#./mkdir
就可以分别完成了lsrm和mkdir命令的功能.虽然他们都指向同一个可执行程序busybox,但是只要链接名不同,完成的功能就不同,很多linux网站都提供busybox的源代码下载。。
3、配置busybox
busybox的配置程序和linux内核菜单配置方式简直一模一样.熟悉用makemenuconfig方式配置linux内核的朋友很容易上手.
#cpbusybox-1..tar.gz/babylinux
#cd/babylinux
#tarxvfzbusybox-1..tar.gz
#cdbusybox-1.
#makemenuconfig
下面是需要编译进busybox的功能选项。
GeneralConfiguration应该选的选项
Showverboseappletusagemessages
RuntimeSUID/SGIDconfigurationvia/etc/busybox.conf
BuildOptions
BuildBusyBoxasastaticbinary(nosharedlibs)
这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使它正常工作.
InstallationOptions
Don’tuse/usr
这个选项也一定要选,否则makeinstall后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,makeinstall后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向它的链接.
其它选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。
保存。
4、编译并安装busybox
#make
#makeinstall
编译好后在busybox目录下生成子目录_install,里面的内容:
drwxr-xr-x2rootroot月:bin
rwxrwxrwx1rootroot月:linuxrc->bin/busybox
drwxr-xr-x2rootroot月:sbin
其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接.
Android系统在超级终端下必会的命令大全(二)一、安装和登录命令
reboot1.作用
reboot命令的作用是重新启动计算机,它的使用权限是系统管理者。
2.格式
reboot[-n][-w][-d][-f][-i]
3.主要参数
-n:在重开机前不做将记忆体资料写回硬盘的动作。
-w:并不会真的重开机,只是把记录写到/var/log/wtmp文件里。
-d:不把记录写到/var/log/wtmp文件里(-n这个参数包含了-d)。
-i:在重开机之前先把所有与网络相关的装置停止。
mount
1.作用
mount命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab中允许的使用者。
2.格式
mount-a[-fv][-tvfstype][-n][-rw][-F]devicedir
3.主要参数
-h:显示辅助信息。
-v:显示信息,通常和-f用来除错。
-a:将/etc/fstab中定义的所有文件系统挂上。
-F:这个命令通常和-a一起使用,它会为每一个mount的动作产生一个行程负责执行。在系统需要挂上大量NFS文件系统时可以加快加载的速度。
-f:通常用于除错。它会使mount不执行实际挂上的动作,而是模拟整个挂上的过程,通常会和-v一起使用。
-tvfstype:显示被加载文件系统的类型。
-n:一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系统的情况下,可以用这个选项取消这个动作。
4.应用技巧
在Linux和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分访问的。要访问CD-ROM上的文件,需要将CD-ROM设备挂装在文件树中的某个挂装点。如果发行版安装了自动挂装包,那么这个步骤可自动进行。在Linux中,如果要使用硬盘、光驱等储存设备,就得先将它加载,当储存设备挂上了之后,就可以把它当成一个目录来访问。挂上一个设备使用mount命令。在使用mount这个指令时,至少要先知道下列三种信息:要加载对象的文件系统类型、要加载对象的设备名称及要将设备加载到哪个目录下。
(1)Linux可以识别的文件系统
◆Windows/常用的FAT文件系统:vfat;
◆WinNT/的文件系统:ntfs;
◆OS/2用的文件系统:hpfs;
◆Linux用的文件系统:ext2、ext3;
◆CD-ROM光盘用的文件系统:iso。
虽然vfat是指FAT系统,但事实上它也兼容FAT的文件系统类型。
(2)确定设备的名称
在Linux中,设备名称通常都存在/dev里。这些设备名称的命名都是有规则的,可以用“推理”的方式把设备名称找出来。例如,/dev/hda1这个
IDE设备,hd是HardDisk(硬盘)的,sd是SCSIDevice,fd是FloppyDevice(或是Floppy
Disk?)。a代表第一个设备,通常IDE接口可以接上4个IDE设备(比如4块硬盘)。所以要识别IDE硬盘的方法分别就是hda、hdb、hdc、
hdd。hda1中的“1”代表hda的第一个硬盘分区
(partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。此外,可以直接检查/var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的设备代号。
(3)查找挂接点
在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt的空目录,该目录就是专门用来当作挂载点(MountPoint)的目录。建议在/mnt里建几个/mnt/cdrom、/mnt/floppy、/mnt/mo等目录,当作目录的专用挂载点。举例而言,如要挂载下列5个设备,其执行指令可能如下(假设都是Linux的ext2系统,如果是WindowsXX请将ext2改成vfat):
软盘===>mount-text2/dev/fd0/mnt/floppy
cdrom===>mount-tiso/dev/hdc/mnt/cdrom
SCSIcdrom===>mount-tiso/dev/sdb/mnt/scdrom
SCSIcdr===>mount-tiso/dev/sdc/mnt/scdr
不过目前大多数较新的Linux发行版本(包括红旗Linux、中软Linux、MandrakeLinux等)都可以自动挂装文件系统,但RedHatLinux除外。
2024-12-24 00:24
2024-12-23 23:38
2024-12-23 23:23
2024-12-23 23:18
2024-12-23 22:21