无非就是调用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 指定窗口拥有一个垂直的滚动条。