随笔 - 110  文章 - 28 评论 - 26 

留言簿(1)

随笔分类(103)

随笔档案(110)

文章分类(25)

文章档案(28)

新闻档案(3)

友情连接

  • 小蜜蜂
  • 马氏膏药网
  • 淋巴结肿大,淋巴结核,淋巴结炎 乳腺增生,小叶增生 颈椎病,腰椎病,腰间盘突出 马氏淋巴消炎贴,马氏增生散结贴,马氏关节肌肉贴
  • 黑客基地
  • 全球最大的黑客门户网站

最新随笔

积分与排名

  • 积分 - 143651
  • 排名 - 44

最新评论

阅读排行榜

评论排行榜

假设你的消息这样定义:  
  Const    
      WM_YOURMSG=WM_USER+100;  
  你的过程定义可以这样:  
        procedure   YourProc(var   MSG:TMsg);message   WM_YOURMSG;  
  这样,当你的窗口收到该消息时,将调用这个过程。  
  例如:  
   
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls;  
  Const  
    WM_MINE=WM_USER+100;  
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          procedure   Mine(var   msg:TMSG);message   WM_MINE;  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.DFM}  
   
  procedure   TForm1.Mine(var   msg:   TMSG);  
  begin  
      Showmessage('OK');  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
  Sendmessage(handle,WM_MINE,0,0);  
  end;  
   
  end.  
  这个单元定义了一个消息,当按下按钮时,向自己窗口发送这个消息(当然,不一定发送到自己的窗口,处理消息的过程也可以在其他地方),然后弹出个对话框。这当然是多此一举,不过,只是为了说明使用方法。  
   
  至于想处理MOUSECLICK时的MOUSE位置和状态,你可以不处理ONCLICK事件,而在ONMOUSEDOWN事件里处理。这个事件提供的参数分别告诉了你  
  Sender:那一个按钮接收这个鼠标事件:  
  Shift:当前鼠标的按钮状态是什么样,其他键盘状态是什么样,我们一般用  
  if   Shift=[ssleft]来判断是否鼠标左键点击,有关方括号里的值,你可以查询DELPHI的在线帮助,关键字:TShiftState  
  Button:表明那一个鼠标键被按下,  
  X,Y:鼠标在接收这个鼠标事件时的位置,如果你需要的是屏幕的位置可以这样做:  
   
  procedure   TForm1.Button1MouseDown(Sender:   TObject;   Button:   TMouseButton;  
      Shift:   TShiftState;   X,   Y:   Integer);  
  var  
      CurrentPos:TPoint;  
  begin  
      if   shift=[ssRight]   then   begin  
      CurrentPos:=TButton(Sender).clientToScreen(point(x,y));  
      {或者,GetcursorPos(CurrentPos)}  
      Showmessage(format('X:%d,Y:%d',[CurrentPos.x,CurrentPos.y]));  
  end;  
  //这个过程将使你鼠标在按钮上点下时弹出对话框,标明当前的位置。  
  end;  
  ;  
  这样CurrentPos的X,Y就是当前屏幕的坐标。
posted @ 2009-02-02 23:06 小叶子 阅读(4780) | 评论 (0)编辑 收藏

这个函数是GetHostByName()异步版本
这个函数不会引起阻塞,由于使用时要用到消息,所以有点麻烦,不过会者不难
声明如下:
HANDLE PASCAL FAR WSAAsyncGetHostByName ( HWND hWnd,
unsigned int wMsg, const char FAR * name, char FAR * buf,
int buflen );
         
hWnd 当异步请求完成时,应该接收消息的窗口句柄.
wMsg 当异步请求完成时,将要接收的消息.
name 指向主机名的指针.
buf 接收hostent数据的数据区指针.注意该数据区必须大于hostent结构的大小.这是因为不仅Windows Sockets实现要用该数据区域容纳hostent结构,hostent结构的成员引用的所有数据也要在该区域内.建议用户提供一个MAXGETHOSTSTRUCT字节大小的缓冲区.
buflen 上述数据区的大小.

我们用这个函数实现上节中同一功能:得到网站IP

全部代码如下:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
  //下面自己定义一个消息,因为这个函数必须用到
const
wm_getip=wm_user+100;//自己定义一个消息,
   type
  Tgetip=record//消息的结构
  msg:word;
  wparam:word;
  lparam:word;
  end;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
procedure mymsg(var msg:Tgetip);Message wm_getip;//这就是消息函数
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses
winsock;

{$R *.dfm}

var
WData:tWSAData;
HEnt:HostEnt;
IPad:string;
h:thandle;

procedure tform1.mymsg(var msg:tgetip);
begin
 with HEnt do
IPad:=Format('%d.%d.%d.%d',[Byte(h_addr^[0]),Byte(h_addr^[1]),Byte(h_addr^[2]),Byte(h_addr^[3])]);
edit2.Text:=HEnt.h_name;
edit3.Text:=ipad;//得到ip
WSACleanup;//注销
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
WSAStartup(2,WData);//初始
h:=WSAAsyncGetHostByName(self.Handle,wm_getip,pchar(edit1.Text),pchar(@hent),MAXGETHOSTSTRUCT)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
wsacancelasyncrequest(h);//可用于终止,不会引起阻塞
end;

end.

posted @ 2009-02-02 22:06 小叶子 阅读(943) | 评论 (0)编辑 收藏

gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针
所以用前定义hostent结构,并是一个指针

var
HEnt:PHostEnt;


PHostEnt在delphi定义如下
type
  PHostEnt = ^THostEnt;
  {$EXTERNALSYM hostent}
  hostent = record
    h_name: PChar;//主机名
    h_aliases: ^PChar;//别名
    h_addrtype: Smallint;
    h_length: Smallint;
    case Byte of
      0: (h_addr_list: ^PChar);
      1: (h_addr: ^PChar)//IP地址
  end;
  THostEnt = hostent;

下面写个例子
得到网站的IP
放三个edit在窗口上和一个button

uses
winsock;

procedure TForm1.Button1Click(Sender: TObject);
var
WData:TWSAData;
HEnt:PHostEnt;
ClName,IPad:string;
begin
WSAStartup(2,WData);//初始
//Gethostname(pchar(ClName),255);得到本机IP

HEnt:=GetHostByName(PChar(edit1.Text));//本机改成clname
with HEnt^ do
IPad:=Format('%d.%d.%d.%d',[Byte(h_addr^[0]),Byte(h_addr^[1]),Byte(h_addr^[2]),Byte(h_addr^[3])]);

edit2.Text:=hent^.h_name;//主机名
edit3.Text:=ipad;//得到ip

WSACleanup;//注销
end;


运行结果:(用:www.baidu.com测试)
edit1:     www.baidu.com
edit2:     www.a.shifen.com
edit3:    123.235.44.66

posted @ 2009-02-02 18:34 小叶子 阅读(2505) | 评论 (1)编辑 收藏

WSA是windows socket API简称
1   在delphi用这些API时,应先先明
WSAStartup();//初始
WSACleanup;//注销

后面介绍一些简单函数的使用
我也是学了再写,说错的地方指明,这既是自己的笔记
也是大家的参考


2、socket函数
用于生成socket(soket Descriptor)
[声明]
SOCKET socket(int af,int type,int protocol);
[参数]
af - 地址家族(通常使用:AF_INET)
type - socket的种类
SOCK_STREAM : 用于TCP协议
SOCK_DGRAM : 用于UDP协议
protocol - 所使用的协议
[返回值]
当函数成功调用时返回一个新的SOCKET(Socket Descriptor)
失败时返回INVALID_SOCKET.

3、inet_addr函数
把好象"xxx.xxx.xxx.xxx"的10进制的IP地址转换为32位整数表示方法
[声明]
unsigned long inet_addr ( const char FAR *cp );
[参数]
cp - 指向用"xxx.xxx.xxx.xxx"的10进制来表示的IP地址字符串的指针
[返回值]
当函数成功调用时返回用32位整数表示的IP地址(按网络字节排列顺序)
失败时返回INADDR_NONE.

4、gethostbyname函数
可以从主机名获取主机资料.
[声明]
struct hostent FAR * gethostbyname ( const char FAR *name );
[参数]
name - 指向主机名字符串的指针
[返回值]
当函数成功调用时返回主机信息
失败时返回NULL(空值)

5、Bind函数
指定本地IP地址所使用的端口号时候使用
[声明]
int bind ( SOCKET s , const struct sockaddr FAR *addr , int namelen );
[参数]
s - 指向用Socket函数生成的Socket Descriptor
addr - 指向Socket地址的指针
namelen - 该地址的长度.
[返回值]
当函数成功调用时返回0
调用失败时返回 SOCKET_ERROR

6、connect函数
用于与服务器建立连接,发出连接请求,必须在参数中指定服务器的IP地址和端口号
[声明]
int connect (SOCKET s , const struct sockaddr FAR *name , int namelen );
[参数]
s - 指向用Socket函数生成的Socket Descriptor
name - 指向服务器地址的指针
namelen - 该地址的长度.
[返回值]
当函数成功调用时返回0
调用失败时返回 SOCKET_ERROR

7、select函数
可以用于调查一个或多个SOCKET的状态.
[声明]
int select ( int nfds , fd_set FAR *readfds , fd_set FAR *writefds , fd_set FAR *exceptfds , const struct timeval FAR *timeout );
[参数]
nfds - 在WINDOWS SOCKET API 中该参数可以忽略,通常赋予NILL值
readfds - 由于接受的SOCKET设备的指针
writefds - 用于发送数据的SOCKET设备的指针
exceptfds - 检查错误的状态
timeout - 超时设定
[返回值]
返回大于0的值时,表示与条件相符的SOCKET数
返回0表示超时
失败时返回SOCKET_ERROR

8、recv函数
利用Socket进行接受数据.
[声明]
int recv ( SOCKET s , char FAR *buf , int len , int flags );
[参数]
s - 指向用Socket函数生成的Socket Descriptor
buf - 接受数据的缓冲区(数组)的指针
len - 缓冲区的大小
flag - 调用方式(MSG_PEEK 或 MSG_OOB)
[返回值]
成功时返回收到的字节数.
如果连接被中断则返回0
失败时返回 SOCKET_ERROR

9、sendto函数
利用Socket进行发送数据.
[声明]
int sendto ( SOCKET s , const char FAR *buf , int len , int flags , const struct sockaddr FAR *to , int token );
[参数]
s - 指向用Socket函数生成的Socket Descriptor
buf - 接受数据的缓冲区(数组)的指针
len - 缓冲区的大小
flag - 调用方式(MSG_DONTROUTE , MSG_OOB)
to - 指向发送方SOCKET地址的指针
token - 发送方SOCKET地址的大小
[返回值]
成功时返回已经发送的字节数.
失败时返回SOCKET_ERROR

posted @ 2009-02-02 18:25 小叶子 阅读(466) | 评论 (0)编辑 收藏

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    OpenDialog1: TOpenDialog;
    Edit1: TEdit;
    procedure BitBtn1Click(Sender: TObject);
Procedure Click(Sender:TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
butt:tbitbtn;
p:string;

Procedure tform1.Click(Sender:TObject);
begin
winexec(pchar(p),1);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if edit1.Text='' then
begin
showmessage('请写一个路径');
exit;
end;
p:=edit1.Text;
butt:=tbitbtn.Create(self);
butt.Width:=70;
butt.Left:=60;
butt.Height:=50;
butt.Top:=70;
butt.Parent:=form1;
butt.onClick:=Click;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
stream:tstream;
begin
stream:=tfilestream.Create('12.bb',fmcreate);
  try
    stream.WriteComponent(butt);
  finally
    stream.Free;
  end;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
var
  stream:tstream;
begin
  stream:=tfilestream.Create('12.bb',fmopenread);
  try
    butt:=tbitbtn(stream.ReadComponent(nil));
    butt.Parent:=form1;
    butt.OnClick:=Click;  //赋予butt的OnClick事件
    p:=edit1.Text;
  finally
    stream.Free;
  end;
end;
begin
  registerclass(tbitbtn);

end.

 

posted @ 2009-02-01 23:17 小叶子 阅读(558) | 评论 (0)编辑 收藏

人多,问题多,帮人家解决问题就是提高自己
 
delphi群:
本群已满:    79598397
500人超群:  29803842

汇编反汇编群:
54876861

本人经济原因,开个淘宝了,请大家帮点击一下,加点流量,对您可能有帮助
点击查看1
个人网站,纯HTML
淋巴消炎贴官网



posted @ 2009-02-01 13:45 小叶子 阅读(257) | 评论 (0)编辑 收藏

新建工程放三个TTimer
三个TTimer中  1和3是:
    Interval = 400
2是:Interval = 150


implementation

{$R *.dfm}
var
p:trect;

procedure TForm1.Timer1Timer(Sender: TObject);
var
d:tpoint;
begin
getcursorpos(d);
if  p.Top<2 then
begin
if not(((d.X>p.Left) and (d.X<p.Right) and (d.Y>p.Top) and (d.y<p.Bottom)))then
begin
movewindow(self.Handle,p.Left,0-(p.Bottom-p.Top)+2,p.Right-p.Left,p.Bottom-p.Top+2,true);
form1.
timer1.Enabled:=false;
timer3.Enabled:=true;
end;
end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
GetWindowRect(self.Handle,p);
end;

procedure TForm1.Timer3Timer(Sender: TObject);
var
d:tpoint;
begin
getcursorpos(d);
if ((d.X>p.Left) and (d.X<p.Right) and (d.Y>p.Top) and (d.y<p.Bottom)) then
begin
movewindow(self.Handle,p.left,-2,p.Right-p.Left,p.Bottom-p.Top,true);
SetActiveWindow(self.Handle);
timer1.Enabled:=true;
timer3.Enabled:=false;
end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if p.Top<-2 then
movewindow(self.Handle,p.left,-2,p.Right-p.Left,p.Bottom-p.Top,true);
end;

end.




窗体文件内容:
object Form1: TForm1
  Left = 801
  Top = 87
  Width = 193
  Height = 505
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnMouseMove = FormMouseMove
  PixelsPerInch = 96
  TextHeight = 13
  object Timer1: TTimer
    Interval = 400
    OnTimer = Timer1Timer
    Left = 24
    Top = 48
  end
  object Timer2: TTimer
    Interval = 150
    OnTimer = Timer2Timer
    Left = 80
    Top = 56
  end
  object Timer3: TTimer
    Interval = 400
    OnTimer = Timer3Timer
    Left = 32
    Top = 120
  end
end

posted @ 2009-02-01 01:03 小叶子 阅读(254) | 评论 (0)编辑 收藏

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
ed:tedit;

procedure TForm1.FormCreate(Sender: TObject);
begin
button1.Caption:='创建';
button2.Caption:='保存';
button3.Caption:='载入';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//创建一个edit
ed:=tedit.Create(self);
  ed.Height:=20;
  ed.Width:=150;
  ed.Top:=50;
  ed.Left:=70;
  ed.Parent:=form1;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  stream:tstream;
begin
//保存在一个文件内
stream:=tfilestream.Create('123.bb',fmcreate);
  try
    stream.WriteComponent(ed);
  finally
    stream.Free;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  stream:tstream;
begin
//从文件内导入
  stream:=tfilestream.Create('123.bb',fmopenread);
  try
    ed:=tedit(stream.ReadComponent(nil));
    ed.Parent:=form1;

  finally
    stream.Free;
  end;
end;
begin
  registerclass(tedit);
end.

posted @ 2009-02-01 00:57 小叶子 阅读(813) | 评论 (0)编辑 收藏
ATOM                   原子(原子表中的一个字符串的参考)
BOOL                   布尔变量
BOOLEAN                布尔变量
BYTE                   字节(8位)
CCHAR                  Windows字符
CHAR                   Windows字符
COLORREF               红、绿、蓝(RGB)彩色值(32位)
Const                  变量,该变量的值在执行期间保持为常量
CRITICAL_SECTION       临界段对象
CTRYID                 国名标识符
DLGPROC                指向一个对话框过程的指针
DWORD                  双字(32位)
ENHMFENUMPROC          指向一个应用程序定义的回调函数的指针,该回调函数枚举增强的元文件记录
ENUMRESLANGPROC        指向一个应用程序定义的回调函数的指针,该回调函数枚举资源语言。
ENUMRESNAMEPROC        指向一个应用程序定义的回调函数的指针,该回调函数枚举资源名称。
ENUMRESTYPEPROC        指向一个应用程序定义的回调函数的指针,该回调函数枚举资源类型。 
FARPROC                指向一个回调函数的指针
FLOAT                  浮点变量
FMORDER                32位字体映射值的数组
FONTENUMPROC           指向一个应用程序定义的回调函数的指针,该回调函数枚举字体
GOBJENUMPROC           指向一个应用程序定义的回调函数的指针,该回调函数枚举图形设备接口(GDI)对象
HACCEL                 加速键表句柄
HANDLE                 对象的句柄
HBITMAP                位图句柄
HBRUSH                 画刷句柄
HCONV                  动态数据交换(DDE)会话句柄
HCONVLIST              DDE会话句柄
HCURSOR                光标句柄
HDC                    设备描述表(DC)句柄
HDDEDATA               DDE数据句柄
HDLG                   对话框句柄
HDWP                   延期窗口位置结构句柄
HENHMETAFILE           增强原文件句柄
HFILE                  文件句柄
HFONT                  字体句柄
HGDIOBJ                GDI对象句柄
HGLOBAL                全局内存块句柄
HHOOK                  钩子句柄
HICON                  图标句柄
HINSTANCE              实例句柄
HKEY                   登记关键字句柄
HLOCAL                 局部内存块句柄
HMEMU                  菜单句柄
HMETAFILE              元文件句柄
HMIDIIN                乐器的数字化接口(MIDI)输入文件句柄
HMIDIOUT               MIDI输出文件句柄
HMMIO                  文件句柄
HOOKPROC               指向一个应用程序定义的钩子函数的指针
HPALETTE               调色板句柄
HPEN                   画笔句柄
HRGN                   域句柄
HRSRC                  资源句柄
HSZ                    DDE字符串句柄
HWAVEIN                波形输入文件句柄
HWAVEOUT               波形输出文件句柄
HWINSTA                工作站句柄
HWND                   窗口句柄
INT                    符号整数
LANGID                 语言标识符
LCID                   所在国(Locale)标识符
LCTYPE                 所在国类型
LINEDDAPROC            指向一个回调函数的指针,该回调函数处理行坐标
LONG                   32位符号整数
LP                     指向一个以"NULL"结束的Unicode(TM)字符串的指针
LPARAM                 32位消息参数
LPBOOL                 指向一个布尔变量的指针
LPBYTE                 指向一个字节的指针
LPCCH                  指向一个Windows字符常量的指针
LPCCHOOKPROC           指向一个应用程序定义的钩子函数的指针
LPCFHOOLPROC           指向一个应用程序定义的钩子函数的指针
LPCH                   指向一个Windows字符的指针
LPCOLORREF             指向一个COLORREF值的指针
LPCRITICAL_SECTION     指向一个临界段对象的指针
LPCSTR                 指向一个以"NULL"结束的WINDOWS字符串常量的指针
LPCTSTR                指向一个以"NULL"结束的Unicode或Windows字符串常量的指针       
LPCWCH                 指向一个以"NULL"指向一个以"NULL"结束的Unicode字符常量的指针  
LPCWSTR                指向一个以"NULL"指向一个以"NULL"结束的Unicode字符串常量的指针 
LPDWORD                指向一个无符号双字(32位)的指针                
LPFRHOOLPROC           指向一个应用程序定义的钩子函数的指针
LPHANDLE               指向一个句柄的指针
LOHANDLER_FUNCTION     指向一个处理程序函数的指针
LPHWAVEIN              指向一个波形输入文件句柄的指针
LPHWAVEOUT             指向一个波形输出文件句柄的指针
LPINT                  指向一个符号整数的指针
LPLONG                 指向一个符号长整数(32位)的指针
LPOFNHOOKPROC          指向一个应用程序定义的钩子函数的指针
LPPRINTHOOKPROC        指向一个应用程序定义的钩子函数的指针
LPSETUPHOOKPROC        指向一个应用程序定义的钩子函数的指针
LPTSTR                 指向一个以NULL结束的Unicode或Windows字符串的指针
LRESULT                消息处理的符号结果
LPVOID                 指向任何类型的指针
LPWSTR                 指向一个以"NULL"结束的Unicode字符串的指针
LUID                   局部唯一的标识符
MCIDEVICEID            媒体控制接口(MCI)设备标识符
MFENUMPROC             指向一个应用程序定义的回调函数的指针,该回调函数枚举元文件记录
MMRESULT               多媒体消息的处理结果
NPSTR                  指向一个以"NULL"结束的Windows字符串的指针
NWPSTR                 指向一个以"NULL"结束的Unicode字符串的指针
PBOOL                  指向一个布尔变量的指针
PBYTE                  指向一个字节的指针
PCCH                   指向一个Windows字符常量的指针
PCH                    指向一个Windows字符的指针
PCHAR                  指向一个Windows字符的指针
PCRITICAL_SECTION      指向一个临界段对象的指针
PCSTR                  指向一个以"NULL"结束的Windows字符串常量的指针
PCWCH                  指向一个Unicode字符常量的指针
PCWSTR                 指向一个以"NULL"结束的Unicode字符串常量的指针
PDWORD                 指向一个无符号双字的指针
PFLOAT                 指向一个浮点变量的指针
PFNCALLBACK            指向一个回调函数的指针
PHANDLE                指向一个句柄的指针
PHANDLER_ROUTINE       指向一个处理程序的指针
PHKEY                  指向一个登记关键字的指针
PINT                   指向一个符号整数的指针
PLONG                  指向一个符号长整数的指针
PLUID                  指向一个局部唯一的表示符(LUID)的指针
PROPENUMPROC           指向一个应用程序定义的回调函数的指针,该回调函数枚举窗口特征
PSHORT                 指向一个符号短整数的指针
PSID                   指向一个加密标识符(SID)的指针
PSTR                   指向一个以"NULL"结束的Windows字符串的指针
PSZ                    指向一个以"NULL"结束的Windows字符串的指针
PTCH                   指向一个Windows或Unicode字符的指针
PTCHAR                 指向一个Windows或Unicode字符的指针
PTSTR                  指向一个以"NULL"结束的Windows或Unicode字符串的指针
PUCHAR                 指向一个无符号Windows字符的指针
PUINT                  指向一个无符号整数的指针
PULONG                 指向一个无符号长整数的指针
PUSHORT                指向一个无符号短整数的指针
PVOID                  指向任何类型的指针
PWCH                   指向一个Unicode字符的指针
PWCHAR                 指向一个Unicode字符的指针
PWORD                  指向一个无符号字的指针
PWSTR                  指向一个以"NULL"结束的Unicode字符串的指针
REGSAM                 登记关键字的加密掩码
SC_HANDLE              服务句柄
SERVICE_STATUS_HANDLE  服务状态值句柄
SHORT                  短整数
SPHANDLE               指向一个句柄的指针
TCHAR                  Unicode或Windows字符
TIMERPROC              指向一个应用程序定义的定时器回调函数的指针
UCHAR                  无符号Windows字符
UINT                   无符号整数
ULONG                  无符号长整数
USHORT                 无符号短整数
VOID                   任何类型
WCHAR                  Unicode字符
WNDENUMPROC            指向一个应用程序定义的回调函数的指针,该回调函数枚举窗口
WNDPROC                指向一个应用程序定义的窗口过程的指针
WORD                   无符号字(16位)
WPARAM                 32位消息参数
YIELDPROC              指向一个输出回调函数的指针
posted @ 2009-01-24 01:07 小叶子 阅读(338) | 评论 (0)编辑 收藏

在(3)中我们会一块块的读取
那么,如果说我们在每块内加点东西,那么程序就不能运行,再减去你加的那些,程序又能以运行
由此你可以想到对自己的程序(加密),这里不是真正加密

我做的程序是在向文件写入时写入两次,这种方法你的程序会加大一倍,如果你有时间,那就用char类型加密,(别有数组4096)加密部分代码,其它不变就可以

代码如下
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Edit1: TEdit;
    Edit2: TEdit;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var SouFile,DescFile:TFileStream;
    Buf:Array [1..4096] of Char;
    iLen:integer;
begin
if (edit1.Text='') or (edit2.Text='') then
begin
application.messagebox('请填写正确路径','提示',mb_ok);
exit;
end;
SouFile:=TfileStream.Create(edit1.Text,fmOpenRead or fmShareDenyWrite);
DescFile:=TFileStream.Create(edit2.Text,fmCreate);
SouFile.Position:=0;
  While SouFile.Position <=SouFile.Size do
  begin
If (SouFile.Size-SouFile.Position)>4096 Then
    Begin
    SouFile.ReadBuffer(Buf,sizeof(buf));
    DescFile.WriteBuffer(Buf,sizeof(buf));
     DescFile.WriteBuffer(Buf,sizeof(buf));
   end
else
  begin
  iLen:=SouFile.Size-SouFile.Position;
    SouFile.ReadBuffer(Buf,iLen);
    DescFile.WriteBuffer(Buf,iLen);
    Break;
    End;
end;
 SouFile.Free();
  DescFile.Free();
  application.messagebox('加密成功','good',mb_ok);

end;

procedure TForm1.Button2Click(Sender: TObject);
Var SouFile,DescFile:TFileStream;
   buf1, Buf:Array [1..4096] of Char;
    iLen:integer;
begin
if (edit1.Text='') or (edit2.Text='') then
begin
application.messagebox('请填写正确路径','提示',mb_ok);
exit;
end;
SouFile:=TfileStream.Create(edit1.Text,fmOpenRead or fmShareDenyWrite);
SouFile.Position:=0;
SouFile.ReadBuffer(Buf,sizeof(buf));
SouFile.ReadBuffer(Buf1,sizeof(buf));
if buf<>buf1 then
begin
application.messagebox('些程序未加密','提示',mb_ok);
 SouFile.Free();
exit;
end;
DescFile:=TFileStream.Create(edit2.Text,fmCreate);
SouFile.Position:=0;
  While SouFile.Position <=SouFile.Size do
  begin
If (SouFile.Size-SouFile.Position)>4096 Then
    Begin
    SouFile.ReadBuffer(Buf,sizeof(buf));
    DescFile.WriteBuffer(Buf,sizeof(buf));
    SouFile.Position:=SouFile.Position+4096;
   end
else
  begin
  iLen:=SouFile.Size-SouFile.Position;
    SouFile.ReadBuffer(Buf,iLen);
    DescFile.WriteBuffer(Buf,iLen);

    Break;
    End;
end;
 SouFile.Free();
  DescFile.Free();
 application.messagebox('复原成功','good',mb_ok);

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if opendialog1.Execute then
edit1.Text:=opendialog1.FileName;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if savedialog1.Execute then
edit2.Text:=savedialog1.FileName;
end;

end.

如果自己做不好可以下载我的源码试着学
下载地址
http://www.cnitblog.com/Files/shuyezi122/加解.rar

posted @ 2009-01-23 22:57 小叶子 阅读(2003) | 评论 (0)编辑 收藏
仅列出标题
共11页: First 2 3 4 5 6 7 8 9 10 Last 

笔记和文章,可能抄袭,只为学习,请原谅