unity发布exe窗体置顶

无非就是调用windows窗口api,实际测试这个api有效,比一些轮询设置焦点好多了。
具体api含义没去了解了。


using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Diagnostics;
using UnityEngine;
public class Showfirst : MonoBehaviour
{
    [DllImport("user32.dll", EntryPoint = "FindWindow")]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll")]
    static extern IntPtr SetWindowLong(IntPtr hwnd, int _nIndex, int dwNewLong);
    [DllImport("user32.dll")]
    static extern IntPtr SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint wFlags);

    public Rect screenPosition;
    const uint SWP_SHOWWINDOW = 0x0040;
    const int HWND_TOP = 0;
    const int HWND_TOPMOST = -1;
    const int GWL_STYLE = -16;
    const int WS_BORDER = 1;

    void Start()
    {
        IntPtr ptr = FindWindow(null, "TestAnimation"); //TestAnimation为程序名,需要替换
        SetWindowLong(ptr, GWL_STYLE, WS_BORDER);   //窗口全屏
        SetWindowPos(ptr, (IntPtr)HWND_TOPMOST, (int)screenPosition.x, (int)screenPosition.y, (int)screenPosition.width, (int)screenPosition.height, SWP_SHOWWINDOW);   //窗口置顶
    }
}
 

沒有效果的延時0.1试试

https://blog.csdn.net/qq_39097425/article/details/81664448

窗口样式
常量 描述
WS_BORDER 窗口有一个细线边框。
WS_CAPTION 窗口有一个标题栏
WS_CHILD 窗口为一个子窗口,该窗口没有菜单栏,该样式不能和WS_POPUP一起使用。
WS_CHILDWINDOW 同WS_CHILD
WS_CLIPCHILDREN 当绘制行为在父窗口中进行时排除被子窗口占据的区域。该样式在创建父窗口的时候使用。
WS_CLIPSIBLINGS 当一个特定的子窗口接收了一个WM_PAINT消息,WS_CLIPSIBLINGS样式会对某个子窗口A的区域减去子窗口A与其他子窗口的叠加区域的区域进行更新。如果没有指定这个样式,各个子窗口之间有重叠发生,在绘制一个子窗口的客户区域时,有可能会绘制另外一个子窗口的客户区域,这里说的客户区域是指两个子窗口之间的重叠区域,即被绘制了两遍。
WS_DISABLED 一个disabled的窗口不能从用户那接收输入。若需要在窗口创建之后修改这个样式,可以调用EnableWindow函数。
WS_DLGFRAME 指定一个通用的Dialog的样式,使用该样式的窗口没有标题栏。
WS_GROUP
WS_HSCROLL 窗口有一个水平的滚动条。
WS_ICONIC 窗口的初始状态是最小化状态。
WS_MAXIMIZE 窗口的初始状态是最大化状态。
WS_MAXIMIZEBOX 窗口有一个最大化按钮。不能和WS_EX_CONTEXTHELP样式一起使用。必须指定WS_SYSMENU样式。
WS_MINIMIZE 窗口的初始状态是最小化状态。
WS_MINIMIZEBOX 窗口有一个最小化按钮。不能和WS_EX_CONTEXTHELP样式一起使用。必须指定WS_SYSMENU样式。
WS_OVERLAPPED 窗口是一个可叠加窗口。可叠加窗口拥有一个标题栏和边界。同WS_TILED样式。
WS_OVERLAPPEDWINDOW
(WS_OVERLAPPED |
WS_CAPTION |
WS_SYSMENU |
WS_THICKFRAME |
WS_MINIMIZEBOX |
WS_MAXIMIZEBOX | 指定窗口为一个可叠加窗口。同WS_TILEDWINDOW样式。
WS_POPUP 窗口为弹出式窗口,不能和WS_CHILD一起使用。
WS_POPUPWINDOW
(WS_POPUP |
WS_BORDER |
WS_SYSMENU) 窗口是弹出式窗口,必须和WS_CAPTION一起使用以使得窗口菜单可见。
WS_SIZEBOX 窗口具有大小可调边框。同WS_THICKFRAME。
WS_SYSMENU 窗口在其标题栏上有一个菜单。需同时指定WS_CAPTION样式。
WS_TABSTOP 窗口是一个控件,当用户按了TAB键时可以接收键盘输入。按下TAB键改变了下一个拥有WS_TABSTOP样式的控件的键盘焦点。
在一个窗口被创建之后,使用SetWindowLong函数来改变这个样式。对于用户创建的窗口和modeless类型的对话框能够使用tab stops,需要在消息循环中调用IsDialogMessage函数。
WS_THICKFRAME 指定窗口拥有一个可调整大小的边界。同WS_SIZEBOX样式。
WS_TILED 窗口是一个可叠加窗口。可叠加窗口有一个标题栏和边界。同WS_OVERLAPPED。
WS_TILEDWINDOW 窗口是一个可叠加窗口。同WS_OVERLAPPEDWINDOW样式。
WS_VISIBLE 窗口的初始状态是可见状态。可以使用ShowWindow函数或者SetWindowPos函数来打开或者关闭这个样式。
WS_VSCROLL 指定窗口拥有一个垂直的滚动条。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值