位置: 编程技术 - 正文

unity3d 实现windows 消息(unity3d winform)

编辑:rootadmin
【狗刨学习网】Windows Message in the Unity3D : WndProc先前提到可以用 Hooks 的方法在 Unity 裡監控 Windows Message,但是使用 Hooks 這個方法我們沒辦法更改 Message 的內容。因此這邊提出第二個方式。Windows 傳送 Message 給 Unity 時,會呼叫 Unity 預設的 Message 處理函數,但透過函數:pOldWndProc =(WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)SubWndProc);我們可以將原本 Windows 呼叫 Unity 預設的 Message 處理函數改為呼叫我們指定的函數,指定的函數把我們想要處理的 Message 處理完,再把剩下的 Message 丟回給 Unity 來處理。原本實作是使用 dllimport 讓 SetWindowLong function 可以在 C# 裡呼叫, 並把整個 callback function 及流程實作出來,且測試時運作都相當正常,但程式在關閉時會出現 Access Violation 的錯誤,後來將整個實作改成 C DLL 之後錯誤才沒有出現,不知道是什麼原因?底下是 DLL 部分的原始碼:#include "stdafx.h"LRESULT CALLBACK SubWndProc(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam); WNDPROC gOldWndProc = NULL; HWND gUnityWnd = NULL; #ifdef __cplusplusextern "C" {#endif /* __cplusplus */__declspec(dllexport) bool __stdcall init(HWND hWnd){ gOldWndProc =(WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)SubWndProc); gUnityWnd =hWnd; if (gOldWndProc !=NULL) return true; return false;}__declspec(dllexport) void __stdcall release(){ SetWindowLong(gUnityWnd, GWL_WNDPROC, (LONG)gOldWndProc); gOldWndProc =0; gUnityWnd =0;}#ifdef __cplusplus}#endif /* __cplusplus */LRESULT CALLBACK SubWndProc(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam){switch(nMessage){ case WM_IME_SETCONTEXT: case WM_IME_STARTCOMPOSITION: case WM_IME_ENDCOMPOSITION: case WM_IME_COMPOSITION: case WM_IME_REQUEST: { //... } break;}return CallWindowProc(gOldWndProc, hWnd, nMessage, wParam, lParam);}复制代码Unity 可以透過呼叫 DLL 提供的 init() 函數,讓 Windows 改為呼叫我們指定的函數 (SubWndProc) 來處理 Message,透過 release() 函數讓 Message 處理流程復原。底下是 Unity 部分的原始碼(DLL 檔名為 UnityIMEDLL.dll 且檔案放在 Assets/Plugins 目錄下)using UnityEngine;using System;using System.Collections;using System.Collections.Generic;using System.Runtime.InteropServices;public class IMEInputBox : MonoBehaviour{ //----------------------------------------------------------- [DllImport("UnityIMEDLL")] protected static extern bool init(IntPtr hWnd); [DllImport("UnityIMEDLL")] protected static extern void release(); [DllImport("user")] protected static extern IntPtr GetActiveWindow(); //-----------------------------------------------------------// Use this for initializationvoid Start (){ Debug.Log("init UnityIMEDLL."); try { init(GetActiveWindow()); } catch (Exception e) { Debug.Log(e.ToString()); }} void OnDisable() { Debug.Log("release UnityIMEDLL."); try { release(); } catch (Exception e) { Debug.Log(e.ToString()); } }}复制代码声明:此篇文档时来自于【狗刨学习网】社区,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。更多精彩内容:www.gopedu.com

推荐整理分享unity3d 实现windows 消息(unity3d winform),希望有所帮助,仅作参考,欢迎阅读内容。

unity3d 实现windows 消息(unity3d winform)

文章相关热门搜索词:unity3d怎么运行,unity发布windows,unity win10,unity3d winform,unity3d winform,unity发布windows,unity3d winform,unity win10,内容如对您有帮助,希望把文章链接给更多的朋友!

unity3d减小安装包大小专题(4):剔除重复资源 如果你们美术不是很给力的话,是非常容易出现重复资源的情况。那么如果能剔除,当然是最好的了。先看下无场景的情况下apk大小:.4M(这里有一个

Unity3D关于UIRoot的屏幕适配方法 转载自:

Unity3d 杂七杂八小技巧 文章作者:松阳本文出自阿修罗道,禁止用于商业用途,转载请注明出处。原文链接:

标签: unity3d winform

本文链接地址:https://www.jiuchutong.com/biancheng/381580.html 转载请保留说明!

上一篇:[3D跑酷] AudioManager(bud3d跑酷)

下一篇:unity3d减小安装包大小专题(4):剔除重复资源(unity3d2019安装步骤)

  • 贷款取现金
  • 应税消费品是什么意思
  • 出口退免税的退税办法为
  • 公司账户进账必须交税吗
  • 增值税发票已抵扣能否认定合同关系
  • 企业年报修改后,第三方平台多久同步
  • 小规模纳税人开票税率
  • 普通折叠发票代码是几位数
  • 通过网络手段获取用户行为的方法
  • 停工损耗会计分录怎么写
  • 海关废品回收
  • 专项科研经费
  • 企业理财收入交哪些税
  • 简易注销还要去找专管员
  • 印花税季度报还是月报
  • 坏账准备需要做账吗
  • 转出未交增值税借方余额表示什么
  • 收到购买商品发票怎么做账
  • 华为手机屏幕变成黑白色怎么恢复
  • 如何解决windows7无法开机
  • 王者荣耀中扁鹊的克星是谁
  • 网页视频播放不流畅原因
  • 虚假财务报表的案例
  • phppregmatch
  • 公司出租房屋租赁发票税率
  • 汽车维修收费标准及费用计算方法
  • php共享内存用法有哪些
  • 印花税具体包括哪几类
  • yii2.0框架
  • thinkphp框架介绍
  • nginx连接超时时间设置多少
  • php curl_exec
  • 深度学习中正样本、负样本、简单样本、困难样本的区别 (简单易懂)
  • vue3 script setup withdefault
  • win11调节屏幕亮度快捷键
  • unzip解压命令参数
  • php登录流程
  • php的基本知识
  • 长期股权投资权益法转成本法
  • 补缴企业所得税的计算公式
  • 处理二手物品要交增值税吗
  • 新准则公允价值变动科目余额为负数
  • 如何用python绘制
  • 补充医疗保险属于什么
  • 供货单位与开票单位不一致
  • 领取材料的分录
  • 支付宝商户服务电话
  • 无租房合同可以贷款吗
  • 劳务派遣人员保险
  • sqlserver2005简介
  • 没进项发票的开销项发票多少税?
  • 测绘费 土地增值税
  • 差额征税小规模纳税人免税销售额栏次
  • 残疾人就业保障金怎么计算
  • 红字冲销怎么做账
  • 员工借款属于什么现金流量
  • 银行印鉴变更申请书范本
  • 股东撤资如何退还资金,用途写什么
  • 固定资产减值准备一经计提不得转回
  • 税盘减免税款怎么做账
  • 公司名义送花篮属于什么费用
  • 一般纳税人购进税控设备如何抵扣
  • 普票的销项负数怎么开
  • 个体工商户和公司的优缺点
  • 安卓设备连接苹果设备
  • 桌面右边
  • win10首个正式版发布日期
  • aliwssv.exe是什么进程
  • win10预览版和正式版区别
  • linux获取操作命令的使用方法或参数选项内容
  • apache1.3.19配置文件
  • 退出清理磁盘
  • win8系统损坏怎么修复
  • win8开机进入开始界面
  • react 技巧
  • python程序的开发过程
  • 微信小程序使用webview
  • js开发组件
  • mybatis框架执行流程
  • 水利基金税率‰6什么时候调整
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设