设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

请问如何获取Windows用户的用户名

查看数: 4643 | 评论数: 14 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-12-10 09:11

正文摘要:

记得之前在一个RM2003制作的游戏之中,有一个名叫《One Shot》的游戏,那个游戏是一个含有meta元素的游戏,游戏中的主人公会叫出电脑前的玩家的名字,也就是玩家电脑的用户名。 我觉得既然RM2003都可以实现,那么RMV ...

回复

chd114 发表于 2017-12-11 13:25:25
雨落忧伤 发表于 2017-12-10 18:18
多谢提醒,已经尝试了。
确实不会报错了,但是有了一个新的问题,那就是显示出来的是一些无法识别的字符 ...

缺失的是中文吗?
喵呜喵5 发表于 2017-12-11 09:43:35
本帖最后由 喵呜喵5 于 2017-12-11 09:45 编辑

插入脚本:
  1. class Game_Interpreter
  2.   def m5_20171211_username(v=nil)
  3.     str = ENV['UserName'].dup
  4.     m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  5.     w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  6.     i = m2w.call(0, 0, str, -1, nil, 0)
  7.     buffer = "\0" * (i*2)
  8.     m2w.call(0, 0, str, -1, buffer, buffer.size / 2)
  9.     i = w2m.call(65001, 0, buffer, -1, nil, 0, nil, nil)
  10.     result = "\0" * i
  11.     w2m.call(65001, 0, buffer, -1, result, result.size, nil, nil)
  12.     result.chop!
  13.     $game_variables[v] = result if v
  14.     return result
  15.   end
  16. end
复制代码


事件的脚本指令中输入:
  1. m5_20171211_username(2)
复制代码

则 2 号变量的值就是当前的用户名,之后在对话中输入 \v[2] 即可显示对应文本

点评

多谢,完美解决!  发表于 2017-12-11 10:11

评分

参与人数 1星屑 +80 收起 理由
fux2 + 80 认可答案

查看全部评分

fux2 发表于 2017-12-10 23:06:25
雨落忧伤 发表于 2017-12-10 19:38
嗯,的确是可以……但是问题和刚才那位的是一样的……
就是最后无法显示……不过这个也许是无法解决的吧 ...

在你的脚本最上面插入一页新页,粘贴以下内容,
然后变量设置的地方改成
ENV['UserName'].s2u


  1. class String

  2.   @@MultiByteToWideChar  = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  3.   @@WideCharToMultiByte  = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

  4.   def u2w
  5.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  6.     buffer = "\0" * (i*2)
  7.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  8.     buffer.chop!
  9.     return buffer
  10.   end  

  11.   def u2s
  12.     i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
  13.     buffer = "\0" * (i*2)
  14.     @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
  15.     i = @@WideCharToMultiByte.call(0, 0, buffer, -1, nil, 0, nil, nil)
  16.     result = "\0" * i
  17.     @@WideCharToMultiByte.call(0, 0, buffer, -1, result, i, nil, nil)
  18.     result.chop!
  19.     return result
  20.   end

  21.   def s2u
  22.     i = @@MultiByteToWideChar.call(0, 0, self, -1, nil, 0)
  23.     buffer = "\0" * (i*2)
  24.     @@MultiByteToWideChar.call(0, 0, self, -1, buffer, buffer.size / 2)
  25.     i = @@WideCharToMultiByte.call(65001, 0, buffer, -1, nil, 0, nil, nil)
  26.     result = "\0" * i
  27.     @@WideCharToMultiByte.call(65001, 0, buffer, -1, result, result.size, nil, nil)
  28.     result.chop!
  29.     return result
  30.   end
  31. end
复制代码
fux2 发表于 2017-12-10 19:16:55
雨落忧伤 发表于 2017-12-10 18:18
多谢提醒,已经尝试了。
确实不会报错了,但是有了一个新的问题,那就是显示出来的是一些无法识别的字符 ...

有了楼上的这段不需要之前的代码了。


雨落忧伤 发表于 2017-12-10 18:18:25
hyrious 发表于 2017-12-10 18:08
任何可以插脚本的地方
比如你要把它放进变量的话
脚本: $game_variables[1] = ENV['UserName']

多谢提醒,已经尝试了。
确实不会报错了,但是有了一个新的问题,那就是显示出来的是一些无法识别的字符(类似于????)
不过这也许是advapi32自己的问题了(就是字库缺失相应文字),不知道能不能解决……
不能解决就先这样了,总之非常感谢。
hyrious 发表于 2017-12-10 18:08:38
雨落忧伤 发表于 2017-12-10 17:53
这段要放在什么地方使用?

任何可以插脚本的地方
比如你要把它放进变量的话
脚本: $game_variables[1] = ENV['UserName']
显示文章: "\V[1], 我说的就是你"
雨落忧伤 发表于 2017-12-10 17:53:54

这段要放在什么地方使用?
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 04:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表