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

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

wKioL1g2rETCapbSAABjP-89THg662.png-wh_50

主要程序代码如下:

wKiom1g2rETSXe5xAAB4F0-SUG8056.png-wh_50

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;

wKiom1g2rEWSlX7MAAB1rF7vMxk077.png-wh_50


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;