位置: 编程技术 - 正文

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

  • 购买金税盘和维税盘区别
  • 境外培训费计入关税完税价格
  • 什么是银行税贷产品
  • 要交多少增值税
  • 出口退税计算公式 中华会计网校
  • 企业纳税证明是什么
  • 建筑业的账务处理
  • 固定资产一次性扣除申报表怎么填
  • 计提工资是包含社保吗
  • 运输部门计入什么会计科目
  • 进项税额结转不结转
  • 搭赠的商品怎么开票
  • 流动资产短期借款
  • 债权性投资损失账务处理
  • 材料实际成本的会计分录
  • 股息红利个人所得税扣税失败
  • 不能抵扣的进项税额转出会计分录
  • 计提城市建设维护税
  • 挂靠经营的纳税人
  • 如何理解税收筹划的概念
  • 必要收益率的计算题目
  • 购入设备超过多少才允许一次性扣除
  • 公司对外汇款需要什么手续
  • 小企业流动资产一般是多少
  • 企业出租商铺交什么税费呢
  • 航天维护费全额抵扣
  • 计提代扣代缴个税
  • 为什么预付账款是流动资产
  • 农产品进项税额怎么计算
  • php表单系统源码
  • 重命名电脑名称有什么用
  • php上传文件夹
  • 独资子公司如何注册
  • 现金流量套期的例子
  • 房地产企业哪些成本上升了
  • 社保挂靠会计处理?
  • dmc32.dll
  • 板栗怎样保存1年不坏
  • mpd linux
  • 外购商品转为自用洧费税计算
  • 购买二手车要缴税吗
  • DOMException: Failed to execute ‘insertBefore‘ on ‘Node‘: The node before which the new node ...报错
  • php提交post数据
  • 初学者安装visual studio
  • 特征提取原理
  • window11预览版怎么样
  • blkid命令详解
  • mysql redo log buffer
  • 摊销专利权的会计科目是
  • 小规模纳税人跨区域预缴增值税
  • 企业取得政府奖励资金如何用
  • 外企研发中心
  • 什么情况下计入库存商品
  • 公司吸收合并流程详细步骤
  • 维修费开专票怎么做账
  • 租金收入怎么做分录
  • 经营结余是指事业单位在本年度经营活动
  • access2010怎么还原数据库
  • 一次还本付息债券定价公式
  • 小规模申报表填写模板
  • 发票为什么被列为金额
  • 企业转让固定资产属于什么收入
  • 购买无形资产的手续费计入
  • 长期股权投资减值准备借贷方向增减
  • 出差包干费包括什么
  • 新公司利润分配
  • 如何查询公司的营业执照照片
  • 超市账目
  • mysql必知必会 pdf完整版
  • debian系统如何安装软件
  • smon进程
  • 批处理/d
  • Unity的Attribute(特性)还算多吧
  • javascript SpiderMonkey中的函数序列化如何进行
  • javascript基础编程
  • jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
  • 中国个人所得税是多少?
  • 广东etc政策
  • 如何下载电子国税app
  • 小规模纳税人是按月还是按季度申报增值税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设