Unity开启外部EXE程序

Unity开启外部EXE

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;public class Unity_OpenExe : MonoBehaviour
{public string[] WebCamList;public List<Process> CamProcessList = new List<Process>();//使用查找任务栏[DllImport("user32.dll")]static extern IntPtr FindWindow(string strClassName, int nptWindowName);//当前窗口[DllImport("user32.dll")] static extern IntPtr GetForegroundWindow();//获取窗口位置以及大小[DllImport("user32.dll")] static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);[StructLayout(LayoutKind.Sequential)]private struct RECT{public int Left; //最左坐标public int Top; //最上坐标public int Right; //最右坐标public int Bottom; //最下坐标}[DllImport("user32.dll")]static extern IntPtr SetWindowLong(IntPtr hwnd, int _nIndex, int dwNewLong);[DllImport("user32.dll")]static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);[DllImport("user32.dll", SetLastError = true)]private static extern int GetWindowLong(IntPtr hWnd, int nIndex);const uint SWP_SHOWWINDOW = 0x0040;const int GWL_STYLE = -16;const int WS_BORDER = 1;const int WS_POPUP = 0x800000;Process X;Process Y;IntPtr intPtr1;private string ProcessName;List<string> exeS = new List<string>();private void Start(){
#if UNITY_EDITOR#elseOpenNetBox();
#endif}public void OpenNetBox(){UnityEngine.Debug.LogWarning("使用前请配置文件路径");if (WebCamList != null && WebCamList.Length > 0){foreach (var item in WebCamList){Task.Run(() =>{try{string exePath = Application.streamingAssetsPath + "/" + item;Process webcam = Process.Start(exePath);IntPtr winIntPtr0 = FindWindow("PreviewDemo", 0);if (winIntPtr0 != null){//   UnityEngine.Debug.LogWarning("句柄找到");// SetWindowPos(winIntPtr0, 0, 500, 800, 500, 687, 3);//1280,970,600,400//1280,462,600,400}CamProcessList.Add(webcam);}catch (Exception ex){throw ex;}});}//Task.Run(() =>//{//    exePath1 = Application.streamingAssetsPath + "/" + "WebCam1/PreviewDemo.exe";//    X = Process.Start(exePath1);//    IntPtr winIntPtr0 = FindWindow("PreviewDemo", 0);//    if (winIntPtr0 != null)//    {//        UnityEngine.Debug.LogWarning("句柄找到");//        SetWindowPos(winIntPtr0, 0, 500, 800, 500, 687, 3);//        //1280,970,600,400//        //1280,462,600,400//    }//});}//Task.Run(() =>//{//    exePath2 = Application.streamingAssetsPath + "/" + "WebCam2/PreviewDemo.exe";//    Y = Process.Start(exePath2);//    IntPtr winIntPtr1 = FindWindow("PreviewDemo", 0);//    if (winIntPtr1 != null)//    {//        UnityEngine.Debug.LogWarning("句柄找到");//       // SetWindowPos(winIntPtr1, 0, 0, 0, 1280, 687, 3);//        SetWindowPos(winIntPtr1, 0, 0, 0, 1280, 767, 3);//    }//});if (string.IsNullOrEmpty(ProcessName)){//ProcessName = X.ProcessName;}}public void CloseNetBox(){X.Kill();Y.Kill();}private void OnDestroy(){foreach (var process in Process.GetProcesses()){if (process.ProcessName.Equals("PreviewDemo") && !process.HasExited)process.Kill();}if (CamProcessList != null){for (int i = 0; i < CamProcessList.Count; i++){if (CamProcessList[i] != null && !CamProcessList[i].HasExited){CamProcessList[i].Kill();}}}CamProcessList.Clear();//if (X != null)//{//    X.Kill();//}//if (Y != null)//{//    Y.Kill();//}}void Update(){}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Algorithms and Data Structures in C++ by Mohammed Yasir Eramangadan

MP4 创建 |视频&#xff1a;h264、1280720 |音频&#xff1a;AAC&#xff0c;44.1 KHz&#xff0c;2 通道 类型&#xff1a;在线学习 |语言&#xff1a;英文 字幕 |持续时间&#xff1a; 159 讲座 &#xff08; 10h 43m &#xff09; |大小&#xff1a; 3.5 GB “通过专家制作…

Eclipse 创建 Java 接口

Eclipse 创建 Java 接口 Eclipse 是一款广受欢迎的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它为 Java 开发者提供了强大的工具和特性&#xff0c;使得创建和管理 Java 接口变得简单而高效。在本教程中&#xff0c;我们将详细介绍如何在 Eclipse 中创建 Java 接口…

JVM_总结详解

1、CPU和内存的交互 了解jvm内存模型前&#xff0c;了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】 有篇很棒的文章&#xff0c;从cpu讲到内存模型:[什么是java内存模型&#xff1f;] 在计算机中&#xff0c;cpu和内存的交互最…

屏幕分辨率|尺寸|颜色深度指纹修改

一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度&#xff0c;横屏竖屏信息。 二、window.screen c接口实现&#xff1a; 1、third_party\blink\renderer\core\frame\screen.idl // https://drafts.csswg.org/cssom-view/#the-screen-interface[ExposedWindow ] …

Linux三剑客-awk

一、什么是awk awk 是一个强大的文本处理工具&#xff0c;它在 Unix 和类 Unix 系统中广泛使用。awk 可以处理文本文件&#xff0c;提取信息&#xff0c;进行模式匹配和文本替换等操作。 二、awk的语法 1.基本语法 awk [options] pattern { action } file 选项参数说明&am…

vue3实现自定义导航菜单

一、创建项目 1. 打开HBuilder X 图1 2. 新建一个空项目 文件->新建->项目->uni-app 填写项目名称&#xff1a;vue3demo 选择项目存放目录&#xff1a;D:/HBuilderProjects 一定要注意vue的版本&#xff0c;当前选择的版本为vue3 图2 点击“创建”之后进入项目界面 图…

再学transformer

再学transformer 位置编码 位置编码 为什么需要位置编码 位置编码分为相对位置编码、绝对位置编码、旋转位置编码

BASLER工业相机维修不能触发拍照如何处理解决这个问题

BASLER工业相机维修不能触发拍照如何处理解决这个问题&#xff1f;最近遇到挺多工业相机维修咨询这个不能触发拍照的案例&#xff0c;所以今天优米佳维修的技术就抽空整理了这篇关于BASLER相机不能触发拍照的处理方法分享给大家。 当碰到巴斯勒工业相机不能触发拍照的问题&…

深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接

1.前言 从一个高级语言到可执行程序&#xff0c;要经过预处理、编译&#xff0c;汇编和链接四个过程。大家可以思考下&#xff0c;为什么要有这样的过程&#xff1f; 我们学习计算机之处&#xff0c;就应该了解到&#xff0c;计算机能够识别的只有二进制语言&#xff08;这是…

民安:助力提升城市安全水平

随着城市化进程的加速&#xff0c;平安城市的创建成为了社会治理的重要议题。为了解公众对平安城市创建的看法和评价&#xff0c;为提升城市安全水平提供参考&#xff0c;近期某市委托民安智库专业市场调查公司开展了一次安全感满意度调查。 本次调查围绕公共安全、个人安全、…

HTTP代理是什么,主要用来干嘛?

在探讨互联网通信和数据传输的广阔领域中&#xff0c;HTTP代理作为一个重要而广泛使用的工具&#xff0c;扮演着不可或缺的角色。本文将深入浅出地介绍HTTP代理的基本概念、工作原理及其主要应用场景。 一、HTTP代理的基本概念 HTTP代理&#xff0c;简而言之&#xff0c;是一…

“不可能三角”的“宿敌”,AI辅助技术撕开“第一道口子”

尽管&#xff0c;打破看得好病、看得起病和看得上病这个“不可能三角”&#xff0c;无法一蹴而就&#xff0c;但是在人工智能浪潮的推动下&#xff0c;“不可能”也在逐渐向“可能”转变。 近日&#xff0c;国家医保局在相关新闻发布会上表示&#xff0c;目前已编制发布17批立…

【Linux】剧幕中的灵魂更迭:探索Shell下的程序替换

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出&#xff0c;万山无阻 目录 &#x1f4d6;一、进程程序替换 1.替换的演示 ❓替换与执行流 ❓程序替换≠进程替换 2.替换的原理 …

【MySQL】数据库开发技术:内外连接与表的索引穿透深度解析

前言:本节内容主要讲解表的内连和外连以及索引的一部分。 注意&#xff1a; 索引是很重要的知识点。务必学习&#xff01;&#xff01;本节将会主要谈一谈什么是索引&#xff0c;如何理解索引。 以及怎么理解MySQL与磁盘的关系。 下面友友们开始学习吧&#xff01; ps&#xff…

Matlab Simulink HDL Coder开发流程(三)— 验证从Simulink模型生成的HDL代码

验证从Simulink模型生成的HDL代码 一、什么是HDL Test Bench&#xff08;测试台&#xff09;二、简单的计数器模型三、验证方法四、生成HDL Test Bench生成VHDL Test Bench生成Verilog Test Bench代码 五、查看HDL Test Bench文件六、运行仿真和验证生成的HDL代码七、在目标设备…

设计模式:11、迭代器模式(游标)

目录 0、定义 1、迭代器模式的四种角色 2、迭代器模式的UML类图 3、示例代码 4、迭代器的next()方法与集合的get(int index)方法的效率对比&#xff08;LinkedList为例&#xff09; 0、定义 提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不需要暴露该对象…

基于SpringBoot的“招聘信息管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“招聘信息管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图 企业招聘界面…

Linux高阶——1123—服务器基础服务器设备服务器基础能力

目录 1、服务器基础 1、服务器基本概述 2、服务器设计之初解决的问题 网络穿透 网络数据设备间的收发 3、服务器的类型C/S、B/S 2、服务器设备 将自己的服务器软件部署上线 3、代理服务器负载均衡&#xff0c;以及地址绑定方式 4、服务器的基础能力 1、服务器基础 1…

探索 Python 任务自动化的新境界:Invoke 库揭秘

文章目录 探索 Python 任务自动化的新境界&#xff1a;Invoke 库揭秘背景&#xff1a;为何选择 Invoke&#xff1f;什么是 Invoke&#xff1f;如何安装 Invoke&#xff1f;5个简单的库函数使用方法1. 定义任务2. 带参数的任务3. 运行 Shell 命令4. 任务参数化5. 列出任务 场景应…

docker部署nginx,并配置SSL证书

、拉取nginx镜像 docker pull nginx:latest 在此过程中会遇到网络的问题&#xff0c;导致镜像无法下载&#xff0c;这时候需要在服务器中配置下国内的镜像地址。下面包含近期最新的国内镜像&#xff0c;截至2024年11月27日&#xff1a; "https://<你的阿里云账号ID&…