慢慢完善的工具包

By | 05月19日
Advertisement

Unit tool;
Interface
Uses
Windows, Messages, SysUtils, Variants, Graphics, Classes, Controls, Forms,
Dialogs, ComCtrls, comobj, StdCtrls, Tlhelp32;
type userarray=array of string;
Type
tools = Class(TObject)
Public
Class Function saveExcletoTxt(srcFile, outFile: String): boolean;
Class Function scanf(textline: String; num: integer): String;
Class Function findsegment(textline: String; num: integer;seg:string): String;
Class Function writelog(FileName, inStr: String): boolean;
Class Function showtimer(): String;
Class Procedure ExecNewProcess(ProgramName: String);
Class Function KillTask(ExeFileName: String): integer;
Class Function proword(str1: String): String;
Class Function stoproce(Title: String): integer;
Class Function gettodayfile(): String;
Class Function gettoday(): String;
Class Function getYEARFIRSTDATE(): String;
Class Function getChinatoday(): String;
Class Function ToUTF8Encode(str: string): string;
Class Function IsFileInUse(fName: String): boolean;
class procedure CaptureScreen(AFileName: string);
class function split(s:string;dot:char):userarray;
class function CheckTask(ExeFileName: string): Boolean;
Class Function modifyMemo(Memo1: TMemo; line: integer; tmpstr: String): boolean;
End;

Implementation

//按所给字符将字符串分隔成数组
class function tools.split(s:string;dot:char):userarray;
var
str:userarray;
i,j:integer;
begin
i:=1;
j:=0;
SetLength(str, 255);

while Pos(dot, s) > 0 do //Pos返回子串在父串中第一次出现的位置.
begin
str[j]:=copy(s,i,pos(dot,s)-i);
i:=pos(dot,s)+1;
s[i-1] := chr(ord(dot)+1);
j:=j+1;
end;
str[j]:=copy(s,i,strlen(pchar(s))-i+1);
result:=str;
end;

//检查进程是否存在
class function tools.CheckTask(ExeFileName: string): Boolean;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := False;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =UpperCase(ExeFileName))) then
result := True;
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;

class procedure tools.CaptureScreen(AFileName: string);
const
CAPTUREBLT = $40000000;
var
hdcScreen: HDC;
hdcCompatible: HDC;
bmp: TBitmap;
hbmScreen: HBITMAP;
begin
hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
hdcCompatible := CreateCompatibleDC(hdcScreen);
hbmScreen := CreateCompatibleBitmap(hdcScreen,
GetDeviceCaps(hdcScreen, HORZRES),
GetDeviceCaps(hdcScreen, VERTRES));
SelectObject(hdcCompatible, hbmScreen);
bmp := TBitmap.Create;
bmp.Handle := hbmScreen;
BitBlt(hdcCompatible,
0, 0,
bmp.Width, bmp.Height,
hdcScreen,
0, 0,
SRCCOPY or CAPTUREBLT);
bmp.SaveToFile(AFileName);
bmp.Free;
DeleteDC(hdcScreen);
DeleteDC(hdcCompatible);
end;

class function tools.ToUTF8Encode(str: string): string;
var
s: string;
utf8: UTF8String;
data: ^byte;
i: Integer;
begin
utf8:= Utf8Encode(str);
data:= @utf8[1];
for i:= 1 to length(utf8) do
begin
s := s + format('%%%x',[data^]);
inc(data);
end;
Result := s;
end;

class Function tools.IsFileInUse(fName: String): boolean;
Var
HFileRes: HFILE;
Begin
Result := false;
If Not FileExists(fName) Then
exit;
HFileRes := CreateFile(pchar(fName), GENERIC_READ Or GENERIC_WRITE, 0, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
If Not Result Then
CloseHandle(HFileRes);
End;
Class Function tools.modifyMemo(Memo1: TMemo; line: integer; tmpstr: String): boolean;
Begin
Memo1.Lines.delete(line);
Memo1.Lines.Append(tmpstr);
Memo1.Lines.Move(Memo1.Lines.Count - 1, line);
result := true;
End;
{98,2000,XP,ME}
Class Function tools.KillTask(ExeFileName: String): integer;
Const
PROCESS_TERMINATE = $0001;
Var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
Begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
While integer(ContinueLoop) <> 0 Do
Begin
If ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) Or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) Then
result := integer(TerminateProcess(
OpenProcess(PROCESS_TERMINATE,
BOOL(0),
FProcessEntry32.th32ProcessID),
0));

ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
End;
CloseHandle(FSnapshotHandle);
End;

{ For Windows NT/2000/XP }

Class Function tools.stoproce(Title: String): integer;
Var
H: THandle;
P: DWORD;
Begin
H := FindWindow(Nil, pchar(Title));
If H <> 0 Then
Begin
GetWindowThreadProcessId(H, @P);
If P <> 0 Then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, false, P), $FFFFFFFF);
End;
End;

Class Procedure tools.ExecNewProcess(ProgramName: String);
Var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CreateOK: boolean;
Begin

{ fill with known state }
FillChar(StartInfo, SizeOf(TStartupInfo), #0);
FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
StartInfo.cb := SizeOf(TStartupInfo);

CreateOK := CreateProcess(Nil, pchar(ProgramName), Nil, Nil, false,
CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,
Nil, Nil, StartInfo, ProcInfo);

{ check to see if successful }
If CreateOK Then
//may or may not be needed. Usually wait for child processes
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
End;

Class Function tools.saveExcletoTxt(srcFile, outFile: String): boolean;
Var MSExcel, workbook: OleVariant;
i, j: integer;
tmpstr: String;
Const nud = ' ';
Begin
MSExcel := CreateOLEObject('Excel.Application');
// workbook:=createOleObject('Execl.Sheet');
MSExcel.WorkBooks.Open(srcFile);
// workbook:=MSExcel.WorkBooks.Add;

For i := 1 To MSExcel.ActiveSheet.UsedRange.Rows.Count Do

Begin
tmpstr := '';
For j := 1 To MSExcel.ActiveSheet.UsedRange.columns.Count Do
tmpstr := tmpstr + floattostr(MSExcel.Cells[i, j]) + nud;
tools.writelog(outFile, tmpstr);
End;
MSExcel.Quit;
End;

Class Function tools.findsegment(textline: String; num: integer; seg:string): String;
Var
tmpbuf, sss: String;
i,j:integer;
Begin
i := 1;
j := 1;
tmpbuf := '';
While (j < num + 1) Do
Begin
If ((textline[i] = seg) Or (textline[i] = #0)) Then
Begin

While textline[i + 1] = seg Do
Begin
i := i + 1;
End;
j := 1 + j;
End;

sss := textline[i];
If (j = num) Then
Begin

If (textline[i] <> seg) Then
tmpbuf := tmpbuf + textline[i];
End;
i := i + 1;
End; ///end while;
result := tmpbuf;
End;

Class Function tools.scanf(textline: String; num: integer): String;
Var
i, j: integer;
tmpbuf, sss: String;
Begin
i := 1;
j := 1;
tmpbuf := '';
While (j < num + 1) Do
Begin
If ((textline[i] = ' ') Or (textline[i] = #0)) Then
Begin

While textline[i + 1] = ' ' Do
Begin
i := i + 1;
End;
j := 1 + j;
End;

sss := textline[i];
If (j = num) Then
Begin

If (textline[i] <> ' ') Then
tmpbuf := tmpbuf + textline[i];
End;
i := i + 1;
End; ///end while;
scanf := tmpbuf;
End;

Class Function tools.showtimer(): String;
Var str: String;
lt: TSYSTEMTIME;
Begin
GetLocalTime(lt);
str := inttostr(lt.wHour) + ':' + inttostr(lt.wMinute) + ':'
+ inttostr(lt.wSecond) + ':' + inttostr(lt.wMilliseconds);
showtimer := str;
End;
Class Function tools.getChinatoday(): String;
Var str: String;
lt: TSYSTEMTIME;
Begin
GetLocalTime(lt);
str := inttostr(lt.wYear) + '年' + inttostr(lt.wMonth) + '月'
+ inttostr(lt.wDay)+'日'; //+':'+inttostr(lt.wMilliseconds);
result := str;
End;
Class Function tools.getYEARFIRSTDATE(): String;
Var str: String;
lt: TSYSTEMTIME;
Begin
GetLocalTime(lt);
str := inttostr(lt.wYear) + '-01-01'; //+':'+inttostr(lt.wMilliseconds);
result := str;
End;
Class Function tools.gettoday(): String;
Var str: String;
lt: TSYSTEMTIME;
Begin
GetLocalTime(lt);
str := inttostr(lt.wYear) + '-' + inttostr(lt.wMonth) + '-'
+ inttostr(lt.wDay); //+':'+inttostr(lt.wMilliseconds);
result := str;
End;
Class Function tools.proword(str1: String): String;
Var
leng: integer;
lenstr: String;
Begin
leng := length(str1);
If (leng < 10) Then
lenstr := '000' + inttostr(leng)
Else If leng < 100 Then
lenstr := '00' + inttostr(leng)
Else If leng < 1000 Then
lenstr := '0' + inttostr(leng)
Else
lenstr := inttostr(leng);
proword := lenstr + str1;
End;
Class Function tools.gettodayfile(): String; //按文件格式返回时间字符
Var str, year, month, day: String;
lt: TSYSTEMTIME;
Begin
GetLocalTime(lt);
year := inttostr(lt.wYear);
month := inttostr(lt.wMonth);
day := inttostr(lt.wDay);
If (length(month) < 2) Then
str := year + '0' + month
Else
str := year + month;
If (length(day) < 2) Then
str := str + '0' + day
Else
str := str + day;
//+':'+inttostr(lt.wMilliseconds);
result := str;
End;
Class Function tools.writelog(FileName, inStr: String): boolean;
Var
m: textfile;
Begin
If (fileexists(FileName) = false) Then
Begin //如果文件不存在!
assignfile(m, FileName);
rewrite(m);
writeln(m, inStr);
closefile(m);
End
Else
Begin
assignfile(m, FileName);
Append(m);
writeln(m, inStr);
closefile(m);
End;
End;

End.

Similar Posts:

  • linux内核编译手记(慢慢完善)

    内核目录 /usr/src/linux make menuconfig make make dep 执行 make zimage make modules (如果你在配置内核时,指定了模块的话) make modules_install cp /usr/src/linux/arch/i386/boot/zimage /vmlinuz

  • 刚发布一个开源的UMD电子书构建工具

    刚发布一个UMD电子书构建工具(http://code.google.com/p/umd-builder/) Umd Builder是一个开源的UMD电子书构建.制作工具.UMD是一种网上流行的电子书格式,广泛出现在各个电子书提供网站上.同时,UMD作为一种通用的.已压缩的.附带目录的电子书,在移动设备的优势身份明显. 目前,Umd Builder将会提供两个版本,一个是Java/Swing版本,另外一个C++/VC版本.Java版本是为各位Javaer准备的,而C++版本则是为一般用户准备的(

  • 手机APP,台前幕后在争啥?

    手机APP,台前幕后在争啥? JackZhai 一.一夜风靡的手机APP: "流量已经不是事儿,手机上网任我行." 随着3G.4G移动技术的普及,仅仅满足于打电话.聊天的时代早已过去,移动互联网时代正在向我们走来. 有统计说:现在每人每天要看150次手机:也有人说:其中一半是在看微信.广告也好,调侃也好,手机上网已经成为当下时尚,成为我们生活中的必需,这已经是不争的事实. 随着手机APP市场的高度繁荣,我们能够通过手机可以干的事情越来越多了.从天气预报到微信社交,从玩游戏到学英语,从打

  • [C1] 实现C1FlexGrid撤销还原功能

    采用设计模式中的"命令模式"实现C1FlexGrid的撤销还原功能,那就先从命令模式简单介绍开始吧. 一 命令模式 命令模式属于对象的行为型模式,将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销还原的操作. 采用命令模式,把发出命令的责任和执行命令的责任分隔开,委派给不同的对象.ICommand是命令的接口,指定所有命令必须实现两个方法Execute(执行,还原)和Undo(撤销):ConcreteCommand作为具体命令的

  • 个人应用开发详记. (一)

    心血来潮. 突然想开发一个视频分享社区类的APP. 于是想了就开始做~ 博客就来记录开发过程吧. 一方面提高自己技术水平. 另一方面自娱自乐吧. 框架沿用了之前公布的开源框架. 慢慢完善中. 此项目写完. 到时应该就有一个成熟的框架了. 后台部分打算使用第三方存储了. 时间还是不够啊~. 附上现在的效果. 后续部分打算加上弹幕. 一些数据整合. 还想加一些社区功能 看起来是个大工程. 估计要花不少时间了 目前播放器使用的是百度的SDK. 使用较简单, 优化也不错. 今天就到这吧~ -------

  • Linux代理服务全攻略

    代理提供两个方面的服务:一是让不能直接访问Internet的用户访问Internet,因为允许一台权限较大的计算机直接连接网络更安全也更易于管理:二是让那些已经能够访问Internet的用户可以更快或更广泛地访问,因为代理服务器可以将访问较为频繁的网页缓存到本地,当有人再次访问同一页面时,代理可以直接发送本地页面而无需浪费网络带宽.当然也可以二者兼而有之. 我们以应用最广泛的Squid为例,讨论Linux下的代理服务器.这里所指的仅仅是服务器端应用,不包括客户端配置.Squid的优点是功能强大.

  • 脚本,自动查找并拷贝库

    开始试着修改initrd做miniLinux,需要向其中添加命令,慢慢完善.但是用ldd命令查看哪些大串的库再拷贝实在是纠结~ 自动实现一下: 描述: 输入命令后,自动寻找命令位置,将命令拷到对应根位置后,并且查询到所需的库文件,逐一的拷贝到定义好的位置. 第二次修改给脚本添加了了参数,实现了可以在脚本中调用,并且直接传 递命令选项给脚本的功能:但是用户使用的时候可以指定以交互式方式进行: 缺陷:能够实现的拷贝有局限,由于对/lib./usr/lib. /usr/local/lib几个位置区分比

  • 【Express系列】第2篇——主程序的改造

    上一篇对项目的目录结构和 app.js 等一些文件做了一些改造,然而那只是开始. 接下来将做进一步的改造和完善. 我们先看看几个主要的脚本文件,下面的代码是我稍微修改过并添加注释的,方便理解每句代码的意思. app.js: var express = require('express'), path = require('path'), favicon = require('serve-favicon'), logger = require('morgan'), cookieParser = r

  • web前端开发总结(未完)

    由于我也是接触前端开发不久,所以呢,自己也会做点小功课,于是,我把前端能够用到的知识稍稍做了下总结,总结的不全面,以后会慢慢完善的! 移动前端开发基础 (总结----待完善) 1.移动前端开发:简而言之就是对于移动设备所开发的应用,Android .iPhone 是当今时代的主流系统,自从这两个手机操作系统的发布以来,Webapp(以WEB形式运行的应用程序,运行在高端的移动终端设备)便开始流行起来. 1>我们都知道在高端智能手机系统中有两种应用程序:一种是基于本地操作系统运行的APP 也就是n

  • 进行联系人操作的工具类

    这个工具类实现的是联系人增删改查的操作,但是并不是十分完美.如果遇到电话有空格,+86什么的可能会出问题,今后会慢慢完善.目前主要功能已经实现,具体原理可以参考这篇博文:http://xys289187120.blog.51cto.com/3361352/656766,http://www.2cto.com/kf/201402/280583.html 首先建立一个模型类: package com.kale.cprovider; public class ContactBean { private

Tags: