位置: 编程技术 - 正文

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

  • 个体工商户营业执照需要什么材料
  • 存货的期末余额在借方还是贷方
  • 2020年建筑企业税收优惠政策
  • 跨月专用发票怎么冲销
  • 非贸易付汇去银行汇款流程
  • 债权转增资本应缴纳什么税
  • 计提应付票据利息的会计分录
  • 公司收到银行转账会计分录
  • 房屋租赁可以开住宿费吗
  • 广告公司对外捐赠的会计处理怎么做?
  • 政府补贴项目申报流程
  • 对方承担税点的发票额怎么计算
  • 哪些发票可以用ppt
  • 公司开出的经济补偿金可以税前扣除吗
  • 来料加工企业的会计处理问题
  • 什么情况下发票不能冲红
  • 公司抵扣发票不用交税吗
  • 查账征收企业所得税年度申报
  • 个体工商户餐饮业税率是多少
  • 9万以下免征增值税政策
  • 代收车船税是什么意思必须收吗
  • 增值税电子普通发票怎么下载
  • 发票校验码后六位在哪个位置图片
  • 12月计提税金
  • 1697510006
  • 新成立的有限公司
  • 财务人员工资计入什么费用?
  • 工龄补偿款
  • 鸿蒙侧边菜单
  • linux批量操作工具
  • 给文件夹设置密码的软件
  • win11系统咋样
  • 委托出口的会计分录
  • php代码扫描
  • php字符串比较大小
  • 公允价值进行会计计量
  • 网上报税有哪些
  • php类的定义
  • html5+css3web前端设计基础教程
  • 少收的应收款和应收账款
  • 工业企业成本核算的一般程序
  • 房产税收特点有哪些
  • 循环表是线性表吗
  • webservice api接口
  • 你用python做什么
  • 一般纳税人增值税税率
  • 确认收入时还没交税
  • 境外公司汇款给个人要交税吗
  • 先买再卖影响可取现金吗
  • 公允价值怎么读
  • 衍生工具什么意思
  • 短期借款可以用于在建工程吗
  • 微信转账如何处理退回去
  • 代收污水处理费免税
  • 以公允价值计量的金融资产
  • 业务员垫付保费
  • 股权投资损失 属于法定资产损失 实际资产损失
  • 公司购买车
  • 客户赔偿款计入成本吗
  • 工会会费收入计入会计科目
  • 发票税率如何填写
  • 报销单粘贴单
  • 购买金税盘的分录
  • 核定征收的小微企业
  • 销售退货怎么开票
  • sqlserver日志清理
  • sql wind
  • mysql优化技巧实战
  • win7下mysql6.x出现中文乱码的完美解决方法
  • mysql 5.7.21安装教程
  • 在windows中打开一个窗口后
  • window7发布
  • 如何查看win7系统
  • win7系统鼠标指针形状介绍
  • python 3.5下xadmin的使用及修复源码bug
  • windows、linux
  • unity销毁预制体
  • 韩国快递关税
  • 财政云操作视频
  • 增值税专用发票和普通发票的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设