SetupAPI匹配win10-64位(部分)
本帖最后由 gz13802424 于 2019-1-10 22:21 编辑SetupAPI 里面包含了很多很实用的API调用,但是SetupAPI是 11/20/2009 书写的,到现在已经有10年时间了,已经没办法完全匹配到最新的Win10系统
我在日常使用时,把平时自己使用到的几个API调用重新修改了,使之能在Win7 32位(64位)、Win10 32位(64位)下正常使用
并且在这里还要多谢 “haijie1223” 大哥的指点
不多废话了,直接上干货
一、_CM_Get_Process_Heap( “haijie1223” 大哥的指点)
原定义
$iResult = DllCall("Kernel32.dll", "long", "GetProcessHeap")
修改为
$iResult = DllCall("Kernel32.dll", "handle", "GetProcessHeap")
二、_SetupDiEnumDeviceInfo(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
三、_SetupDiOpenDeviceInfo(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
四、 _SetupDiCreateDeviceInfo(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
五、_SetupDiGetDeviceInterfaceDetail(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
六、_SetupDiOpenDeviceInterface(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
七、_SetupDiRegisterDeviceInfo(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
八、_SetupDiCreateDeviceInterface(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
九、_SetupDiEnumDeviceInterfaces(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
十、_SetupDiGetClassImageList(自己折腾出来的,一直没直接验证是正确但是也没有异常,这一条的修改我自己标注为 “存疑”)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 12)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",DllStructGetSize($tSP_DEVINFO_DATA))
---------------------------------------------------分----割----线---------------------------------------------------
P版曾经发了一个AU3书写服务形态的例程,但是没有匹配到64位编译模式,我自己也折腾了一下
原定义
$pServiceTable = _ServiceHeapAlloc(32)
$tServiceTable = DllStructCreate($tagSERVICE_TABLE_ENTRY, $pServiceTable)
DllStructSetData($tServiceTable, "ServiceName", $pServiceTable + 16)
DllStructSetData($tServiceTable, "ServiceMain", $pServiceMain)
$tServiceName = DllStructCreate("char ServiceName[16]", $pServiceTable + 16)
DllStructSetData($tServiceName, "ServiceName", "AutoIt3Service")
$tServiceStatus = DllStructCreate($tagSERVICE_STATUS)
$pServiceStatus = DllStructGetPtr($tServiceStatus)
DllStructSetData($tServiceStatus, "ServiceType", 16)
DllStructSetData($tServiceStatus, "ControlsAccepted", 3)
修改为
$pServiceTable = _ServiceHeapAlloc(32 * (@AutoItX64 + 1))
$tServiceTable = DllStructCreate($tagSERVICE_TABLE_ENTRY, $pServiceTable)
DllStructSetData($tServiceTable, "ServiceName", $pServiceTable + 16 * (@AutoItX64 + 1))
DllStructSetData($tServiceTable, "ServiceMain", $pServiceMain)
$tServiceName = DllStructCreate("char ServiceName[" & 16 * (@AutoItX64 + 1) & "]", $pServiceTable + 16 * (@AutoItX64 + 1))
DllStructSetData($tServiceName, "ServiceName", $sServiceName)
$tServiceStatus = DllStructCreate($tagSERVICE_STATUS)
$pServiceStatus = DllStructGetPtr($tServiceStatus)
DllStructSetData($tServiceStatus, "ServiceType", 16 * (@AutoItX64 + 1))
DllStructSetData($tServiceStatus, "ControlsAccepted", 3)
谁是流氓发 SetupAPI 接近7000行的代码,我因兴趣而半路出家学习编程,英文底子弱,实在是没办法去从头到尾梳理一次,所以在这里只是贴出部分代码,希望能抛砖引玉,要是能引来某位大神把SetupAPI重新梳理一下那才是真正造福大众 haijie1223 发表于 2019-1-10 15:30
谁是流氓发
刚入坑,对各位大神还不太了解,在这里引用了他在QQ的昵称“流氓发”
他QQ的头像和你在论坛上的头是一样,你自己自我介绍一下
高手啊,大神,应该有人更新一下了。 gz13802424 发表于 2019-1-10 15:41
刚入坑,对各位大神还不太了解,在这里引用了他在QQ的昵称“流氓发”
他QQ的头像和你在论坛上的头是一样 ...
不认识。。。 最近咋了都在玩这个。。。 yglgogogo 发表于 2019-1-14 22:31
最近咋了都在玩这个。。。
看到你发的贴子了,先多谢
有空看看我这个http://www.autoitx.com/thread-71064-1-1.html,帮忙把下面的调用语法写一下(关键是入数参数结构和返回参数结构)
"ApplyChanges hresult(dword);" & _
"GetWallpaper hresult(wstr;uint;dword);" & _
"SetWallpaper hresult(wstr;dword);" & _
"GetWallpaperOptions hresult(struct*;dword);" & _
"SetWallpaperOptions hresult(struct*;dword);" & _
"GetPattern hresult(wstr;uint;dword);" & _
"SetPattern hresult(wstr;dword);" & _
"GetDesktopItemOptions hresult(struct*;dword);" & _
"SetDesktopItemOptions hresult(struct*;dword);" & _
"AddDesktopItem hresult(struct*;dword);" & _
"AddDesktopItemWithUI hresult(hwnd;struct*;dword);" & _
"ModifyDesktopItem hresult(struct*;dword);" & _
"RemoveDesktopItem hresult(struct*;dword);" & _
"GetDesktopItemCount hresult(int*;dword);" & _
"GetDesktopItem hresult(int;struct*;dword);" & _
"GetDesktopItemByID hresult(ulong_ptr;struct*;dword);" & _
"GenerateDesktopItemHtml hresult(wstr;struct*;dword);" & _
"AddUrl hresult(hwnd;wstr;struct*;dword);" & _
"GetDesktopItemBySource hresult(wstr;struct*;dword);"
页:
[1]