位置: 编程技术 - 正文

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

  • 经营性应付项目的增加怎么计算
  • 金税四期可以查个人账户吗
  • 个人注册公司有什么优惠政策
  • 电梯维保费属于建筑服务吗
  • 垃圾袋发票类别是什么
  • 个人专项扣除需要扣税吗
  • 递延所得税转回的会计分录
  • 税务登记财务负责人可以是法人吗
  • 自产产品用于职工福利确认收入吗
  • 应付职工薪酬如何具体到个人
  • 期间费用如何设置项目核算
  • 出差回来报销差旅费,补付现金的会计分录
  • 现金余额大违反了什么规定
  • 增值税专用发票电子版
  • 房地产企业代收的取暖费如何纳税
  • 电梯维修增值税
  • 印花税申报表如何填写
  • 不能抵扣的进项税怎么做账
  • 10万元以下免征教育费附加
  • 装饰工程收入属于劳务收入吗
  • 研发费用没做账怎么调账
  • 公司房产税如何计算器
  • 增值税发票确认时间
  • 公司邀请外国人来华邀请函模板
  • 公司车辆报废收入怎么入账
  • 企业间贴现手续费怎么记账?
  • 优先股的发行主体
  • 未开票收入申报后又要开票
  • 被收购企业会提出什么条件
  • PHP:spl_autoload_functions()的用法_spl函数
  • 股票涨幅公式怎么写
  • 购买房屋用于出租算投资房吗
  • 个人所得税的征收模式为()A分类征收B综合征收C
  • windows安装配置
  • 资产收购的账务处理办法
  • 企业股权投资收益缴纳什么税
  • 增值税纳税申报表在哪里打印
  • 出口免抵退税的会计分录
  • 出口生产型企业
  • rhel6安装教程
  • 服装加工税率是13%还是16%
  • 纳税减免申报
  • 主营业务收入和营业外收入均属于收入
  • 解决问题
  • 一般纳税人购入不动产增值税税率
  • 合并财务报表为什么要抵消子公司所有者权益
  • 预付款什么时候开发票
  • 出租房屋会计账务处理
  • 公司基本户的钱怎么用
  • 公司社保收费标准
  • 公司的日常费用支出能税前全部扣除吗?
  • 注册资本实缴制改为认缴制
  • 小规模纳税人残保金减免政策
  • 建筑材料检测费入账科目
  • 长期待摊费用可以摊销20年吗
  • 进口料件内销的关税和增值税怎么计算
  • 我没付款,但是显示成功?
  • 办理分公司的流程样本
  • 递延所得税与递延所得税费用
  • mysql5.6免安装版配置
  • Winserver2012下mysql 5.7解压版(zip)配置安装教程详解
  • linux系统关机重启命令
  • 品牌笔记本电脑排行
  • 用u盘怎么装系统win10
  • explorer.exe进程100%
  • win7显示
  • 苹果手机价格
  • imgconv.exe进程
  • kvm支持的系统
  • win7取消禁用无线网络
  • excel的基本数据类型
  • 拥有一个属于自己的空间高中作文
  • 查cpu内存命令
  • javascript模拟器
  • 安卓开发常用代码
  • swift method swizzling
  • 电子签章在电脑上怎样加印章
  • 企业所得税
  • 深圳市百旺信投资有限责任公司
  • 企业所得税年报职工薪酬纳税调整明细表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设