TC官方合作论坛

 找回密码
 立即注册
查看: 694|回复: 27

[学习心得] [TC7.0|8.0]♦TC_WINAPI大全+其他各种库+自绘控件

  [复制链接]
发表于 2021-11-7 17:11:01 | 显示全部楼层 |阅读模式
本帖最后由 bestkakkoii 于 2021-12-6 08:01 编辑

持续更新

其他文章:
http://52tc.info/home.php?mod=space&uid=231477&do=thread&view=me&from=space&type=thread

项目内包含lua函数只有8.0能用,註释掉lua部分的话7.0也可以用
WINAPI库中除了WINAPI还包含一大堆其它函数封装的库和windows自带COM的库 因为太多太杂所以就不拆分了


2021/12/05 新增winapi函数/结构体/常量/列表框控件宏
2021/12/02 新增钩子相关winapi函数/结构体/常量
2021/11/28 修正GetProcAddress 必须使用char *误打成指针传入
2021/11/25 新增几个结构体、常量,修正结构体部分参数错误
2021/11/24 新增几个winapi
2021/11/22 新增几个FTP winapi、修正几个参数类型错误
2021/11/21 新增几个winapi
2021/11/20 新增几个winapi结构体、常量
2021/11/18 新增一个变量库(全局变量、只读变量、加密变量),将几个控件宏改为可用控件名也可以直接用控件句柄操作、新增几个winapi
2021/11/15 加了几个宏,修正一个读utf8函数的错误、新增一个写utf-8 with BOM 和 utf-8 no BOM的函数、新增两个枚举ini节名/键名函数/刪除节名或键名函数
2021/11/13 修正几个函数类型跟调用方式的正确性
2021/11/11 补上一堆winapi函数、结构体、常量
2021/11/10 补上一堆winapi函数 和其他宏和库
2021/11/09 完善几个宏
2021/11/08 又补上几个常量跟控件宏、转换宏


游客,如果您要查看本帖隐藏内容请回复





      



除了源碼以外還加上(包含简易功能注解):
win32api库[約2000行代码](之前所有项目用到的api都塞进去了)
user32.dll
kernel32.dll
gdi32.dll
gdiplus.dll
ntdll.dll
msvbvm60.dll
Wininet.dll
shell32.dll
msimg32.dll
oleaut32.dll
oleacc.dll
uxtheme.dll
Ole32.dll
shlwapi.dll
winmm.dll
Advapi32.dll
Ws2_32.dll
//这几个是window自带的COM
ScriptControl(COM)
Scripting.FileSystemObject(COM)
ADODB.Stream(COM)
Microsoft.XMLHTTP(COM)
MSScriptControl.ScriptControl(COM)

win32结构体库[2x种](也是所有有用到的都塞了)
_PAINTSTRUCT
_CHARFORMAT2W
_LOGFONTW
_REC
_gettextex
_gettextlengthex
_charrange
_FILETIME
_MSG
_POINT
_SECURITY_ATTRIBUTES
_TVINSERTSTRUCTW
_LARGE_INTEGER
_OVERLAPPED
_NOTIFYICONDATW
_WNDCLAS**W
_MODULEENTRY32W
_STRUCT_TOKEN_PRIVILEGE
_STARTUPINFOW
_PROCESS_INFORMATION
_HOSTENT
_WSADATA_SOCKADDR_IN
_IN_ADDR
_CHOOSECOLOR
_CHOOSEFONT
_RGB_COLORREF
_REASON_CONTEXT

win32常量库[約2000个](TC文档提供的+自己有用到的常量+順便搜刮的)

窗口可自由调整大小控件自适应大小

1.调适窗口主要是自绘的 ListBox + 与TC相同的右键菜单
//ListBox 可支援每一行不同颜色

2.编辑框使用的也是自绘的 RICHEDIT(富编辑框) + 画上去的行数显示
//富编辑框支持包括图片黏贴语法高亮甚至不同字体等等...但太麻烦了没写((头痛

3.另外放了一个没啥用的下拉框模仿聊天对话 按下回车能把文本输出到调适窗口并记录(预设是纪录30行 之后每增加一行就删除末尾一行) 还有输入提示文

4.还有一个注释掉的托盘气泡自绘

//另外以上四个控件都是写了回调、其实可以直接塞在消息路由

按下 F5 可以运行编辑框内的 lua 脚本




//附带一个数组传参式的dllcall封装 最多15个参数 以下是调用方法

//測試用
function TEST(hWnd)
    var dllarr = array()
    dllarr["扩展风格"] = array("DWORD", #0)
    dllarr["类名"] = array("wchar *", "ListBox")
    dllarr["文本"] = array("wchar *", "")
    dllarr["风格"] = array("DWORD", WS_CHILD + WS_VISIBLE + WS_VSCROLL + LBS_HASSTRINGS)
    dllarr["x座标"] = array("int", 5)
    dllarr["y座标"] = array("int", m_size["y"] - 205)
    dllarr["宽"] = array("int", m_size["x"] - 19)
    dllarr["高"] = array("int", 171)
    dllarr["父窗口句柄"] = array("long", hWnd)
    dllarr["菜单句柄"] = array("long", null)
    dllarr["实例模块指针"] = array("long", GetModuleHandleW())
    dllarr["CREATESTRUCT结构指针"] = array("long", null)
    var ret = DllCall("user32.dll", "HWND", "CreateWindowExW", dllarr)
    return ret
end

//下面是正常调用法 区别在于一个是万能封装一个是独立封装

function TEST(hWnd)
    var dwExStyle = #0//扩展风格
    var lpClassName = "ListBox"//类名
    var lpWindowName = ""//文本或标题
    //子窗口 + 可见 + 垂直滚动条 + 指定列錶框包含由字符串组成的项目
    var wStyle = WS_CHILD + WS_VISIBLE + WS_VSCROLL + LBS_HASSTRINGS//窗口风格
    var X = 5//x座标
    var Y = m_size["y"] - 205//y座标
    var nWidth = m_size["x"] - 19//宽
    var nHeight = 171//高
    var hWndParent = hWnd // 父窗口句柄
    var hMenu = null//菜单
    var hInstance = GetModuleHandleW()//实例模块指针
    var lpParam = null//CREATESTRUCT结构指针
    //创建并返回句柄
    var lhwnd = CreateWindowExW(dwExStyle, lpClassName, lpWindowName, wStyle, X, Y, nWidth, nHeight, hWndParent, null, hInstance, null)
    return ret
end


















须配合附件中的 位运算库、win32函数库、win32常量库使用
TC8.0自带位运算不过没有包含 位元移位运算子(<<, >>)
转换宏 说明
MAKEPOINT macro将lParam转换成POINT结构体包含x, y座标
MAKEWORD macro将两个byte型合并成一个word型,一个在高8位(b),一个在低8位(a)
MAKELONG macro将高低位合并转为LONG
LOWORD macro指定的 32 位值檢索低位字
HIWORD macro指定的 32 位值中檢索高位字
LOBYTE macro指定的 16 位值中檢索低位字
HIBYTE macro從指定的 16 位值中檢索高位字
IS_INTRESOURCE macro确定值是否是资源的整数标识符
MAKEINTRESOURCEW macro将整数值转换为与资源管理功能兼容的资源类型
MAKEWPARAM macro将两个word型合并成一个dword型(wParam )。一个在高16位,一个在低16位
MAKELPARAM macro将两个word型合并成一个dword型(lParam )。一个在高16位,一个在低16位
MAKELRESULT macro创建一个值以用作窗口过程的返回值
MAKELANGID macro从主语言标识符和子语言标识符创建语言标识符(lcid)
PRIMARYLANGID macro从语言标识符(lcid)中提取主要语言标识符。
SUBLANGID macro从语言标识符(lcid)中提取子语言标识符。
MAKELCID macro根据语言标识符、排序顺序标识符 和 排序版本构造 区域设置标识符(LCID)
MAKESORTLCID macro根据语言标识符、排序顺序标识符 和 排序版本构造 区域设置标识符(LCID)
LANGIDFROMLCID macro从区域设置标识符中检索 语言标识符
SORTIDFROMLCID macro从区域设置标识符中检索 排序顺序标识符。
SORTVERSIONFROMLCID从区域设置标识符中检索排序版本

memset() 填充内存
new()
申请一个新的指定类型内存空间(byte short long double wchar char)
delete() 删除一个new出来的空间
memcopy() 由 "来源"(src) 指向地址为起始地址的连续 n 个字节的数据复制到以 "目标"(distin) 指向地址为起始地址的空间内
memcopy_byte() 同上,不过复制类型是byte
A2W() 多字节转宽字节字符串
W2A() 宽字节多字节字符串
EnablePrivilege() 根據指定令牌提升進程權限 如 "SeDebugPrivilege"
LONGLONG() 将转换long转换成longlong(TC8.0限定)




外加一个lua测试用的代码:

游客,如果您要查看本帖隐藏内容请回复








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表于 2021-11-7 19:11:29 | 显示全部楼层
哈哈哈哈哈
回复 支持 反对

使用道具 举报

发表于 2021-11-7 21:13:14 | 显示全部楼层
来看看,。 。。 。。   
回复 支持 反对

使用道具 举报

发表于 2021-11-7 22:56:33 | 显示全部楼层
1112211122
回复 支持 反对

使用道具 举报

发表于 2021-11-7 23:06:48 | 显示全部楼层
看看
回复

使用道具 举报

发表于 2021-11-8 18:07:41 | 显示全部楼层
555555555
回复

使用道具 举报

发表于 2021-11-9 15:38:47 | 显示全部楼层
WINAPI大全
回复 支持 反对

使用道具 举报

发表于 2021-11-10 09:05:47 | 显示全部楼层
位运算库瞅瞅
回复 支持 反对

使用道具 举报

发表于 2021-11-11 12:45:57 | 显示全部楼层
这是高手
回复

使用道具 举报

发表于 2021-11-11 16:39:24 | 显示全部楼层
感谢分享,学习下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2021-12-7 01:15 , Processed in 0.042735 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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