정보: github page code highlight는 델파이를 지원하지 않는다.

checksum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function GetCheckSum(FileName: string): DWORD;
var
F: file of DWORD;
P: Pointer;
Fsize: DWORD;
Buffer: array [0..500] of DWORD;
begin
FileMode := 0;
AssignFile(F, FileName);
Reset(F);
Seek(F, FileSize(F) div 2);
Fsize := FileSize(F) - 1 - FilePos(F);
if Fsize > 500 then Fsize := 500;
BlockRead(F, Buffer, Fsize);
Close(F);
P := @Buffer;
asm
xor eax, eax
xor ecx, ecx
mov edi , p
@again:
add eax, [edi + 4*ecx]
inc ecx
cmp ecx, fsize
jl @again
mov @result, eax
end;
end;

프로세스 실행 중인지 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function CheckProcessRunning(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;

프로세스 죽이기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function StopProcess(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;

string to html (html parsing)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm2.ParsingHTML;
var
IdHTTP: TIdHTTP;
Stream: TStringStream;
begin
IdHTTP := TIdHTTP.Create(nil);
Stream := TStringStream.Create;
try
try
IdHTTP.Get(edt1.Text, Stream);
JenkinsParsingResult := Stream.DataString;
except
//exception Raise... (올바르지 않은 주소일때)
end;
finally
tmr1.Enabled := True;
Stream.Free;
IdHTTP.Free;
end;
end;

File Drag & drop (파일 드래그 앤 드랍)

in formcreate

1
DragAcceptFiles(Handle, True);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm2.WMDROPFILES(var Msg: TWMDropFiles);
var
i, amount: Integer;
FileName: array[0..MAX_PATH] of Char;
begin
inherited;
try
Amount := DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, MAX_PATH);
for i := 0 to (Amount - 1) do
begin
DragQueryFile(Msg.Drop, i, FileName, MAX_PATH);
//FileName에 파일/폴더 path가 들어옵니다.
finally
DragFinish(Msg.Drop);
end;
end;

get md5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function GetCheckSum(FileName: string): string;
var
IdMD5: TIdHashMessageDigest5;
FS: TFileStream;
begin
IdMD5 := TIdHashMessageDigest5.Create;
FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
Result := IdMD5.HashStreamAsHex(FS);
finally
FS.Free;
IdMD5.Free;
end;
end;

작업표시줄 제어

auto hide를 always show로 변경

1
2
3
4
5
6
7
var
ABData: TAppBarData;
begin
ABData.cbSize := SizeOf(TAppBarData);
ABData.hWnd := FindWindow('SHELL_TRAYWND', nil);
ABData.lParam := LParam(0);
SHAppBarMessage($0000000a, ABData);

작업표시줄 숨기기. 숨기는게 아니고 레알루다가 없앰

1
2
3
4
5
var
hTaskbar: THandle;
begin
hTaskbar := FindWindow('Shell_TrayWnd', Nil);
ShowWindow(hTaskbar, SW_HIDE);

작업표시줄 보이기

1
2
3
4
5
var
hTaskbar: THandle;
begin
hTaskbar := FindWindow('Shell_TrayWnd', Nil);
ShowWindow(hTaskbar, SW_SHOWNORMAL);

인터넷 연결상태 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
function CheckInternetConnection(): Boolean;
const
// Local system has a valid connection to the Internet, but it might or might
// not be currently connected.
INTERNET_CONNECTION_CONFIGURED = $40;

// Local system uses a local area network to connect to the Internet.
INTERNET_CONNECTION_LAN = $02;

// Local system uses a modem to connect to the Internet
INTERNET_CONNECTION_MODEM = $01;

// Local system is in offline mode.
INTERNET_CONNECTION_OFFLINE = $20;

// Local system uses a proxy server to connect to the Internet
INTERNET_CONNECTION_PROXY = $04;

// Local system has RAS installed.
INTERNET_RAS_INSTALLED = $10;

var
InetState: DWORD;
hHttpSession, hReqUrl: HInternet;
begin
Result:= InternetGetConnectedState(@InetState, 0);
if (
Result
and
(
InetState and INTERNET_CONNECTION_CONFIGURED
= INTERNET_CONNECTION_CONFIGURED)
) then
begin
// so far we ONLY know there's a valid connection. See if we can grab some
// known URL ...
hHttpSession:= InternetOpen(
PChar(Application.Title), // this line is the agent string
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0
);
try
hReqUrl:= InternetOpenURL(
hHttpSession,
PChar('http://wwww.example.com'{ the URL to check }),
nil,
0,
0,
0
);
Result := hReqUrl <> nil;
InternetCloseHandle(hReqUrl);
finally
InternetCloseHandle(hHttpSession);
end;
end
else
if (
InetState and INTERNET_CONNECTION_OFFLINE = INTERNET_CONNECTION_OFFLINE
) then
Result := False; // we know for sure we are offline.
end;