位置: 编程技术 - 正文

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
  • 土地增值税怎么计算
  • 应交税金怎么算出来的
  • 孳息和利息的区别
  • 同一控制下的长期股权投资入账成本
  • 固定资产可以不设置残值吗
  • 营业外支出怎么结转本年利润
  • 个人所得税app是什么意思
  • 道路货物运输服务可以加计扣除吗
  • 预算分配比例与国库不一样
  • 借款利息支出全部可以税前扣除吗
  • 委托加工物资两种情况例题
  • 上年度亏损用什么弥补
  • 转账支票的用途怎么写
  • 公司水费怎么做账
  • 当月发票已认证还能作废吗
  • 公司发的奖金可以直接公司账户转账给员工吗?
  • 实物返利缴纳所得税吗?
  • 应征增值税不含税销售额(3%征收率)怎么算
  • 安装设备用的材料计入什么科目
  • 公司利润如何提高
  • 企业取得固定资产的方式有哪些
  • 未摊销金额怎么算
  • 货币性项目和非货币性项目的区别是什么?如何进行处理?
  • php字符串函数有哪些
  • 代开的增值税怎么计提?
  • 股东未实缴资本,因为经营困难借给公司钱,可以要求返还
  • 固定资产未提完折旧停止经营怎么处理
  • php和py
  • win11预览版dev改beta
  • 费用报销费用填写要求
  • 补缴企业所得税和滞纳金如何入账
  • 零售企业进货退税政策
  • 什么是重大会计事务所
  • Spring Security(七)-- AuthenticationProvider
  • 怎样退出快手粉丝团 已解决
  • python中的查找函数
  • 企业所得税征前减免是什么意思
  • mongodb 查询条件
  • dpkg-configure-a
  • php中命名空间的路径
  • 用于职工福利的进项税账务处理
  • python中如何合并csv
  • js中同步如何理解
  • 无形资产摊销是按原值吗
  • python怎么用
  • 年终奖每个月发
  • 纳税人应按照当期可抵扣进项税额的10%
  • sqlserver 删除数据
  • 企业所得税税前扣除管理办法2018
  • 对公账户有法律效力吗
  • 以前年度未结转
  • 子公司向母公司交利润 需要纳税吗
  • 用于不动产的进项税额
  • 销售免税农产品的会计分录
  • 上年度固定资产费用化了,财报怎么算
  • 其他债权投资期末公允价值的变动应当计入
  • 增值税政策依据
  • 公司股权变更所需资金
  • 工程款打入个人账户扣税吗
  • 建账需要准备什么东西
  • sqlserver表死锁
  • win2000安全模式怎么进
  • XP系统如何设置变流畅
  • mac如何连接iphone
  • mac无线打印
  • rsync -i
  • win8显示wifi关怎么办
  • cocos creator源码
  • Node.js中的construct
  • unix中创建新文件
  • node.js适用哪些场景
  • js函数的使用规则
  • Android Fragment 体系 源码追踪笔记(4)
  • 浅析Python中MySQLdb的事务处理功能
  • python连接mysql实例分享
  • Python的collections模块中的OrderedDict有序字典
  • 集资房税收问题
  • 内蒙古国税局官网
  • 省国税局领导由谁任命
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设