Unity WindowsSDK对接之win窗口句柄、进程、常见问题处理

2024-01-13 07:58

本文主要是介绍Unity WindowsSDK对接之win窗口句柄、进程、常见问题处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

持续更新中…

常用代码

1】查找窗口句柄

[DllImport("user32.dll")]  
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);// 查找记事本窗口句柄
IntPtr hWnd = FindWindow("Notepad", null);  

2】获取当前进程

Process curProcess = Process.GetCurrentProcess();
int curProId = curProcess.Id;  // 获取当前进程id// 直接杀掉进程
curProcess.Kill();
curProcess.WaitForExit();// 获取所有进程
Process[] process = Process.GetProcesses();

3】获取当前窗口句柄【高级】

using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
using LR;
using AOT;public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);[DllImport("user32.dll", SetLastError = true)]
public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr GetParent(IntPtr hWnd);[DllImport("user32.dll")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);// 如果unity是IL2Cpp的话,必须静态才能合法传到c++层
[MonoPInvokeCallback(typeof(WNDENUMPROC))]
public static bool EnumWindowCallBack(IntPtr hwnd, uint lParam)
{uint id = 0;if (GetParent(hwnd) == IntPtr.Zero){GetWindowThreadProcessId(hwnd, ref id);// 如果这个进程id == 当前进程id,则返回窗口句柄if (id == lParam){m_GameProcessID = hwnd;return false;}}return true;
}// 获取当前进程窗口句柄
public static IntPtr GetProcessWnd()
{uint pid = (uint)Process.GetCurrentProcess().Id;  // 当前进程 ID  // 遍历所有win枚举,找bool bResult = EnumWindows(EnumWindowCallBack , pid);m_GameProcessID = (!bResult && Marshal.GetLastWin32Error() == 0) ? m_GameProcessID : IntPtr.Zero;return m_GameProcessID;
}

问题处理

问题1:获取当前窗口句柄时抛出异常:NotSupportedException: IL2CPP does not support marshaling
delegates that point to instance methods to native code
原因:在il2cpp的方式下,不能直接传实例到c++层面, 传过去的必须是静态方法才行【把自定义函数传递给 C++非托管代码】。 mono的没问题,纯C#的也没问题。 以下解决方案(加静态,加特性都是必须的)ok的。
参考1:https://garry.tv/steamworks-and-il2cpp
参考2:https://www.jianshu.com/p/fa513f9d3a1c

问题2:游戏出现GetThreadContext failed报错 Unity开发
解决方案
1.检查是否有360。有的情况(1)简单方案:卸载360。(2)专业方案:将游戏exe添加到360信任名单中
解释:360会将一些模拟按键视为木马,然后游戏运行一般直接闪退。
2.检查防火墙。专业方案:将游戏exe加入防火墙允许应用的列表中,勾选专用和公用。
解释:无。关了防火墙还会有问题,然后将exe加入允许列表就没碰到了。玄学。
参考:https://blog.csdn.net/wanfping123/article/details/103426716

问题3:打出来的包 权限是高(双击打开必须要管理员权限,有的因为电脑设置不会提示),要改成中?
跳转博文

这篇关于Unity WindowsSDK对接之win窗口句柄、进程、常见问题处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/600741

相关文章

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3

java连接opcua的常见问题及解决方法

《java连接opcua的常见问题及解决方法》本文将使用EclipseMilo作为示例库,演示如何在Java中使用匿名、用户名密码以及证书加密三种方式连接到OPCUA服务器,若需要使用其他SDK,原理... 目录一、前言二、准备工作三、匿名方式连接3.1 匿名方式简介3.2 示例代码四、用户名密码方式连接4