赞 86
VIP 0
好人卡 1
积分 136
经验 14048
最后登录 2021-1-24
在线时间 2753 小时
Lv4.逐梦者
梦石 0
星屑 13562
在线时间 2753 小时
注册时间 2014-10-4
帖子 756
本帖最后由 SixRC 于 2020-2-16 20:01 编辑
首先 CreateWindow 并非这个api的真名 大多数api都分 A(ansi) 和 W(unicode) 两个版本
用哪个版本要基于你传入参数是什么编码的 纯英文就用A 因为 RM 好像是 utf-8 和 ansi 在英文区域不冲突的
然后这个api有点特殊。。
"CreateWindow is implemented as a call to the CreateWindowEx function, as shown below."
#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExA( 0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExW( 0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#ifdef UNICODE
#define CreateWindow CreateWindowW
#else
#define CreateWindow CreateWindowA
#endif
#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExA( 0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExW( 0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#ifdef UNICODE
#define CreateWindow CreateWindowW
#else
#define CreateWindow CreateWindowA
#endif
所以其实你需要调用的是 CreateWindowExA
其实Win32API 能否取到api只和api名字是否正确有关 后面的和传参相关 不对程序可能崩掉
然后看参数
CreateWindowExA
RM是32位的 32位传参 int 就是 long DWORD 是 unsigned long 用 L 吧(其实 l 也没事的)
句柄 HANDLE 是 void* 其实也是 l
l的意义是原值传入 p的意义是把ruby字符串的地址传入
也可以都写 l 字符串传入 [str].pack("p").unpack("l")[0] 就行
所以我们有 依次 LppLllllllll
c=Win32API.new ( "user32" ,"CreateWindowExA" ,"LppLllllllll" ,"l" )
p c.call ( 0 ,"Button" ,"hi" ,0x10000000 | 0x00040000,400 ,400 ,250 ,150 ,0 ,0 ,0x400000,0 )
c=Win32API.new ( "user32" ,"CreateWindowExA" ,"LppLllllllll" ,"l" )
p c.call ( 0 ,"Button" ,"hi" ,0x10000000 | 0x00040000,400 ,400 ,250 ,150 ,0 ,0 ,0x400000,0 )
假如有些参数需要指向结构体 你需要利用ruby字符串来建构它 会稍微麻烦一点
大概就是这样
评分
查看全部评分