delphi如何在form显示出来后处理指定的事件(例如自动登录)

最近写一个delphi客户端,遇到一个自动登录问题,已经解决了思路如下:

1.在Form的oncreate事件中读取用户配置文件,检查及处理是否保存了用户密码,是否自动登录,如果需要自动登录,

自动登录前的checkbox打勾,用户名,密码放入


2.在Form的FormActivate事件中处理自动登录业务,因为这个activate事件发生于formshow出来之后


用这个windows函数发送消息: PostMessage(Handle, UM_CHECKFIRSTRUN, 0, 0);

定义自己的函数来捕获处理消息:


<span style="font-family:Microsoft YaHei;font-size:14px;">const
  UM_CHECKFIRSTRUN = WM_USER + 100;

 procedure UmCheckFirstRun(var Message: TMessage); message UM_CHECKFIRSTRUN;

procedure TForm1.UmCheckFirstRun(var Message: TMessage);
begin

 delay(1000);    //延迟一个时间,不然用户会很诧异
 readyLoginData;     //处理自动登录业务的方法
end;

</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">
</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">procedure TForm1.FormActivate(Sender: TObject);
begin
    //sleep(1000);
    PostMessage(Handle, UM_CHECKFIRSTRUN, 0, 0);
    
end;</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">
//延迟指定时间
procedure delay(msecs:integer);
var
  Tick: DWord; 
  Event: THandle;


  begin
  Event := CreateEvent(nil, False, False, nil); 
  try
    Tick := GetTickCount + DWord(msecs); 
    while (msecs > 0) and (MsgWaitForMultipleObjects(1, Event, False, msecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages; 
      msecs := Tick - GetTickcount; 
    end;
  finally
    CloseHandle(Event);
  end
  end;</span>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Delphi的Windows API函数来实现在指定窗口中查找指定图像并单击的操作。以下是一个简单的示例: ``` uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } FTargetWnd: HWND; FTargetBmp: TBitmap; function FindBitmapInWindow(const AWnd: HWND; const ABmp: TBitmap): TPoint; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.FindBitmapInWindow(const AWnd: HWND; const ABmp: TBitmap): TPoint; var DC: HDC; RC: TRect; BM: TBitmap; PT: TPoint; begin Result := Point(-1, -1); DC := GetDC(AWnd); try GetClientRect(AWnd, RC); BM := TBitmap.Create; try BM.Width := RC.Right - RC.Left; BM.Height := RC.Bottom - RC.Top; BitBlt(BM.Canvas.Handle, 0, 0, BM.Width, BM.Height, DC, 0, 0, SRCCOPY); PT := ABmp.Canvas.Pixels[0, 0]; Result := FindBitmap(BM, ABmp, PT); if Result.X >= 0 then begin Result.X := Result.X + RC.Left; Result.Y := Result.Y + RC.Top; end; finally BM.Free; end; finally ReleaseDC(AWnd, DC); end; end; procedure TForm1.Timer1Timer(Sender: TObject); var PT: TPoint; begin PT := FindBitmapInWindow(FTargetWnd, FTargetBmp); if PT.X >= 0 then begin Timer1.Enabled := False; SendMessage(FTargetWnd, WM_LBUTTONDOWN, 0, MakeLParam(PT.X, PT.Y)); SendMessage(FTargetWnd, WM_LBUTTONUP, 0, MakeLParam(PT.X, PT.Y)); end; end; procedure TForm1.FormCreate(Sender: TObject); begin FTargetWnd := FindWindow(nil, 'Target Window Title'); FTargetBmp := TBitmap.Create; FTargetBmp.LoadFromFile('C:\TargetImage.bmp'); Timer1.Enabled := True; end; ``` 在上面的代码中,`FindBitmapInWindow`函数用于在指定窗口中查找指定图像,并返回图像的位置。`Timer1Timer`事件处理程序使用`FindBitmapInWindow`函数来查找目标图像,并在找到图像后向目标窗口发送鼠标单击消息。`FormCreate`事件处理程序初始化目标窗口句柄和目标图像。请注意,您需要将`FindWindow`函数的第二个参数替换为您要查找的窗口的标题。您还需要替换`FTargetBmp.LoadFromFile`函数的参数为您要查找的图像的文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值