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

Project1

 找回密码
 注册会员
搜索
查看: 2059|回复: 8
打印 上一主题 下一主题

[已经解决] 关于如何用ruby写C语言结构体问题

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
跳转到指定楼层
1
发表于 2011-11-4 14:26:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv4.逐梦者

梦石
0
星屑
6860
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

2
发表于 2011-11-4 15:10:40 | 只看该作者
本帖最后由 后知后觉 于 2011-11-4 15:14 编辑

这是某个分辨率脚本.里面貌似有这样的东西

if $myfirst == nil
  
   $myfirst = 'myGod'  
   宽度=800
   高度=600
   游戏ini名=".\\Game.ini"
   val = "\0"*256
   gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
   gps.call("Game", "Title", "", val, 256, 游戏ini名)
   val.delete!("\0")
   title = val
   fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
   hWnd = fw.call("RGSS Player", title)
   swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')


   pointwds = [0,0,0,0].pack('llll')
   pointcet = [0, 0].pack('ll')


   wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')
   client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')

   wdsrect.call(hWnd,pointwds)
   client_screen.call(hWnd, pointcet)


   wds = pointwds.unpack('llll')
   cet = pointcet.unpack('ll')


   addw =  wds[2] - wds[0] - 640
   addh =  wds[3] - wds[1] - 480

   x = wds[0] - (宽度 - 640) / 2
   y = wds[1] - (高度 - 480) / 2

   swp.call(hWnd, 0, x, y, 宽度 + addw, 高度 + addh, 0x20)
   
end











你知道得太多了

回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
3
 楼主| 发表于 2011-11-4 15:26:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

4
发表于 2011-11-4 15:33:43 | 只看该作者
  1. GetVersionEx = Win32API.new('kernel32','GetVersionEx','P','I')
  2. buf = [148,0,0,0,0,"\0"*128].pack("LLLLLa128")
  3. GetVersionEx.call(buf)
  4. arr = buf[0,20].unpack("LLLLL")
  5. p "version : #{arr[1]}.#{arr[2]}"
复制代码
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
5
 楼主| 发表于 2011-11-4 15:39:04 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6860
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

6
发表于 2011-11-4 16:01:52 | 只看该作者
本帖最后由 后知后觉 于 2011-11-4 16:05 编辑

你运行这个看看.
  1. a = [0].pack("l")
  2. p a,a.size
  3. exit
复制代码
星辰前辈的那个20取的就是数组前面5个 pack L 后的字符串长度吧.

另外再说一下你回复了别人的帖子想要别人能及时来看的话.
就点帖子的【回复】按钮.
这样发出的帖子系统会发送系统信息给你【回复】的人的.











你知道得太多了

回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
7
 楼主| 发表于 2011-11-4 16:15:36 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
113 小时
注册时间
2011-10-6
帖子
45
8
发表于 2011-11-4 16:20:25 | 只看该作者
  1. typedef struct _OSVERSIONINFO {  
  2. DWORD dwOSVersionInfoSize;  
  3. DWORD dwMajorVersion;  
  4. DWORD dwMinorVersion;  
  5. DWORD dwBuildNumber;  
  6. DWORD dwPlatformId;  
  7. TCHAR szCSDVersion[128];
  8. } OSVERSIONINFO;
复制代码
这个结构体是win2000以前的吧,现在应该用
  1. typedef struct {
  2. DWORD dwOSVersionInfoSize;      
  3. DWORD dwMajorVersion;        
  4. DWORD dwMinorVersion;           
  5. DWORD dwBuildNumber;         
  6. DWORD dwPlatformId;                  
  7. TCHAR szCSDVersion[128];         
  8. WORD wServicePackMajor;            
  9. WORD wServicePackMinor;            
  10. WORD wSuiteMask;                     
  11. BYTE wProductType;                    
  12. BYTE wReserved;                        
  13. } OSVERSIONINFOEX, *POSVERSIONINFOEX;
复制代码
这个吧
回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
9
 楼主| 发表于 2011-11-4 17:19:04 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-27 22:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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