星期五, 3月 27, 2009

建立classname,然後可以幫助判斷該classname是否關閉

註冊classname

public
procedure createparams(var params:tcreateparams);override;

const
TSFPatch729ClassName = 'abcde';

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
StrCopy(Params.WinClassName, _TSFPatch729ClassName);
end;

判斷classname

const
TSFPatch729ClassName = 'abcde';

begin
while isWindow(FindWindow(_TSFPatch729ClassName,nil)) do
begin
sleep(300);
end;
end;

星期一, 3月 23, 2009

檢查日期時間合不合法


procedure CheckDate(var nYear: Integer; var nMonth: Integer;
var nDay: Integer);
begin
//Check day
case nMonth of
1, 3, 5, 7, 8, 10, 12: begin
//31 days
if(nDay >=31) then
begin
//進位
nMonth:=nMonth+1;
nDay:=nDay-31;
if(nMonth = 2) then
begin
if(nDay >= 28) then
//還要進位
CheckDate(nYear, nMonth, nDay);
end
else if(nDay >= 30) then
//還要進位
CheckDate(nYear, nMonth, nDay);
end
else if(nDay < 0) then
begin
//退位
nMonth:=nMonth-1;
//if(nMonth
end;
end;//break
4, 6, 9, 11: begin
//30 days
end;//break
2: begin
if(((nYear-1900) mod 4) = 0) then
begin
//29 days
end
else
begin
//29 days
end;
end;//break
end;
//Check month
if(nMonth > 12) then
begin
Inc(nYear);
Dec(nMonth, 12);
end
else if(nMonth < 0) then
begin
Dec(nYear);
nMonth:=12+nMonth;
end;
end;
//---------------------------------------------------------------------------

procedure CheckDateTime(var nYear: Integer; var nMonth: Integer;
var nDay: Integer; var nHour: Integer; var nMin: Integer;
var nSec: Integer; var nMSec: Integer);
var
a: Integer;

begin
//Check Millisecond.
if(nMSec >= 1000) then
begin
//進位
a:=nMSec div 1000;
nSec:=nSec+a;
nMSec:=nMSec-a*1000;
end
else if(nMSec < 0) then
begin
//退位
a:=nMSec div 1000;
Inc(a);
nSec:=nSec-a;
nMSec:=a*1000+nMSec;
end;
//Check second.
if(nSec >= 60) then
begin
//進位
a:=nSec div 60;
nMin:=nMin+a;
nSec:=nSec-a*60;
end
else if(nSec < 0) then
begin
//退位
a:=nSec div 60;
Inc(a);
nMin:=nMin-a;
nSec:=a*60+nSec;
end;
//Check minute.
if(nMin >= 60) then
begin
//進位
a:=nMin div 60;
nHour:=nHour+a;
nMin:=nMin-a*60;
end
else if(nMin < 0) then
begin
//退位
a:=nMin div 60;
Inc(a);
nHour:=nHour-a;
nMin:=a*60+nMin;
end;
CheckDate(nYear, nMonth, nDay);
end;
//---------------------------------------------------------------------------

檔案的時間轉系統時間


function FileTimeToDateTime(var ft: FILETIME): TDateTime;
var
//ft2: FILETIME;
st: SYSTEMTIME;

begin
Result:=0;
if((ft.dwHighDateTime = 0) and (ft.dwLowDateTime = 0)) then
begin
Exit;
end;
//if(not FileTimeToLocalFileTime(ft, ft2)) then
//begin
// Exit;
//end;
//if(not FileTimeToSystemTime(ft2, st)) then
// Exit;
if(not FileTimeToSystemTime(ft, st)) then
Exit;
Result:=SystemTimeToDateTime(st);
end;

星期三, 3月 18, 2009

createFile鎖定且會closehandle刪除


hfile := CreateFile('C:\TWO.TXT', // open TWO.TXT
GENERIC_WRITE, // open for writing
0, // do not share
0, // no security
OPEN_ALWAYS, // open or create
FILE_FLAG_DELETE_ON_CLOSE,//FILE_ATTRIBUTE_NORMAL, // normal file
0); // no attr. template




unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
hfile:THandle;

public
{ Public declarations }
end;

FileHeader = packed record //25 bytes
uid : int64;
mode : array[1..5] of Char; //模式
begin_time : TDateTime; //開始錄影時間
end_time : TDateTime; //結束錄影時間
total_frame : DWord; //總共Frame 0~65535
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


function IsFileInUse(FileName: TFileName): Boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(FileName) then Exit;
HFileRes := CreateFile(PChar(FileName),
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;

procedure TForm1.Button1Click(Sender: TObject);
var
uidHeader : int64;
BytesRead : Cardinal; //讀寫用參數
begin
hfile := CreateFile('C:\TWO.TXT', // open TWO.TXT
GENERIC_READ, // open for READ
0, // do not share
0, // no security
OPEN_ALWAYS, // open or create
FILE_FLAG_DELETE_ON_CLOSE,//FILE_ATTRIBUTE_NORMAL, // normal file
0); // no attr. template

ReadFile(hFile, uidHeader, SizeOf(uidHeader), BytesRead, nil);
if uidHeader=23342542 then
caption :='good';

//ShowMessage(buf);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
caption := booltostr(IsFileInUse('C:\TWO.TXT'));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
closehandle(hfile);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
a_fo : TSTReam;
h : FileHeader;
begin
a_fo:=TFileStream.Create('C:\TWO.txt',fmCreate);
h.uid := 23342542;
lstrcpy(@h.mode[1], pchar('abcde'));
a_fo.Write(h, sizeof(h));
a_fo.free;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
a_fo : TSTReam;
h : FileHeader;
z : int64;
begin
a_fo:=TFileStream.Create('C:\TWO.txt',fmOpenRead);
a_fo.Position := 0;
a_fo.Read(h, sizeof(h));
z:= h.uid;
a_fo.free;

end;

procedure TForm1.Button6Click(Sender: TObject);
var
uidHeader : int64;
BytesRead, BytesWrite : Cardinal; //讀寫用參數
pBuf:array[0..1024-1]of byte;
nFileSize : integer;
begin
hfile := CreateFile('C:\BT626.pdf', // open TWO.TXT
GENERIC_WRITE, // open for writing
0, // do not share
0, // no security
OPEN_ALWAYS, // open or create
FILE_ATTRIBUTE_NORMAL,//FILE_ATTRIBUTE_NORMAL, // normal file
0); // no attr. template
nFileSize:= GetFileSize(hfile,nil);

caption := inttostr(nFileSize);

ReadFile(hFile, pBuf, nFileSize, BytesRead, nil);
SetFilePointer(hFile,0,nil,FILE_End);
WriteFile(hFile,pBuf,nFileSize,BytesWrite,nil);
closehandle(hfile);
end;

end.

星期一, 3月 16, 2009

判斷檔案是否被鎖住


function IsFileInUse(FileName: TFileName): Boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(FileName) then Exit;
HFileRes := CreateFile(PChar(FileName),
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;

星期五, 3月 13, 2009

取得磁碟剩餘空間


var
g_sTempDriver : integer;
DiskFreeSize : int64;
begin
g_sTempDriver := Ord(UpperCase(g_sTempPath)[1])-64; //UpperCase(g_sTempPath)[1]某個槽
DiskFreeSize := DiskFree(g_sTempDriver);

//DiskFreeSize div 1024 = bytes

取得APP PATH


procedure TForm1.FormCreate(Sender: TObject);
begin
caption := extractfilepath(ParamStr(0));
end;

星期四, 3月 05, 2009

避免Delphi的TDateTimePicker的onChange事件會執行二次


procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
if (DateTimePicker1.DroppedDown) then
exit;
DateTimePicker1CloseUp(sender);
end;

procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
//你不想執行二次的程式碼
end;