位置: 编程技术 - 正文

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安装步骤)

  • 正常工资薪金包括年终奖吗
  • 购买二手车还需要交购置税吗
  • 应付账款不需要函证
  • 收到财政局拨款填到现金流量表哪一项
  • 发票货物名称前带星号规定
  • 工会可以现金支付吗
  • 进项税额转出结平分录怎么写
  • 哪些类型的合同无效
  • 营改增后怎么计算税费
  • 营改增后11
  • 增值税发票开票限额怎么申请?
  • 收据做账税局认嘛
  • 上月已认证的发票发现错误怎么办
  • 企业以前年度的亏损在哪查
  • 个人所得税违约怎么查询
  • 土地增值税成本扣除项目
  • 外币报表折算差额在会计报表中应作为( )
  • 自产货物用于捐赠的会计处理
  • 购买材料再进在建工程的账务处理
  • 存货清查的账务处理的阐述
  • 降低win10版本
  • 苹果电脑macos big sur
  • 笔记本闪屏正常吗
  • 一般纳税人出租其2016年4月30日前取得的不动产
  • KB5004296无法安装,提示错误代码:0x800f0990的解决方法
  • sbsetup.exe - sbsetup是什么进程 有什么用
  • php string
  • 根据新企业所得税法的规定,企业购买并实际使用
  • PHP:preg_replace_callback()的用法_PCRE正则函数
  • cesium加载s3m
  • 最快的网络传输速率
  • 售后租回怎么理解
  • 典当行交易是给现金吗
  • 所有者权益期末减期初等于净利润还是利润总额
  • 股权激励费用摊销计算
  • 详解php匿名函数
  • thinkphp框架怎么用
  • php sdk使用教程
  • 其他科技推广服务业可以加计扣除吗
  • 固定资产改造费用化账务处理
  • 增值税系统技术维护费抵扣只能当月申报
  • 增值税专用发票和普通发票的区别
  • 车间管理人员为什么是制造费用
  • 企税申报表怎么填
  • java 访问者模式
  • 医疗报销发票是什么样的
  • chrome插件开发拦截ajax
  • mysql存储过程cursor
  • 内账的账务处理
  • 事业单位银行开户规定
  • 免税企业税金及附加计算
  • 报销电话费计入什么科目
  • 小额贷款公司如何运作
  • 购货方收到销售折扣发票怎么入账
  • 2023最新税收优惠政策有哪些
  • 资金结存属于资产类吗
  • 排污费计入管理费用吗
  • 计提利息为什么贷方是应付利息
  • sqlserver数据库恢复
  • ubuntu20.04命令
  • msoobe.exe是什么
  • 如何去掉桌面图标的蓝底
  • 苹果电脑怎么下魔兽争霸
  • win7系统玩暗黑2怎样全屏
  • win7怎么设置快
  • linux filezilla使用教程
  • Tutorial2 Hello dot!
  • 分享五个有用的东西
  • AsyncTask onPostExecute()不执行,与JPush冲突
  • linux升级python2.7
  • js代码规范
  • selenium csdn
  • perl删除文件夹
  • linux shell 中 2>&1的含义
  • unity网络模块
  • js实现字符串和数字对齐
  • 个体工商户税务申报怎么操作流程
  • 企业的绿化用地暂免征收土地使用税
  • 四川国税网上营业厅
  • 深两优3117审定号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设