位置: 编程技术 - 正文

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

  • 收到个税手续费退费会计分录
  • 缴纳代扣个人所得税分录
  • 公司车船使用税会计分录
  • 盈余公积是否必要交税
  • 一般纳税人科技公司发票是几个点
  • 新税法讲课费如何代缴个税
  • 转回存货跌价准备为什么是可抵扣暂时性差异
  • 非税收入票据能报销吗
  • 向投资者支付股利
  • 建筑业预缴税款都要填哪些表
  • 企业并购金额如何确定
  • 财务软件期初数据录入
  • 个人非货币性资产出资 个人所得税
  • 车间扫帚存放架子
  • 开票税额与申报税额差一分账务怎么处理
  • 农村合作社收到奖金分录
  • 公司给员工定任务合法吗
  • 高速公路过路费税率是多少
  • 涉税票据如何避免税务风险?
  • 每月的话费到下个月会扣吗
  • 房东不开发票违法吗
  • 如何给宽带加速使用
  • 怎么看腾讯游戏
  • linux sar文件
  • 路由器的默认网关在哪里看
  • PHP:Memcached::setOption()的用法_Memcached类
  • 默认网关不可用的解决办法
  • 购入未抵扣的固定成本
  • 售后租回交易形成融资租赁会计处理
  • Honeybee flying over crocuses in the Tatra Mountains, Poland (© Mirek Kijewski/Getty Images)
  • 残疾人在公司上班公司有什么好处
  • 资产提前报废需要什么资料
  • 车船税不计提怎么做分录
  • 往境外支付培训费怎么退
  • 建行E信通贴现需要发票吗
  • 保姆级教程什么意思
  • js防抖节流的区别和使用场景
  • logread命令
  • 结转销售成本的方法
  • 做工程没钱了可以贷款吗
  • 预付工程款如何结算
  • 在Python中如何求坐标中的任意两个点的距离
  • mysql表设计原则
  • 收到汽车会计分录
  • sqlserver2005安装步骤教程
  • 帝国cms插件编写教程
  • 专用发票金额与专票不符
  • 小规模房地产企业税收优惠政策
  • 基本生产成本核算的内容
  • 差旅费报销会计分录题目
  • ETC通行费发票抵扣2021新规定
  • 两种原因
  • 汇算清缴需要做账吗
  • 小规模纳税人转一般纳税人当月如何申报
  • 发票怎么跨月作废申请
  • 员工话费实报实销分录
  • 普票丢失可以以照片入账么
  • 一般纳税人混凝土税负率
  • 企业成立第二年有补贴吗
  • mysql8高可用
  • win7系统激活不成功怎么办
  • xp系统删除文件怎么删
  • 如何解决脑供血不足
  • win8.1的ie浏览器
  • rteng7.exe - rteng7是什么进程 有什么用
  • win10安装win7主题
  • linux端口流量监控
  • javascript运用
  • jquery九宫格抽奖
  • ghost参数设置
  • Bullet(cocos2dx)学习制作桌球游戏之前期准备
  • wordpress单页面店铺
  • 安卓系统滑动设置
  • 基于python的应用
  • Android 自定义view
  • wordpress基于什么语言
  • 纳税人虚假纳税申报
  • 总包发票税率
  • 广东税务局查验
  • 国家税务局总局河南官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设