delphi类型转换 asc与char

该日志由 samool 发表于 2008-01-14 10:01 AM

ord(char) = asc
chr(asc) = char
inttohex(int,1) = hex (string)
 
使用AStr[i]取AStr:String中的第i个字符时需要注意的事项:
这里i表示第i个字符,并不是通常的0表示第1个,i表示第i+1个。
 
二位的16进制转换为10进制:
function HexToInt(hex : string):integer;
var x : array [0..1] of integer;
    i : integer;
    s : string;
begin
  for I := 0 to 1 do
  begin
    try
      if i = 0 then
        s := copy(hex,1,1)
      else    
        s := copy(hex,2,1);
      x[i] := StrToInt(s);
    except
      if s = 'A' then x[i] := 10;
      if s = 'B' then x[i] := 11;
      if s = 'C' then x[i] := 12;
      if s = 'D' then x[i] := 13;
      if s = 'E' then x[i] := 14;
      if s = 'F' then x[i] := 15;
    end;
  end;
  Result := x[0] * 16 + x[1];
end;  
 
优化,16 to 10
function HexToInt(Hex : String) : int64;
var AStr, AHex : String;
    HexLen, i, AH : integer;
    Power : integer;
begin
  AHex := AnsiUpperCase(Hex);
  HexLen := Length(AHex);
  Result := 0;
  Power := 1;
  for I := 0 to HexLen - 1 do
  begin
    AStr := Copy(AHex,HexLen - i);    //从后往前取
    AH := Ord(AStr[1]) - 48;
    if (AH >= 17) and (AH <= 22) then AH := AH -7
    else if (AH < 0) or (AH > 22) or ((AH > 9) and (AH < 17)) then AH := null;
    if i <> 0 then Power := Power * 16;
    Result := Result + AH * Power;
  end;
end;

该日志标签: asc, char

fix DAX error(解决delphi编写的ocx控件中的DAX erro...

该日志由 samool 发表于 2007-12-25 6:05 PM

when using Internet Explorer in Wink2, WinXp, ActiveForm or ActiveX control raise

DAX error : access violation at address 000

reason :

delphi's ocx use same parking window procedure.

one ocx must use individual parking window proc.

fix error.

edit delphi VCL source routine in axctrls.pas

and compile axctrls.pas

copy axctrls.dcu to lib directory.

axctrls.pas

function ParkingWindow: HWND;

var

TempClass: TWndClass;

ParkingName : String;

begin

Result := xParkingWindow;

if Result <> 0 then Exit;

// fix Dax error : accessviolation (win2k, win xp)

ParkingName := 'DAXParkingWindow_' + Format('%p', [@ParkingWindowProc]);

FillChar(TempClass, sizeof(TempClass), 0);

if not GetClassInfo(HInstance, PChar(ParkingName), TempClass) then // fix Dax error : accessviolation (win2k, win xp)

begin

TempClass.hInstance := HInstance;

TempClass.lpfnWndProc := @ParkingWindowProc;

TempClass.lpszClassName := PChar(ParkingName); // fix Dax error : accessviolation (win2k, win xp)

if Windows.RegisterClass(TempClass) = 0 then

raise EOutOfResources.Create(SWindowClass);

end;

xParkingWindow := CreateWindowEx(WS_EX_TOOLWINDOW, TempClass.lpszClassName, nil,

WS_POPUP, GetSystemMetrics(SM_CXSCREEN) div 2,

GetSystemMetrics(SM_CYSCREEN) div 2, 0, 0, 0, 0, HInstance, nil);

SetWindowPos(xParkingWindow, 0, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOREDRAW

or SWP_NOZORDER or SWP_SHOWWINDOW);

Result := xParkingWindow;

end;

该日志标签: ocx, dax

屏幕截图、窗口截图、指定区域截图

该日志由 samool 发表于 2007-11-26 5:06 PM

今天为了自动识别一个验证码,以前偷梁换柱的方法行不通了,从IE缓存里读取文件也行不通咯,看来只有用土办法了,我把你的验证码图片从屏幕上截下来,再对你进行OCR识别,看你还何话说。我想这个办法是没有办法中的办法,是万千办法中最强悍的办法,集老夫多年经验于一身,从大富翁论坛离线资料库查的,感谢大富翁,不过最近听说Delphi盒子要卖了,唉,世态炎凉啊,也不能怪站长,只能怪物价上涨,房价上涨,站长多年心血,唯一家产也就这个站了,希望能卖个好价钱,如果是我的话,卖了第一件事肯定是买套房子,

Use Jpeg

procedure TForm1.snapscreen(a,b,c,d:Integer);
var
  bmpscreen:Tbitmap;
  jpegscreen:Tjpegimage;
  FullscreenCanvas:TCanvas;
  dc:HDC;
  sourceRect, destRect: TRect;
begin
  try
  dc:=getdc(0);
  fullscreencanvas:=Tcanvas.Create;
  fullscreencanvas.Handle:=dc;
  bmpscreen:=Tbitmap.create;
  bmpscreen.Width :=c-a;
  bmpscreen.Height :=d-b;
  sourcerect:=rect(0,0,c-a ,d-b );
  destrect:= rect(a,b,c,d);
  bmpscreen.Canvas.CopyRect(sourcerect,fullscreenCanvas,destrect);
  jpegscreen:=Tjpegimage.Create ;
  jpegscreen.Assign (bmpscreen);
  jpegscreen.CompressionQuality:=100;
  jpegscreen.SaveToFile(ExtractFilePath(ParamStr(0))+'tmp.jpg');
  FullscreenCanvas.Free;
  bmpscreen.Free;
  jpegscreen.Free ;
  ReleaseDC(0, DC);
  except
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  snapscreen(self.Left,self.Top,Self.Left+self.Width,Self.Top+self.Height);
end;

该日志标签: 截图

模似键盘输入又一方法

该日志由 samool 发表于 2007-11-26 2:39 AM

  cnt:=0;
  //获取窗口句柄
  EnumChildWindows(Hwindow,@LoginEnumWindowsProc,LongInt(self));  

  for i:=0 to chklst_Uid.Count-1 do
  begin
      if chklst_Uid.Checked[i] then
      begin
          SplitString(Trim(chklst_Uid.Items.Strings[i]),'-',a,b);
          UidLogin:=Trim(a);
          UidPassword:=Trim(b);
          SendMessage(HLoginNum, WM_SETTEXT, 180, Integer(PChar(UidLogin)));
          for j:=1 to 6 do
          begin
              mychar:=MidStr(UidPassword,j,1);
              SendMessage(Hpass,WM_CHAR,Ord(mychar[1]),0);
          end;

          chklst_Uid.Checked[i]:=False;
          lbl_LoginUid.Caption:=UidPassword;
          Break;
      end;
  end;

该日志标签: 模似, 键盘, 输入

在 .NET 中使用 Oracle 数据库事务

该日志由 samool 发表于 2007-11-20 9:42 AM

以下 C# 程序语句指定在程序中使用 System 和 Oracle.DataAcess.Client 命名空间:

using System;
using Oracle.DataAccess.Client;
下面是等价的 VB.NET 语句:

Imports System
Imports Oracle.DataAccess.Client
Oracle.DataAccess.Client 命名空间是 ODP.NET 的一部分,它包含许多类,其中有 OracleConnection、OracleCommand 和 OracleTransaction。示例程序用到了这些类。

» 阅读该日志全文...

该日志标签: c#, vb.net, oracle

出售高级验证码识别引擎源码

该日志由 samool 发表于 2007-11-19 3:27 PM

出售高级验证码识别引擎全部Delphi源码,可准确识别新浪动网淘宝征途等多种复杂验证码

输出为一个标准DLL,可供VB,VC,Delphi,C#.NET,VB.NET,模拟精灵,按键精灵等多平台调用,调用方法简单,几行代码即可完成。结合Transym OCR识别引擎(国外最强悍的商业OCR), 加上独具特色的边缘检测字符分离旋转倾斜纠正通用字符匹配算法(无论字体和大小), 使得该引擎对于像新浪、动网、淘宝、CSDN、征途等多种验证码均有理想的识别率, 是一款效果较为理想的验证码识别引擎。附详细的调用实例和代码注释。

识别效果怎么样一试就知道 - DEMO下载

» 阅读该日志全文...

该日志标签: 验证码, 图片验证码, 识别码

通过窗口特定标题锁定窗口

该日志由 samool 发表于 2007-11-16 2:46 PM

 function FindWindowThroughWindowText(WindowText: string): THandle;
var
hCurrentWindow: THandle;
cnt: Integer;
WindowTitle: array[0..254] of Char;
begin
Result := INVALID_HANDLE_VALUE; //返回值预设为无效的句柄
hCurrentWindow := GetForegroundWindow; //找出当前操作系统中活动的第一个窗口
cnt := 1; //计数器置初值=1
while True do
begin
if GetWindowText(hCurrentWindow, @WindowTitle, 255) > 0 then //如果找到窗口的标题
if StrPos(WindowTitle, PChar(WindowText)) <> nil then //如果找到的正是目标窗口则
break; //跳出循环
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT); //找下一窗口

//直到找到或超过一定的次数后退出
if hCurrentWindow = 0 then
begin
//如果顺序查一遍后未找到目标窗口,则重新从头开始查找,
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST); //找到第一个窗口
inc(cnt); // 循环计数器加1
if cnt > 10000 then
begin
//如果超出10000次则(在此10000次循环过程中等待windows建立完//目标窗口,如在此过程中找到则成功退出,否则10000次后(约30秒至1分钟)仍未找到,提示用户是否继续查找)
if MessageDlg('找不到运行中的' + WindowText + '窗口,可能该系统已损坏!是否继续运行?', mtConfirmation, [mbOK, mbCancel], 0) = mrOK then
begin
//请用户选择是否继续查找//如用户选择继续查找,则
cnt := 1; //循环计数器重置初值=1
Continue; //开始新一轮查找
end
else exit; //如用户放弃查找,则退出
end;
end;
end;
Result := hCurrentWindow; //返回值为找到的窗口句柄
end;

QQ自动发消息源码

该日志由 samool 发表于 2007-11-15 5:23 PM

这里面有的到窗口句柄,输入框句柄和按钮句柄的方法!
你可以结合使用的到你想的到的功能!
这是一个qq自动发送的功能,你看看,应该有点用吧!:)

delphi代码
  1. procedure TForm1.Button1Click(Sender: TObject);   
  2. var  
  3. hParent,hButton,hMemo: HWND;   
  4. begin  
  5. Memo1.CopyToClipboard;//把Memo中选中的语句拷贝到剪贴板中   
  6. try  
  7. //找发送消息的QQ窗口   
  8. hParent := FindWindow(nil'发送消息');   
  9. //然后找回话时用的编辑窗口,Point函数用于返回一个TPoint类型变量   
  10. hMemo := ChildWindowFromPointEx(hParent, Point(50100), CWP_ALL);   
  11. //找到“送讯息”按钮的句柄    
  12. hButton := FindWindowEx(hParent,0,nil,'送讯息(&S)');   
  13. if (hParent = 0or (hMemo = 0or (hButton = 0then  
  14. MessageBox(Handle,'没有找到发送窗口,请重试!','错误',MB_ICONWARNING)   
  15. else  
  16. begin  
  17. //向发送消息中的回话编辑框发送粘贴消息   
  18. SendMessage(hMemo,WM_PASTE,0,0);   
  19. //向“送讯息”按钮送单击消息以模仿按键发送回话   
  20. SendMessage(hButton,BM_CLICK,0,0);   
  21. end;   
  22. except  
  23. //如果发生以外错误给出提示   
  24. MessageBox(Handle,'发送消息出错,请重试!','错误',MB_ICONWARNING);   
  25. end;   
  26. end;

 

 

该日志标签: qq, 消息

无窗体无界面exe怎么做?

该日志由 samool 发表于 2007-11-08 3:16 PM

要做一个无窗体的EXE,在Delphi下有两种方法:

console application
Hide all Foms(MainForm,esc.)

1、做一个控制台程序,生成console application工程文件的办法是:File\new\other\Console Application

2、隐藏窗体,跟无窗体差不多了吧,这样做最简单。
procedure TForm1.FormCreate(Sender: TObject);
begin
application.ShowMainForm:=false;
end;

该日志标签: 无窗体, 程序, 方法, 实例

汇编级超快字符串替换函数

该日志由 samool 发表于 2007-10-23 3:19 PM

 用这个函数进行字符串替换操作,比Delphi自带的ReplaceString要快N倍,效率一流,非常快,不愧为汇编级函数操作,哈哈.

下载函数单元文件:[attach=1619]

» 阅读该日志全文...

该日志标签: 汇编, 函数, 字符, 替换