赞 | 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字符串来建构它 会稍微麻烦一点
大概就是这样 |
评分
-
查看全部评分
|