位置: 编程技术 - 正文

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

  • 固定资产的进项税额可以抵扣吗
  • 行政事业单位卖废品怎么处理
  • 实收资本印花税率是多少啊
  • 坐收坐支在会计上如何反映
  • 有形动产租赁简易征收适用哪些业务
  • 公司自建厂房需要缴纳哪些税
  • 开出支票如何入账
  • 滞纳金用留抵增值税交怎么处理
  • 税务年报多少钱
  • 公司社保公积金最晚缴费时间段
  • 合同预付款要不要开发票?
  • 转移性支出与转移性收入相对应主要包括
  • 网上报税申报成功之后该怎么操作
  • 出售使用过的固定资产如何开票
  • 机打发票怎么申请流程
  • linuxnl
  • 平均应收账款是什么
  • 用友财务软件怎样
  • rapapp.exe - rapapp是什么进程 有何作用
  • 员工食堂餐费可以税前扣除吗
  • 利息保障倍数 资本化利息支出
  • 无形资产处置收入计入
  • vue上传文件和后端upload
  • 夜间潜水时发现水体
  • 收到小微企业贷款减息会计处理办法
  • 将城镇生活垃圾直接用作肥料
  • 购入固定资产款项已付
  • reactvate
  • 自注意力机制是什么
  • 无形资产转让账务怎么做
  • sudo权限是什么意思
  • 发票金额和打款金额不一致怎么办
  • 图书为什么不能退货
  • 三栏式明细账需要每笔结余额吗
  • 小微企业所得税税率2.5% 10% 25%
  • 帝国cms怎么增加子栏目
  • java方法的返回值类型有哪些
  • 公司少申报个税
  • 支付国外佣金的税率多少
  • 公司个人借款如何做账
  • 其他应收款增加现金流量表怎么填
  • 企业存续情况
  • 每月工资不一样怎么算误工费呢
  • 贸易公司成本如何计算
  • 明细与发票
  • 房地产营业税率是多少
  • 背书转让的电子汇票怎么查询
  • 应付职工薪酬完整会计处理
  • 收入 摊销
  • 我是小规模纳税人,客户都想获得13%的专票
  • 进料加工与来料加工
  • 未发货先开发票
  • 一个会计每个月平均有多少钱
  • 小企业的建账流程分为什么内容
  • 出租人融资租赁的判断标准
  • 使用SSIS创建同步数据库数据任务的方法
  • sqlserver key
  • Navicat for MySQL导出表结构脚本的简单方法
  • linuxsu命令作用
  • msng.exe是什么
  • 苹果mac外接显示器合上盖子怎么在显示器上继续
  • windows10图标显示不出来
  • win8出现蓝屏怎么修复
  • Windows8和Windows Phone8中IE10两者相同点和区别
  • win10系统没有关机选项
  • win7注册表文件位置
  • react-redux用法
  • jquery教程
  • linux c程序开发
  • unity 更新
  • Mongoose中document与object的区别示例详解
  • videoleap怎么加音频
  • ug合并命令在哪
  • unity类库
  • python生成随机数表
  • python怎么写字符串
  • jQuery ajax中使用confirm,确认是否删除的简单实例
  • 税务局县区级及以下
  • 贵州电子税务局怎么登录
  • 玉石手镯零售环保要求
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设