位置: 编程技术 - 正文

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

  • 红字发票开错了已上传如何作废
  • 预包装食品是否备案怎么查询
  • 工程施工科目核算内容
  • 企业合并股份比例
  • 简易计税项目税金要计入成本吗
  • 福利企业的税收优惠政策
  • 合并财务报表内部交易对净利润影响
  • 停工损耗会计分录怎么写
  • 筹资活动现金流量净额为负
  • 一般纳税人收到专票怎么做分录
  • 办理企业所得税汇算清缴的期限是
  • 车辆购置税退税流程
  • 产品管理不足
  • 企业采购材料没有发票是要交企业所得税吗
  • 小规模的企业所得税税率
  • 酒店业小规模纳税人可以享受2023年应纳税额抵减政策吗
  • 代缴代扣增值税
  • 国地税联合财务报表小规模企业需要报送的吗?
  • 小微企业免税销售额怎么算
  • 航空公司按照一次性收费
  • 三类小规模纳税标准
  • 保险公司赔偿计入营业外收入
  • 福利费用属于什么费用
  • 水利工程建设费用组成
  • 居民企业非货币性资产投资、转让所得如何缴税?
  • 递延收益现金流量附表项目
  • 公司双方签订协议书范本
  • 土地作价入股土地如何过户
  • 记账凭证是出纳编制吗
  • 消费税什么时候用最高售价
  • 计提房租的原始凭证包括
  • 营改增建筑工程怎么计算举例
  • 免征税收入和不征税收入的区别
  • 启用或关闭windows功能怎么勾选
  • 交割单会出错吗
  • 出口转内销会计账务处理
  • 电脑主板bios设置
  • 磁盘使用量30m
  • 怎么确认旧城改造完成
  • php中如何获取数组的长度
  • 同城票据清算会怎么样
  • php配置文件的名字是
  • 出售固定资产净收益影响营业利润吗
  • 会计准则新规
  • 施工方可以向建设单位借款么
  • 一般纳税人的好处和坏处
  • filezilla使用手册
  • 水费发票掉了可以补打吗
  • 研发专利什么意思
  • Python的aiohttp模块如何使用?
  • 怎么盘存货
  • 小规模不动产租赁要交哪些税
  • 自产产品对外捐赠要确认收入吗
  • 营业账簿印花税申报流程
  • 个税申报错误已经扣税款怎么处理
  • 分公司交纳的管理费用
  • 对公转账个人垫付怎么写
  • 房地产结转收入的条件
  • 先付一部分款发票怎么做
  • 哪些发票可以提供发票
  • 合作社盈余返还总额是指哪些数据
  • 国税一证通
  • 会计报表的主要构成内容
  • linux系统对硬件要求高吗
  • win8开机启动项怎么关闭
  • 苹果电脑mac系统怎么升级
  • win8的应用商店
  • win10系统故障恢复
  • win10系统中断怎么解除
  • win7系统中怎样
  • linux时区问题
  • javaweb技术栈是什么
  • 按钮用于控制电路
  • shell截取字段
  • javascript scrollLeft,scrollWidth,clientWidth,offsetWidth 完全详解
  • python搭建网站并在服务器上部署
  • 出口汇率以什么为准
  • 营业收入是含增值税的收入吗
  • 扶贫绩效目标申请怎么写
  • 接受虚开增值税普票如何补救
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设