[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 在Powershell中如何调用AHK代码的函数

我在下面的贴子中介绍过一个在powershell中执行AHK代码的方法
http://www.bathome.net/thread-68249-1-1.html

但现在我想在powershell使用下面AHK函数CryptHexStringToBinary,
例如想把 48B80000000000000000FFD0C3 这段16进制字符串转为二进制数据, 不知道怎么用了, 请求路过大佬帮忙, 谢谢

在AHK中使用CryptHexStringToBinary函数的方法如下
  1. CryptHexStringToBinary(hexString, &binary){
  2.     DllCall("crypt32\CryptStringToBinaryW", "str", hexString, "uint", len := StrLen(hexString), "uint", 4, "ptr", 0, "uint*", &bytes := 0, "ptr", 0, "ptr", 0)
  3.     return DllCall("crypt32\CryptStringToBinaryW", "str", hexString, "uint", len, "uint", 4, "ptr", binary := binary ?? Buffer(bytes), "uint*", bytes, "ptr", 0, "ptr", 0)
  4. }
  5. CryptHexStringToBinary("48B80000000000000000FFD0C3", &hookBuf)
复制代码

花里胡哨的,直接用ps实现不就行了
  1. [regex]::Matches("48B80000000000000000FFD0C3",'..') |%{[byte]"0x$($_.value)"}
复制代码
1

评分人数

TOP

回复 2# Five66


    多谢大佬,
ahk调用系统api的代码有些时候比在powrshell中实现要简单许多, 更主要是有现成的轮子, 就不用转成powershell了,

感觉我的问题, 肯定有更好的解决方法

TOP

你贴的帖子不是实现调用AHK函数了吗?
不过的你写的CryptHexStringToBinary函数应该要返回binary开始,bytes长度的二进制。

TOP

ai 给的方法
  1. "48B80000000000000000FFD0C3".ToCharArray() | ForEach-Object { [Convert]::ToString( [Convert]::ToInt32($_, 16) , 2 ).padleft(4,'0') }
复制代码

TOP

回复 3# 小白龙


    额..,ahk调用系统api的代码,然后ps调ahk,这都两层调用了,为了使用轮子,都差不多得造个比轮子还复杂的出来,甚至还不如直接ps调api

非要ps调ahk,将ahk那个函数签名的里的&去掉,然后传个stringbulider过去(ahk那个dll支持的话),类似
$hookBuf=[text.stringbuilder]::new(512)
CryptHexStringToBinary("48B80000000000000000FFD0C3", $hookBuf)

或者修改原来的ahk函数,全程在ahk里进行(ahk那个dll支持的话),然后通过ps那个dll提供的getvar方法手动封送数据获取返回值

又或者封装原来的ahk函数(ahk那个dll支持的话)

TOP

返回列表