📄 unifunc.pas
字号:
unit uniFunc;
interface
uses
Windows, Forms, Controls, SysUtils, Messages, Classes, Registry, IniFiles,
ActiveX, ShlObj, ComObj, SHDocVw, MSHTML, WinInet, UrlMon, ComCtrls;
function Big5ToGB(BIG5Str:String): AnsiString;
function GBToBig5(GBStr:String): AnsiString;
function GBChtToChs(GBStr:String): AnsiString;
function GBChsToCht(GBStr:String): AnsiString;
function FrameToTime(Frame:Int64):String;
function TimeToSec(_Time:TTime):Int64;overload;
function TimeToSec(sTime:String='0:00:00'):Int64;overload;
function TimeToMSec(_Time:TTime):Int64;overload;
function TimeToMSec(sTime:String='0:00:00'):Int64;overload;
function SecToTime(Sec:Integer):String;
//function SecToTime(Sec:Integer):TTime;
function MSecToTime(MSec:Int64):String;
function CompareVersion(AppVer,NewVer:String):Boolean;
function Iif(Expression:Boolean;Str1,Str2:String):String;overload;
function Iif(Expression:Boolean;Int1:Integer;Int2:Integer):Integer;overload;
function IsFlash(SouSFP:String):Boolean; // 判断是否为 EXE 型的 Flash 文件
function ExtractRes(ResType,ResName,ResNewName:String):Integer;
function WinExecAndWait32(FileName,Options:String;Visibility:integer):Integer;
function BrowseFolder(Title:String;OwnerHandle:THandle;var Dir:String):Boolean;
function FindFiles(const Path,Mask:String;var FileList:TStrings;const SubFolder,SubFolderMax:Word;var bSearchStop:Boolean;Handle:THandle=0):Integer;
function ParsePath(const AppPath,Path:String):String;
function GetType(const FileName:String):Integer; // 取相应的图标
function RightStr(Str:String;SubLen:Integer):String;
function PosEx(const SubString,Str:String;var SubIndex:TStrings):Integer;
function PosR(const SubString,Str:String):Integer;
procedure TimeDelay(Interval:Cardinal=1000);
function ReadRegInteger(MainKey:DWORD;SubKey:String;CodeName:String):Integer;
function ReadRegString(MainKey:DWORD;SubKey:String;CodeName:String):String;
Procedure WriteRegInteger(MainKey:DWORD;SubKey:String;CodeName:String;CodeValue:Integer);
Procedure WriteRegString(MainKey:DWORD;SubKey:String;CodeName:String;CodeString:String);
Procedure DeleteRegValue(MainKey:DWORD;SubKey:String;ValueName:String);
Procedure DeleteRegSubKey(MainKey:DWORD;SubKey:String;SubName:String);
function ReadIni_Int(iniFileName:String; OptionName:String;KeyName:String):Integer;
function ReadIni_Str(iniFileName:String; OptionName:String;KeyName:String):String;
procedure WriteIni_Int(iniFileName:String; OptionName:String;KeyName:String;KeyCode:Integer);
procedure WriteIni_Str(iniFileName:String; OptionName:String;KeyName:String;KeyCode:String);
function ExtractFolder(const strPath:String;var Folders:TStrings):Integer;
function MkDirEx(PathName:String):Boolean;
function RepairURL(const URL:String):String;
function SimURL(const URL:String):String;
function ComposeURL(const URL:String):String;
function GetURL(const URLs:String;var URLList:TStrings):Integer;overload;
function GetURL(var WebBrowser:TWebBrowser;var Link,LinkName:TStrings):String;overload;
function GetMediaFile(const URL:String;var FileName:String;var bBoBoMedia:Boolean):Boolean;
function SetKPlay(RegKey,FileName:String):Boolean;
function SetIEMenu(MenuCaption,FileName:String;CreateMenu:Boolean=True):Boolean;
function SetUnInstall(AppTitle,FileName,AppDescriptive:String):Boolean;
procedure ShellLink(const DestPath,LinkName,LinkAppPath,LinkArgs,Description:String;IconIndex:Integer=0);
function InternetConnected():Boolean;
function DownloadFile(const URL,FileName:String):Boolean;
function ClearIECache():Boolean;
function SetFileAssociate(FileExt,FileType,Description,ExeFile:String):Boolean;
function SimString(SubStr,NewStr,Str:String):String;
const
NewLine='\n'; //换行标识符,加载语言包时要转换成 #13#10
vbCrLf=#13#10; //链接换行符(两个链之间的分隔符)
// 以下是支持的文件格式
isIni =99; { 打开的是列表文件,要根据其内容添加到播放列表中 }
isError =-1; { 不支持的文件格式,无返回图标 }
isCD =0; { CD 音乐 }
isExe =1; { Exe 格式的 Flash 动画 }
isSwf =2; { Swf 格式的 Flash 动画 }
isMidi =3; { (MID / RIM) Midi 音乐 }
isMp3 =4; { Mp3 歌曲 }
isReal =5; { (Ra / Rm) RealAudio 网络音/视频 }
isUrl =6; { 网络上的动画/音频/视频 }
isVideo =7; { (DAT / AVI / MPG / MPEG) 电影文件 }
isMusic =8; { MPEG 音频 }
isWave =9; { Wav 声音文件 }
isMp4A =10; { Mp4 歌曲 }
isMp4V =11; { Mp4 视频 }
isAIFF =12; { AIFF 音频 }
isAU =13; { AU 音频}
isDShow =14; { DirectShow }
isQTime =15; { QuickTime }
isDVD =16; { DVD }
implementation
//内码转换
{进行big5转GB内码}
function Big5ToGB(BIG5Str:String): AnsiString;
var
Len: Integer;
pBIG5Char: PChar;
pGBCHSChar: PChar;
pGBCHTChar: PChar;
pUniCodeChar: PWideChar;
begin
//String -> PChar
pBIG5Char := PChar(BIG5Str);
Len := MultiByteToWideChar(950, 0, pBIG5Char, -1, nil, 0);
GetMem(pUniCodeChar, Len * 2);
ZeroMemory(pUniCodeChar, Len * 2);
//Big5 -> UniCode
MultiByteToWideChar(950, 0, pBIG5Char, -1, pUniCodeChar, Len);
Len := WideCharToMultiByte(936, 0, pUniCodeChar, -1, nil, 0, nil, nil);
GetMem(pGBCHTChar, Len * 2);
GetMem(pGBCHSChar, Len * 2);
ZeroMemory(pGBCHTChar, Len * 2);
ZeroMemory(pGBCHSChar, Len * 2);
//UniCode->GB CHT
WideCharToMultiByte(936, 0, pUniCodeChar, -1, pGBCHTChar, Len, nil, nil);
//GB CHT -> GB CHS
LCMapString($804, LCMAP_SIMPLIFIED_CHINESE, pGBCHTChar, -1, pGBCHSChar, Len);
Result := string(pGBCHSChar);
FreeMem(pGBCHTChar);
FreeMem(pGBCHSChar);
FreeMem(pUniCodeChar);
end;
{进行GB转BIG5内码}
function GBToBig5(GBStr:String): AnsiString;
var
Len: Integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
pUniCodeChar: PWideChar;
pBIG5Char: PChar;
begin
pGBCHSChar := PChar(GBStr);
Len := MultiByteToWideChar(936, 0, pGBCHSChar, -1, nil, 0);
GetMem(pGBCHTChar, Len * 2 + 1);
ZeroMemory(pGBCHTChar, Len * 2 + 1);
//GB CHS -> GB CHT
LCMapString($804, LCMAP_TRADITIONAL_CHINESE, pGBCHSChar, -1, pGBCHTChar, Len * 2);
GetMem(pUniCodeChar, Len * 2);
ZeroMemory(pUniCodeChar, Len * 2);
//GB CHT -> UniCode
MultiByteToWideChar(936, 0, pGBCHTChar, -1, pUniCodeChar, Len * 2);
Len := WideCharToMultiByte(950, 0, pUniCodeChar, -1, nil, 0, nil, nil);
GetMem(pBIG5Char, Len);
ZeroMemory(pBIG5Char, Len);
//UniCode -> Big5
WideCharToMultiByte(950, 0, pUniCodeChar, -1, pBIG5Char, Len, nil, nil);
Result := string(pBIG5Char);
FreeMem(pBIG5Char);
FreeMem(pGBCHTChar);
FreeMem(pUniCodeChar);
end;
{进行GBK繁体转简体}
function GBChtToChs(GBStr:String): AnsiString;
var
Len: Integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
begin
pGBCHTChar := PChar(GBStr);
Len := MultiByteToWideChar(936, 0, pGBCHTChar, -1, nil, 0);
GetMem(pGBCHSChar, Len * 2 + 1);
ZeroMemory(pGBCHSChar, Len * 2 + 1);
//GB CHS -> GB CHT
LCMapString($804, LCMAP_SIMPLIFIED_CHINESE, pGBCHTChar, -1, pGBCHSChar, Len * 2);
Result := string(pGBChsChar);
//FreeMem(pGBCHTChar);
FreeMem(pGBCHSChar);
end;
{进行GBK简体转繁体}
function GBChsToCht(GBStr:String): AnsiString;
var
Len: Integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
begin
pGBCHSChar := PChar(GBStr);
Len := MultiByteToWideChar(936, 0, pGBCHSChar, -1, nil, 0);
GetMem(pGBCHTChar, Len * 2 + 1);
ZeroMemory(pGBCHTChar, Len * 2 + 1);
//GB CHS -> GB CHT
LCMapString($804, LCMAP_TRADITIONAL_CHINESE, pGBCHSChar, -1, pGBCHTChar, Len * 2);
Result := string(pGBCHTChar);
FreeMem(pGBCHTChar);
//FreeMem(pGBCHSChar);
end;
//把帧数转化成时间
function FrameToTime(Frame:Int64):String;
var
_timeStamp:TTimeStamp;
_dateTime:TDateTime;
_msec:Comp;
begin
_msec:=Trunc(Frame/10000);
_timeStamp:=MSecsToTimeStamp(_msec);
_timeStamp.Date:=1;
_dateTime:=TimeStampToDateTime(_timeStamp);
Result:=TimeToStr(_dateTime);
end;
//把时间转换成秒
function TimeToSec(_Time:TTime):Int64;
var
_timeStamp:TTimeStamp;
begin
_timeStamp:=DateTimeToTimeStamp(_Time);
_timeStamp.Date:=1;
Result:=_timeStamp.Time div 1000; //毫秒转化为秒
end;
//把时间转化成秒
function TimeToSec(sTime:String='0:00:00'):Int64;
var
_timeStamp:TTimeStamp;
begin
try
_timeStamp:=DateTimeToTimeStamp(StrToTime(sTime));
_timeStamp.Date:=1;
Result:=_timeStamp.Time div 1000; //毫秒转化为秒
except
Result:=-1;
end;
end;
//把时间转换成毫秒
function TimeToMSec(_Time:TTime):Int64;
var
_timeStamp:TTimeStamp;
begin
_timeStamp:=DateTimeToTimeStamp(_Time);
_timeStamp.Date:=1;
Result:=_timeStamp.Time; //毫秒
end;
//把时间转换成毫秒
function TimeToMSec(sTime:String='0:00:00'):Int64;
var
_timeStamp:TTimeStamp;
begin
try
_timeStamp:=DateTimeToTimeStamp(StrToTime(sTime));
_timeStamp.Date:=1;
Result:=_timeStamp.Time; //毫秒
except
Result:=-1; //参数错误
end;
end;
//把秒转化成时间
function SecToTime(Sec:Integer):String;
var
_timeStamp:TTimeStamp;
begin
_timeStamp:=MSecsToTimeStamp(Sec*1000); //秒转为毫秒
_timeStamp.Date:=1;
Result:=TimeToStr(TimeStampToDateTime(_timeStamp));
end;
//把毫秒转化成时间
function MSecToTime(MSec:Int64):String;
var
_timeStamp:TTimeStamp;
begin
_timeStamp:=MSecsToTimeStamp(MSec);
_timeStamp.Date:=1;
Result:=TimeToStr(TimeStampToDateTime(_timeStamp));
end;
function CompareVersion(AppVer,NewVer:String):Boolean;
var
Version1,Version2:TStrings;
Major,Minor,Release,Build:Integer;
fMajor,fMinor,fRelease,fBuild:Integer;
begin //比较版本号
Result:=False;
if (AppVer<>'') and (NewVer<>'') then
begin
Version1:=TStringList.Create;
Version2:=TStringList.Create;
try
ExtractStrings(['.'],[' '],PChar(AppVer),Version1);
ExtractStrings(['.'],[' '],PChar(NewVer),Version2);
try //3.0.1.100 2.1.1.150
//现有版号
fMajor:=StrToInt(Version1.Strings[0]);
fMinor:=StrToInt(Version1.Strings[1]);
fRelease:=StrToInt(Version1.Strings[2]);
fBuild:=StrToInt(Version1.Strings[3]);
//新版本号
Major:=StrToInt(Version2.Strings[0]);
Minor:=StrToInt(Version2.Strings[1]);
Release:=StrToInt(Version2.Strings[2]);
Build:=StrToInt(Version2.Strings[3]);
// 比较版本号
if fMajor>Major then Result:=True // 主版本号
else if fMajor<Major then Result:=False
else if fMinor>Minor then Result:=True // 副版本号
else if fMinor<Minor then Result:=False
else if fRelease>Release then Result:=True // 修正号
else if fRelease<Release then Result:=False
else if fBuild>Build then Result:=True // 编译号
else if fBuild<Build then Result:=False
else Result:=True; // 相同的版本号
except
Result:=False;
end;
finally
Version1.Free;
Version2.Free;
end;
end;
end;
{ 如果"Expression"为 True 返回 Int1 否则返回 Int2}
function Iif(Expression:Boolean;Int1:Integer;Int2:Integer):Integer;
begin
if Expression then
Result:=Int1
else
Result:=Int2;
end;
function Iif(Expression:Boolean;Str1,Str2:String):String;
begin
if Expression then
Result:=Str1
else
Result:=Str2;
end;
function IsFlash(SouSFP:String):Boolean;
var
SourceStream:TFileStream;
SwfFileSize:Cardinal;
begin
try
SourceStream:=TFileStream.Create(SouSFP,fmOpenRead or fmShareExclusive); // 打开EXE形式的源文件
try
SourceStream.Seek(-2*Sizeof(Integer), soFromEnd); // 读取文件标志
SourceStream.ReadBuffer(SwfFileSize, sizeof(integer));
Result:=(SwfFileSize=$FA123456);// 判断读到的文件标志是否和FA123456相同,判断是否是Macromedia官方格式的Flash文件
finally
SourceStream.Free; // OK,释放文件流
end;
except
Result:=False;
end;
end;
function ExtractRes(ResType,ResName,ResNewName:String):Integer;
var
Res:TResourceStream;
ResPath:String;
begin
if Length(Trim(ResNewName))>=4 then
begin
ResPath:=ExtractFilePath(ResNewName);
ResPath:=Iif(RightStr(ResPath,1)='\',Copy(ResPath,1,Length(ResPath)-1),ResPath);
if MkDirEx(ResPath) then // 如果目录不存在就创建它
begin
try
Res:=TResourceStream.Create(Hinstance,ResName,Pchar(ResType));
try
if FileExists(ResNewName) then DeleteFile(PAnsiChar(ResNewName));
Res.SavetoFile(ResNewName);
Result:=0; // 获取资源成功
except
Result:=2; // 无法写入文件
end;
Res.Free;
except
Result:=3; // 无法获取资源
end;
end
else Result:=1; // 目录不存在,而且又无法创建
end
else Result:=4; // 目标文件名错误
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -