• Delphi窗体置顶及失去焦点后取得焦点


    unit u_FrmTopMostActive;
    
    interface
    
    uses Winapi.Windows;
    
    implementation
    
    // 窗体置顶
    procedure SetXwForegroundWindow(AHandle: Thandle);
    var
      hFgWin: Thandle;
      hFgThread: Thandle;
    begin
    
      ShowWindow(AHandle, SW_NORMAL);
    
      hFgWin := GetForegroundWindow;
      hFgThread := GetWindowThreadProcessID(hFgWin, nil);
    
      if AttachThreadInput(GetCurrentThreadID, hFgThread, true) then
      begin
        SetForegroundWindow(AHandle);
        AttachThreadInput(GetCurrentThreadID, hFgThread, false);
      end
      else
        SetForegroundWindow(AHandle);
    
    end;
    
    // 激活窗体
    function SetSysFocus(AHandle: Thandle): boolean;
    var
      hThreadId: Thandle;
      hFgThreadId: Thandle;
    begin
      result := false;
      if not IsWindow(AHandle) then
        exit;
      hThreadId := GetWindowThreadProcessID(AHandle, nil);
      hFgThreadId := GetWindowThreadProcessID(GetForegroundWindow, nil);
      if AttachThreadInput(hThreadId, hFgThreadId, true) then
      begin
        SetFocus(AHandle);
        AttachThreadInput(hThreadId, hFgThreadId, false);
      end
      else
        SetFocus(AHandle);
      result := true;
    end;
    
    end.

    使用方式

    uses U_FrmTopmostActive;

    //自己需要的处理完后调用,句柄测试为本窗体的句柄

        SetXwForegroundWindow(Self.Handle);
        SetSysFocus(Self.Handle);

  • 相关阅读:
    解决jar包冲突
    postman使用记录
    get请求直接通过浏览器发请求传数组或者list到后台
    excel中ppmt/pmt/ipmt的计算方式
    unicode编码与解码
    spring参数拼装
    java内存模型(jmm)
    Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/jijm123/p/13788121.html
Copyright © 2020-2023  润新知