位置: 编程技术 - 正文

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

  • 应交增值税一般纳税人的账怎么做
  • 城市公交算国企吗
  • 税务师考试要求核酸检测
  • 销项税额计算公式依据
  • 火车票丢失怎么补办
  • 如何判断固定资产资本化还是费用化
  • 新办商贸企业是国企吗
  • 发票开票人是管理员可以吗
  • 经营租赁违约金可以直接冲租赁费
  • 企业实际发生的公益性捐赠支出
  • 融资租赁的销项税额抵减
  • 付的押金能要回来吗
  • 股东变动及股东情况章节
  • 为什么企业要预缴增值税
  • 企业代开租金专票开什么项目好?
  • 为什么营收高利润低
  • 商品混凝土的增值税费率
  • 税控维护费的分录
  • 销售淀粉的税率
  • 中小企业代扣代缴增值税抵扣时限
  • 未达账项做完调节表后怎么处理?
  • 跨期做账如何处理当事人
  • 个人帮公司买东西怎么报销
  • 无线电路问题
  • 买入投资性房地产的会计处理
  • cpu性能天梯图2023年3月
  • Apache+php+mysql在windows下的安装与配置图解(最新版)
  • 其他业务收入对方科目
  • 企业所得税会计利润
  • php生成随机字符串源,且不会重复出现
  • 债权类股票有哪些
  • 预训练的目的
  • php实现上传文件
  • vue中解决跨域问题
  • lvm 创建
  • python变量赋值的正确方法
  • 生产部门使用的各种机器设备属于什么会计科目
  • vscode yaml插件
  • mysql写日志机制
  • python最小正整数
  • python缺省函数
  • 有形动产租赁属于现代服务业吗
  • 契税怎么征
  • 固定业户应当向其机构
  • sqlserver2008r2怎么使用
  • sql2008使用教程
  • 超详细的mac重装系统教程
  • 固定资产增加
  • 未开票收入是什么科目
  • mysql数据库压力测试工具
  • 原始凭证收集
  • 减免进项税的分录怎么做
  • 支付水电费会计
  • 建筑行业每月报税
  • 国有资产保值增值率
  • 汇算清缴补税的凭证后面需要附件吗
  • 原始凭证和记账凭证的区别
  • sqlserver数据库测试工具
  • sql server 快照
  • 群发网址
  • win8系统怎样
  • win8安装出现了一些问题
  • iphone制造成本
  • win xp 虚拟内存
  • linux常用命令修改
  • win10更新后安装包会自动删除吗
  • linux不能识别u盘
  • win8开始界面如何设置成win7
  • windows7文件操作步骤
  • windows开启快速启动
  • jquery和原生js性能
  • 详解js的异步编码
  • 解决js请求服务问题
  • 河南个人医保缴费查询
  • 广东省电子税务局登录方式
  • 云南省税务干部学校是干什么的
  • A级纳税人和一般纳税人区别
  • 统一社会信用代码证
  • 大理市国税局
  • 天津摇号申请查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设