位置: 编程技术 - 正文

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

  • 企业增值税会计科目
  • 实验耗材计入什么科目
  • 库存股增加为什么资产减少
  • 分支机构注销后往来账如何处理
  • 企业销售折扣折让会计分录
  • 公司给员工报销话费怎么做账
  • 苗木属于农产品中哪一类
  • 2021年金税盘
  • 中小企业免税证明
  • 企业所得税逾期了一定要去税局前台申报吗
  • 春节商家促销文案
  • 生产加工型企业经营范围
  • 固定资产期初余额在哪里录入
  • 暂估入库的材料领用时如何做账
  • 未到期责任准备计入什么科目
  • 税金及附加里面有印花税吗
  • 公司车辆高速费用能开增值税专用发票吗
  • 销售型公司进销项时会计分怎么写?
  • 电子税务局报表打印在哪里
  • 财务报表季度申报资产负债表怎么填
  • 租赁收入账务处理
  • 资本公积转增实收资本所有者权益会变吗
  • 工程施工属于什么会计科目
  • 自己开电子发票要什么软件
  • 来料加工的账务处理
  • 销售外购设备并提供安装服务
  • 一般纳税人税金怎么算
  • 拍卖费怎么收
  • 股东未实缴资本,因为经营困难借给公司钱,可以要求返还
  • 税务发票上的账户是对公账户吗
  • 分期开发的房地产项目清算方式
  • 存货核算的会计分录怎么写
  • 民办非企业单位登记管理暂行条例
  • 账本登错的账务如何处理
  • critical_section 结构
  • vue 路由
  • vmware workstation pro怎么卸载干净
  • 季度企业所得税会计分录怎么做
  • 个人提供翻译服务
  • 固定资产报废清理怎么做账务处理的
  • 商业承兑汇票退回给上手公司怎么操作
  • 织梦一直显示上一页和下一页
  • 建筑业成本核算流程
  • 水利基金差额征收有哪些类型
  • 承租人转租房屋的后果
  • 企业停产期间在生产违法吗
  • 低值易耗品属于流动资产吗
  • 进账单,其中有两个账户
  • 一般纳税人在外地预缴税款,预缴多了需不需退税
  • 工业企业接受捐赠收入计入
  • Windows平台下被支持最好的音频格式
  • Win7 64位旗舰版系统打开应用程序提示“发生未知的软件异常0xc06d007e”的解决方法
  • Win10系统怎么删除管理员权限
  • linux常用帮助命令
  • freebsd操作命令
  • solaris 安装
  • win7系统控制面板在哪里打开
  • win10默认edge浏览器
  • macbookzen
  • 开机后cpu占用高
  • win10电脑清理磁盘
  • centos运行程序
  • ipcservice.dll是什么?
  • win7 svchost
  • win8系统自带浏览器
  • Android开发简单购物界面
  • unity3ds
  • [置顶]游戏名 TentacleLocker
  • bat 参数个数
  • jQuery实现ToolTip元素定位显示功能示例
  • javascript 编译原理
  • Unity3D Vuforia Android 拨打电话
  • 江苏国税电子税局
  • 杭州二套房契税新政策2023年
  • 广州市国家税务局第三分局
  • 亦庄地税局税务局营业大厅
  • 出口免税不退税主要适用于
  • 广西国家税务局于红林
  • 进口小麦关税税率是多少
  • 小规模企业降税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设