房产交易评估基准价格比对-Delphi外挂方式获取并修改其他程序输入框信息

2009年,房产交易契税实行新的政策,在系统录入的时候,需要实现交易价格和基准交易价格进行比对。但契税软件是VB程序开发的,已经很久没有更新,也没有源代码。要实现该功能,只能通过外挂的方式实现。

主要思路是用hook原系统的录入界面,当输入交易价格的时候,通过热键呼叫外挂软件,进行基准价格比对。比对过程需要读取原系统界面上的录入信息,并根据这些信息,如房屋朝向、楼层、建造年份、区域等综合因素查询事先录入数据库的基准价格,比对计算。大于等于基准价格的保留原价格,小于基准价格的,把外挂查询的总价发送到原系统录入界面的相应控件。

主要程序代码如下:

procedure TFrmMain.tm1Timer(Sender: TObject);

var

hts, hw: LongInt;

lsh: string;

buffer:array[0..255] of char;

begin

//cooling qq:21156410 http://xu-laoshi.cn

//判断

hw := FindWindow(nil, ‘契税纳税申报‘);

hts := FindWindow(nil ,‘提示‘);

if (hw <> 0) then

begin

if hts <> 0 then

begin

//取流水号

ClearList1;

EnumChildWindows(hts, @EnumChildWndProc1, 0);

SendMessage(LongInt(List1.Items[n_lsh]^), WM_GETTEXT, 255, longint(@buffer));

lsh := buffer;

lsh := Copy(lsh, 9, 15);

savexz(lsh);

end;

end else

begin

tm1.Enabled := false;

if self.Visible then self.Visible := false;

end;

end;

procedure TFrmMain.btQdClick(Sender: TObject);

var

buffer:array[0..255] of char;

pgj, cjj: real;

pgjstr, cjjstr: String;

begin

//发送到vb程序

SendMessage(LongInt(List.Items[c_cjj]^), WM_GETTEXT, 255, longint(@buffer));

try

cjjstr := buffer;

if cjjstr = ‘‘ then cjjstr := ‘0‘;

cjj := strToFloat(cjjStr);

pgjstr := edZj.Text;

if pgjstr = ‘‘ then pgjstr := ‘0‘;

pgj := strToFloat(pgjstr);

if cjj > pgj then

begin

pgj := cjj;

end;

except

exit;

end;

pgjstr := Format(‘%.2f‘, [pgj]);

SendMessage(LongInt(List.Items[c_pgj]^), WM_SETTEXT, 0, longint(pgjstr));

Self.Visible := false;

tm1.Enabled := true;

end;

时间: 2024-12-25 04:58:19

房产交易评估基准价格比对-Delphi外挂方式获取并修改其他程序输入框信息的相关文章

DELPHI低版本开发的两层程序平稳升级到三层

N年前,我们用DELPHI低版本开发的两层程序(比如工厂ERP系统),现在仍然在企业广泛地得到使用,但老系统有些跟不上企业的发展需要了.主要表现在:虽然我们的老系统对企业的业务实现得很好,可以很好地满足企业目前的业务需求,但现在企业要求我们的服务器要能够远程分布式地布署,于是我们自然会想到将原来的两层程序升级为三层,这样无疑将满足企业新的需求.大家都知道DELPHI低版本中间件的开发框架是基于微软陈旧的COM架构的MIDAS,这是一种一.二十年前的技术,MIDAS以前完全没有考虑对后来新的64位

Delphi主线程重入而导致程序卡死的解决方案

Delphi的线程可以通过调用AThread.Synchronize(AProc),可以将Proc放入主线程中同步运行,此时AThread将挂起,直到主线程执行完AProc. 如果有BThread,调用了BThread.Synchronize(BProc),而BProc中释放了AThread procedure TBThread.BProc begin AThread.Terminate; AThread.WaitFor; AThread.Free; end; 此时我们的程序将会卡死,下面的代码

手动升级Delphi控件时,修改inc文件的办法

以MustangPeakCommonLib.exe控件为例,想让它支持Delphi2010,就需要在D:\Program Files\Common Library\Mustangpeak\Common Library\Source\Compilers.inc文件里手动增加: {$ifdef VER210} {$define COMPILER_14} {$endif VER210} {$ifdef COMPILER_14} {$define COMPILER_1_UP} {$define COMP

delphi for android 获取手机号

uses  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,Androidapi.JNI.GraphicsContentViewText,   Androidapi.JNIBridge,  Androidapi.JNI.Telephony, Androidapi

Delphi中如何获取TDateTimePicker控件的属性值

参考资料:http://www.delphipages.com/forum/showthread.php?t=103412 var dtpDate: TDateTimePicker; begin dtpDate.Format := 'yyyy-MM-dd'; ShowMessage('时间:' + FormatDateTime('yyyy-MM-dd', dtpDate.Date)); //'yyyy-MM-dd'是时间显示的格式,更多格式请参照别的资料 end; dtpDate.Format

Delphi使用XmlHttp获取时间

uses ComObj, DateUtils; procedure TForm1.Button1Click(Sender: TObject); var XmlHttp: Variant; datetxt : String; DateLst : TStringList; mon: String; timeGMT,GetNetTime:TDateTime; begin XmlHttp := CreateOleObject('Microsoft.XMLHTTP'); XmlHttp.Open( 'Ge

delphi里修改下程序

程序代码: unit Unit1;  interface  uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;  type  TForm1 = class(TForm)    Button1: TButton;    Edit1: TEdit;    Button2: TButton;    Memo1: TMemo;    OpenDialog1

delphi验证码图像生成,修改自“名士:517165547”

function GenerateVerifyCode(var code:string):TBitmap;var I,j,k: Integer; vPoint: TPoint; vLeft: Integer; arrStr:array [1..36]of string ; vcodebmp:TBitmap; pwdimgstr:string;begin pwdimgstr:=''; arrStr[1]:='0'; arrStr[2]:='1'; arrStr[3]:='2'; arrStr[4]

Delphi XE下获取网页源码记录

存放个自己写的获取网页源码,掌握了: 1.利用CreateOLEObject方式获取源码 2.自动判断网页格式编码 需要使用到的单元:Winapi.ActiveX,System.Win.ComObj,System.WideStrUtils 需要创建结构体:TResultWebHtml (用于存放返回的源码和Cookies) Uses Winapi.ActiveX,System.Win.ComObj,System.WideStrUtils; type TResultWebHtml = record