一段获取来电弹窗中电话号码的代码,时而出错

jxbw7408 2013-11-15 03:02:57

procedure TForm1.Timer1Timer(Sender: TObject);
var
hWindow: HWND; { 窗体句柄}
FWindow:HWND;
lpszWindowText:Array[0..254] of char;
begin
//弹窗的窗口标题是客户信息
hWindow := FindWindow(nil,'客户信息');
if hWindow <> 0 then
begin
if IsWindowVisible(hWindow) = True then
begin
ListBox1.Clear; //窗口显示出来清除列表框中的电话号码
GetListBoxText(FindWindowEx(hWindow,0,'ListBox',nil),Listbox1.Items);//获得弹窗中的号码

if Trim(Edit1.Text) <> Trim(ListBox1.Items.Strings[0]) then//判断来电是不是与上次一致,由于用的是TIMER所有加了一个判断,电话号码一致就不写入数据库
begin
Edit1.Text := Trim(ListBox1.Items.Strings[0]);

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'Insert into Inphone(Intel,Intime,Indate) values('''+Trim(Edit1.Text)+''','+
''''+FormatdateTime('c',now)+''','''+FormatdateTime('ddddd',now)+''')';
ADOQuery1.ExecSQL;

end;
end;

end;

end;

end;



这代码在运行过程中,老是出现错误,是有时候出现,有时候又不出现。内容无非是一些什么不为READ之类的。关闭程序重启过一段时间又可能出现。真没找出问题所在,上来求助了。
...全文
438 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxbw7408 2014-01-16
  • 打赏
  • 举报
回复
增加了判断,还是不行,难道真是硬件反应不过来?
jxbw7408 2013-11-20
  • 打赏
  • 举报
回复
先用大家的意见,增加对LISTBOX的判断,看可行不。其实我是想去捕获窗口弹出事件,由于要用到钩子,本人不会,不得以用了TIMER我也怀疑是硬件反应不来。
Blessed_Chuan 2013-11-18
  • 打赏
  • 举报
回复
if ListBox1.Items.count>0 then if Trim(Edit1.Text) <> Trim(ListBox1.Items.Strings[0])
aa20000 2013-11-15
  • 打赏
  • 举报
回复
硬件反应不过来问题
Q_188136923 2013-11-15
  • 打赏
  • 举报
回复
begin Timer1.enable := Flase; ........你的代码 timer1.enable := True;//Timer一次运行完后再开启来。 end;
smhilyyan 2013-11-15
  • 打赏
  • 举报
回复
line:16 应该先判断listbox是否为空,否则引用一个不存在的string会报错
tcmakebest 2013-11-15
  • 打赏
  • 举报
回复
大概是调用太频繁了吧,对于获取获取过的窗口应该过滤一下。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧