位置: 编程技术 - 正文

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

  • 增值税税率改变后原项目的新增单价按哪个税率
  • 增值税申报表如何打印
  • 工程施工和工程结算对冲有差额的会计分录
  • 劳务服务有什么
  • 小规模个税每月限免额是多少
  • 虚拟货币会计分录
  • 小规模纳税人变成一般纳税人之前的发票变更
  • 单张发票金额有多少
  • 采购货款属于什么会计科目
  • 房屋及建筑物属于什么会计要素
  • 政府补贴中介合法吗
  • 不是单位职工个税怎么算
  • 社保利息是什么意思
  • 资金周转率计算公式期初占用资金
  • 品种法在制造企业中的运用
  • 代扣工资申请怎么写
  • 旧房转让土地增值税计算
  • 企业外购零部件可以入哪个会计科目核算?
  • 酒店装修费用会计处理
  • 银行贷款入公账怎么入分录?
  • 党费返还款怎么做分录
  • mac上安装homebrew
  • 增值税贷方余额为负数怎么调整
  • 债权转增资本公积账务处理
  • win10专业版如何关闭系统更新
  • 摊销租赁费属于什么费用
  • 增值税专用发票查询系统官方网站
  • 银行对公中收
  • 工业企业会计核算的特点
  • 'The Wave' sandstone formation in Coyote Buttes North, Paria Canyon-Vermilion Cliffs National Monument, Arizona (© Dennis Frates/Alamy)
  • 免税怎么开
  • 预付账款的会计编码是多少?
  • 虚开增值税怎么查到的
  • php获取文件夹大小
  • 失控发票成本做账怎么做
  • 发票密码区如何调整
  • vue display
  • vue docs
  • 融资租赁的残值归出租人所有,为啥要减去租金限值
  • 如何计提所得税费用科目
  • 个人接受现金捐赠的情况
  • 织梦怎么套模板
  • 流动资产与资产总额的比率叫什么比率
  • 药店主营业务成本怎么算出来的
  • 未达起征点的增值税会计处理
  • 增值税发票已抵扣怎么红冲
  • 固定资产怎么进行无形资产清理的
  • 合作社分红计入什么科目
  • 账务处理的种类有哪些
  • 机票报销属于什么科目
  • 期初余额根据什么填
  • 上年多计提的费用,今年如何记账
  • 如何暂估费用会计分录
  • 涉及销售费用如何计算
  • 客户退货不退赠品怎么办
  • 公司车还车贷计入什么科目
  • 收到红字发票进项税怎么做账务处理
  • sqlserver多表查询怎么加索引
  • mysql怎么切换到bin目录
  • sql语句压缩
  • sql复制表的语句
  • centos6.2安装教程
  • 域怎么改名
  • mac系统怎么新建txt
  • spoolsrv.exe - spoolsrv是什么进程 有什么作用
  • mac最近使用的文稿打不开
  • ini文件是什么意思
  • win8装机教程
  • linux命令文件移动
  • layui nodejs
  • javascript的区别
  • dos常用命令与批处理文件
  • 监控网站是否可以删除
  • for循环取数据
  • 手把手教怎么说
  • js中倒计时器怎么实现
  • 江苏税务查询电子发票
  • 甘肃国税电子税务局
  • 开票金额有限额吗
  • 同比减少怎么计算出来
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设