位置: 编程技术 - 正文

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

  • 职工食堂费用计入管理费用
  • 基本户的利息和本金比例
  • 金税盘怎么向分行汇款
  • 水电气费用属于固定成本
  • 闲置固定资产如何做账
  • 银行代发工资户允许有余额吗
  • 劳务 劳务报酬所得
  • 车间报销办公费计入什么科目
  • 预售收入是否可以退税
  • 高新技术企业账务处理注意事项
  • 劳务分期收款税率是多少
  • 固定资产作为实收资本报废怎么处理
  • 印花税的基数及标准是多少?
  • 培训费可以抵扣企业所得税
  • 药企常见税务风险及措施
  • 企业如何做好税务管理工作
  • 不适用研究开发费用税前加计扣除政策的有
  • 哪些进项税不能加计抵减
  • 调整以前年度应交税费分录
  • 公司注册资金未实缴可以申请破产吗
  • 定额发票2019年规定
  • 小规模纳税人减免税明细表怎么填
  • 试营业期间的费用算不算开办费?
  • 以前年度暂估
  • 企业购买可转债会计分录
  • 驾校如何用完工百分比法确认收入?
  • 公司增加注册资金需要实缴吗
  • 微信收款会计分录,然后提现有手续费
  • 多发工资未退回会怎么样
  • 不动产抵押合同管辖法院
  • 期末调汇凭证怎么调
  • 工资上月计提多了,这个月怎么冲
  • 为员工购买的团员保险
  • 印花税税收优惠政策2023
  • 跨年收到退回增值税税款的账务处理
  • PQIBrowser.exe是什么进程 PQIBrowser进程查询
  • 黄喉蜂虎鸟是保护动物吗
  • js怎么实现倒计时
  • 人工智能怎么做出来的
  • 短信php源码
  • discuz去除版权
  • 固定资产有金额界定吗
  • 结算外单位收取的费用
  • 购买研发设备可以直接列入研发开支不
  • 当月确认收入可以下月确认成本吗
  • python 函数的返回值
  • 现金销售收入是什么意思
  • 个税里的累计专项扣除是什么
  • 去年暂估费用,今年收到发票怎么处理
  • 单位订购价格
  • 一年内到期的非流动负债计算公式
  • 长期挂账应付款的处理方法
  • 两个公司之间怎么走账
  • 固定资产申请报告
  • 检测公司成本科目
  • 企业取得租车发票
  • 年底员工借款如何处理
  • 给职工交的商业险是什么
  • 高新技术企业福利
  • 一般纳税人支付的哪些增值税进项税额不能抵扣
  • 预付购买设备款
  • 新成立的分公司怎么样
  • 删除数据库重复
  • 存储过程的输出参数有且只能有一个
  • xp系统内存不足怎么办
  • 扫清落叶堆怎么扫
  • 2008r2多用户远程桌面
  • Kali(debian) Too many open files 错误处理办法
  • ssonsvr.exe - ssonsvr是什么进程
  • fciv.exe
  • 不需要远程传输的文件
  • android游戏编程之从零开始
  • 实用的批处理命令
  • python中用input()函数接收到的数据为
  • shell怎么创建用户
  • python time模块日期运算
  • jQuery实现获取table表格第一列值的方法
  • jquery 表格插件
  • 期间费用如何分摊到成本中
  • 国税局发票查询平台发票查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设