Delphi笔记[四]

GetWindowText(Edit1.handle,Name,L) 获取Edit1内的字符到Name中,Name长度最大为L
GetWindowTextLength(Edit1.handle) 返回Edit1中的字符长度

hWnd := FindWindow( ‘IEFrame’, nil );返回浏览器的句柄
GetWindowText( hWnd, s, 128 );将浏览器中的标题考到S中去

MessageBeep(0);发出声音,选项有:
0 叮的一声
MB_ICONASTERISK SystemAsterisk //较好听
MB_ICONEXCLAMATION SystemExclamation
MB_ICONHAND SystemHand
MB_ICONQUESTION SystemQuestion
MB_OK SystemDefault

ShowCursor(False) 隐藏鼠标 ShowCursor(True) 显示鼠标
FindWindow(‘Progman’, nil); 返回桌面图标的句柄

procedure TForm1.Button5Click(Sender: TObject); //最小化全部窗体
var
h:HWnd;
begin
h:=handle;
while h > 0 do   //当程序在运行
begin
if isWindowVisible(h) then //如果窗体可见(即没有最小化)
PostMessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0);
h:=GetNextWindow(h,GW_HWNDNEXT);
end;
end;

WM_SYSCOMMAND消息:
SC_CLOSE SC_HOTKEY SC_HSCROLL SC_KEYMENU SC_MAXIMIZE SC_MINIMIZE SC_MOUSEMENU SC_MOVE SC_NEXTWINDOW SC_PREVWINDOW SC_RESTORE
SC_SCREENSAVE SC_SIZE SC_TASKLIST SC_VSCROLL SC_MONITORPOWER 显示器

PostMessage只负责将消息放到消息队列中,不确定何时及是否处理
SendMessage要等到受到消息处理的返回码(DWord类型)后才继续
PostMessage执行后马上返回
SendMessage必须等到消息被处理后才会返回

模拟按键:
PostMessage(Form1.Handle, WM_KEYDOWN, VK_TAB, 0);模拟在窗体中按下Tab键
PostMessage(Edit1.Handle, WM_KEYDOWN, 65, 0);模拟在Edit控件中按下a键,其中65也可以换成VK_A,表示A键

WM_NCHITTEST
移动鼠标,按住或释放鼠标时发生

procedure WMNCHitTest(var Msg: TMessage); message WM_NCHITTEST;
begin
inherited; // 这样,移动就不可能了…
Msg.Result := HTCLIENT;
end;

GetCursorPos(P);
Hd := WindowFromPoint(P); //获取当前鼠标所在的句柄

KeyPreview := true; //可以接收键盘操作,在FormCreate中写入

GetCursorPos(P);
Hd := WindowFromPoint(P); //获得句柄
SendMessage(Hd, WM_GETTEXT, 1024, Integer(@Buf));
edit1.Text := Buf;
if string(buf)=’开始’ then
SetWindowText(Hd,’陈明’); 修改开始菜单中的文字
或 if SetWindowText(Hd,PChar(Edit1.Text)) <> false then 成功

if Shift >= [ssShift] 如果按下了Shift键,按键事件的Shift是一个集合

ExitWindowsEx(EWX_POWEROFF,0); //关闭系统并关闭电源
EWX_LOGOFF以其他用户身份登录
EWX_REBOOT重新启动计算机
EWX_SHUTDOWN安全关机
EWX_FORCE强行关机

str2:=StringReplace ( str1, ‘ ‘, ”, [rfReplaceAll] ); 将str1中的空格换成无,也就是去掉空格。
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
type TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);
rfReplaceAll 替换所有 rfIgnoreCase 忽略大小写

function ChangeFileExt(const FileName, Extension: string): string;
将FileName文件的后缀改成Extension,如Extension为空则为去掉后缀。并没有真正的更改文件的文件名,只是返回一个新的字符串

function ReadString(const Section, Ident, Default: String): String;
Section为该ini文件的节名,Ident为键值,返回该键值对应的相等的值,出现错误则返回默认的参数Default: String

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;                        //制作任意拖动窗体运行界面

浅谈Object Pascal的指针:http://www.mybr.org/thread-10284-1-4.html

GetWindowsDirectory(
LPTSTR lpBuffer, // address of buffer for Windows directory
UINT uSize        // size of directory buffer
);      获取系统目录(C:\WINDOWS\System32)到lpBuffer中,其中uSize为lpBuffer的大小
GetMem(MySysPath,255);                    GetMem 建立一指定大小的动态变量,并将指针指向该处
GetSystemDirectory(MySysPath,255);
ShowMessage(‘系统目录是:’+mysyspath);

MD5加密:
在USES中加入 IdHashMessageDigest,IdHash 这两个单元

function GetMD5Hash(Str:String):String;
var
   md5 : TIdHashMessageDigest5;
   longWordRec : T4x4LongWordRecord;
begin
   md5 := TIdHashMessageDigest5.Create;
   longWordRec:=md5.HashValue(Trim(Str)); //加密 {}
   Result:= md5.AsHex(longWordRec);
   md5.Free;
end;

调用方法 GetMD5Hash(’123456′) 直接返回123456的MD5值

PostMessage(Button1.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(Button1.Handle,WM_LBUTTONUP,0,0);有了BUTTONDOWN必须也要有BUTTONUP否则鼠标会一直处于按下状态,这两句话等效于:Button1.Click;

IntToHex(int Value, int Digits)
功能: 把一个整型数字转换成16进制形式的字符串. Value是被转换的整数, Digits是指16进制字符串的位数.第一个是要转换的十进制数,第二个是返回十六进制数的最小长度

procedure HasFormat(Format: Word): Boolean;查看剪切板里面是否含有Format类的数据
Format有如下选项:
CF_TEXT Text with a CR-LF combination at the end of each line.
CF_BITMAP A Windows bitmap graphic.
CF_METAFILEPICT A Windows metafile graphic.
CF_PICTURE An object of type TPicture.
CF_COMPONENT Any persistent object.

if Clipboard.HasFormat(CF_TEXT) then   //如果剪切板里面的内容是文本格式
begin
    Memo1.Text := Clipboard.AsText;
end;

在uses添加IdHashMessageDigest

procedure TForm1.Button1Click(Sender: TObject);
var
    mymd5:TIdHashMessageDigest5;
begin
    mymd5:=TIdHashMessageDigest5.Create;
    ShowMessage(mymd5.AsHex(mymd5.HashValue(‘admin’)));     //计算字符串admin的MD5
    ShowMessage(Copy(mymd5.AsHex(mymd5.HashValue(‘admin’)),9,16));     //获取16位字符串MD5
    ShowMessage(mymd5.AsHex(mymd5.HashValue(TFileStream.Create(‘e:\VRMPVOL_CNsp2.iso’,fmOpenRead))));       //计算文件MD5
     mymd5.Free;
end;

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);//关闭显示器
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);打开显示器

function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean;
Caption:标题 const Root:从哪个根目录开始可以为空 out Directory:将目录返回到这个参数上,如:SelectDirectory(‘请选择路径:’,”,Paths_);

控件的Hint属性为当运行时用户指针指到这个控件上时的提示文字

BOOL ClipCursor(
CONST RECT *lpRect   // pointer to structure with rectangle
);该函数把光标限制在屏幕上的一个矩形区域内,例:
var rect:TRect;
begin
rect.Left:=100;
rect.Top:=100;
rect.Bottom:=200;
rect.Right:=200;
ClipCursor(@rect);
end;

获得键值的方法:
在keydown事件里面,Showmessage(IntToStr(Key));

启动记事本并加载一个纯文本文件:
ShellExecute(handle,’open’,pchar(‘notepad’),pchar(‘d:\123.txt’),0,SW_SHOW);
也可以为notepad.exe
打印一个文件:
ShellExecute(Handle, ‘print’, PChar(‘c:\readme.txt’),nil, nil, SW_SHOW);
用Windows Explorer打开一个文件夹:
ShellExecute(Handle, ‘explore’, PChar(‘c:\windows)’,nil, nil, SW_SHOW);
运行一个DOS命令并立即返回:
ShellExecute(Handle, ‘open’, PChar(‘command.com’),PChar(‘/c copy file1.txt file2.txt’), nil, SW_SHOW);

if fileExists(‘C:\WINDOWS\explorer.exe’) then
begin
showmessage(‘文件存在!’);
end;
//再来一个,如果文件不存在就创建 ^_^
if fileExists(‘nsgtao.dat’) then
begin
FileCreate(‘nsgtao.dat’); //此语句创建一个文件
end;
//这个例子很好,能用在很多地方
目录操作
if not DirectoryExists(‘nsgtao’) then
begin
if not CreateDir(‘nsgtao’) then
begin
ShowMessage(‘创建目录不成功!’);
end;
end;

S扫描器:
s1:起始IP s2:端口 s3:结束IP s4:线程

s5:=’cmd.exe /k s.exe’+#32+’tcp’+#32+s1+#32+s3+#32+s2+#32+s4+#32+’/save’
winexec(pchar(s5),sw_show);
ShellExecute(handle,’open’,pchar(‘cmd’),pchar(‘\c ‘+s5),nil,SW_SHOW);

以上两句代码都可以达到效果,用第二句较好,cmd.exe也可以为cmd但是有可能为cmd.bat所有写cmd.exe较好

最简单的自我删除:

begin
WinExec(Pchar(‘cmd /c erase /F ‘ + GetCommandLine),0);
ExitProcess(0);
end;
BOOL EnumChildWindows(
HWND hWndParent,         // handle to parent window // 父窗口句柄
WNDENUMPROC lpEnumFunc, // callback function // 回调函数的地址
LPARAM lParam            // application-defined value // 你自已定义的参数
);可以枚举一个父窗口的所有子窗口,第三个参数是用户自己定义的,用来传递给回调函数

int GetClassName(
HWND hWnd,           // handle of window
LPTSTR lpClassName, // address of buffer for class name
int nMaxCount        // size of buffer, in characters
);该函数获得指定窗口所属的类的类名。

使窗体全屏显示的代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
//覆盖任务栏
Self.BorderStyle := bsNone;
Self.Left := 0;
Self.Top := 0;
Self.Width := Screen.Width;
Self.Height := Screen.Height;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//保留任务栏
Self.BorderStyle := bsNone;
Self.Left := Screen.WorkAreaLeft;
Self.Top := screen.WorkAreaTop;
Self.Width := Screen.WorkAreaWidth;
Self.Height := Screen.WorkAreaHeight;
end;

提取文件图标:

var
Icon:TIcon;
IconIndex: Word;
begin
ICON:=TICON.Create;      //创建一个TICON
IconIndex:= 0;
Icon.Handle:=ExtractAssociatedIcon(Application.Handle, PChar(FileName),

IconIndex);
//Icon.SaveToFile(‘temp1.ico’);
ImageIcon.Picture.Icon:= Icon;//ImageIcon为一个Image控件
ICON.Free;
end;

ObjectBinaryToText(Input:TStream,Output:TStream);
将流对象Input中的二进制数据转换成字符格式,存放在流对象Output中

HotKeySpy组件用法:
添加HotKeys,双击组件添加代码

procedure TForm1.HotKeySpy1HotKeys(Sender: TObject; HotKeyIndex: Word);
begin
     if HotKeyIndex=1 then
     showmessage(’123′);
end;

其中HotKeyIndex为相应的HotKeys的Index值,

MSNPopUp组件的用法,功能是在右下角像MSN一像弹出一个对话框

procedure TForm1.Button1Click(Sender: TObject);
begin
     MSNPopUp1.Options:= MSNPopUp1.Options-[msnAutoOpenURL]; //不自动打开网页
     MSNPopUp1.Title := ‘审核提醒’;
     MSNPopUp1.Text := ‘dfsdfsdfsfsdfsf’;
     MSNPopUp1.ShowPopUp;
end;
//点击MSNPopUp里面的URL时的事件处理代码
procedure TForm1.MSNPopUp1URLClick(Sender: TObject; URL: String);
begin
form2.Show;
end;

MSNPopUp组件的属性:
Opinions里面,msnAutoOpenURL如果有这个选项,则当点Text时会自动打开URL属性里面的那个网站Font为Text的字体
TitleFont当然是标题字体了
HoverFont为当鼠标指到Text上时Text的字体

Application.HintColor := TColor($FFD7C1); //背景颜色

控件的Hint设置:

                Button1.ShowHint:=true; //设置为显示Hint
                Application.HintColor:=clRed; //窗体的背景(Hint)颜色
                Button1.Hint:=’文字’; //设置要显示的内容
BOOL CopyFile(
LPCTSTR lpExistingFileName,
                          // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists      // flag for operation if file exists
); 将lpExistingFileName拷贝成lpNewFileName,如果bFailIfExists为真,则如果存在目录文件lpNewFileName则删掉重新写,如果为假,则不重写
GetDriveType(
LPCTSTR lpRootPathName   // pointer to root path
);lpRootPathName 硬盘名,如C:\等,返回为硬盘的类型,类型有:
DRIVE_UNKNOWN                 The drive type cannot be determined.
DRIVE_NO_ROOT_DIR             The root directory does not exist.
DRIVE_REMOVABLE               The disk can be removed from the drive.
DRIVE_FIXED                   The disk cannot be removed from the drive.
DRIVE_REMOTE                  The drive is a remote (network) drive.
DRIVE_CDROM                   The drive is a CD-ROM drive.
DRIVE_RAMDISK                 The drive is a RAM disk.

FindFirst和FindNext两个搭配的函数,如果执行成功则返回为0