Delphi使程序的窗口出现在最前面并激活

1、窗体放置控件TRzTrayIcon

procedure RzTrayIcon1MinimizeApp(Sender: TObject);
begin
  RzTrayIcon1.ShowBalloonHint(Application.Title, '您可以在此处找到我呦!', bhiInfo);
end;

隐藏窗体

 Application.Minimize;

强制前置显示

procedure setAppFront();
//使程序的窗口出现在最前面并激活
var
  pt, OldPt, NewPt: TPoint;
begin
  //判断Application是否最小化,而不是主窗口的Handle, 使用Restore来还原
  if IsIconic(Application.Handle) then
    Application.Restore;
 
  SetWindowPos(Application.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
  SetWindowPos(Application.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
 
  // 保存鼠标位置,模拟点击窗口,然后再还原鼠标位置
  GetCursorPos(OldPt);
  NewPt:=Point(0, 0);
  Windows.ClientToScreen(Application.Handle, NewPt);
  SetCursorPos(NewPt.X, NewPt.Y);
  mouse_event(MOUSEEVENTF_LEFTDOWN, NewPt.X, NewPt.Y, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, NewPt.X, NewPt.Y, 0, 0);
  SetCursorPos(OldPt.X, OldPt.Y);
end;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi中,可以使用Windows API函数来在指定窗口中找到指定图片,并模拟鼠标单击事件。具体步骤如下: 1. 获取目标窗口的句柄,可以使用FindWindow或FindWindowEx函数来获取。 2. 获取目标窗口的客户区坐标,可以使用GetClientRect函数来获取。 3. 使用BitBlt函数将目标窗口的屏幕图像复制到内存中。 4. 使用FindBitmap函数在内存图像中查找指定的位图,可以使用Graphics.pas单元中的TBitmap对象来表示位图。 5. 如果找到位图,计算位图在目标窗口中的坐标位置,并模拟鼠标单击事件。 下面是一个示例代码: ```delphi var hWnd: HWND; rect: TRect; bmp: TBitmap; pt, ptClient: TPoint; memDC, bmpDC: HDC; memBmp, bmpOld: HBITMAP; begin // 获取目标窗口句柄 hWnd := FindWindow(nil, '窗口标题'); if hWnd <> 0 then begin // 获取目标窗口客户区坐标 GetClientRect(hWnd, rect); // 创建内存DC和内存位图 memDC := CreateCompatibleDC(0); memBmp := CreateCompatibleBitmap(GetDC(0), rect.Right - rect.Left, rect.Bottom - rect.Top); bmpOld := SelectObject(memDC, memBmp); // 将目标窗口的屏幕图像复制到内存中 BitBlt(memDC, 0, 0, rect.Right - rect.Left, rect.Bottom - rect.Top, GetDC(hWnd), 0, 0, SRCCOPY); // 加载位图文件到TBitmap对象中 bmp := TBitmap.Create; bmp.LoadFromFile('图片文件名'); // 在内存图像中查找位图 pt := FindBitmap(memDC, bmp, rect, 0); if (pt.X <> -1) and (pt.Y <> -1) then begin // 计算位图在目标窗口中的坐标位置 ptClient.X := pt.X + rect.Left; ptClient.Y := pt.Y + rect.Top; // 模拟鼠标单击事件 SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(ptClient.X, ptClient.Y)); SendMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MakeLParam(ptClient.X, ptClient.Y)); end; // 释放资源 bmp.Free; SelectObject(memDC, bmpOld); DeleteObject(memBmp); DeleteDC(memDC); end; end; ``` 注意:在使用FindBitmap函数查找位图时,需要传入内存DC、TBitmap对象和目标窗口客户区坐标。如果找到位图,函数返回位图在内存图像中的坐标位置。同时,在模拟鼠标单击事件时,需要传入目标窗口的句柄和位图在目标窗口中的客户区坐标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值