0

我已经在网站上搜索了一下,以确保我的问题没有得到回答。

我的问题是,我试图找到打开的PDF文件包含的总页数。

如果我知道文件路径,我就能找到总页数。这意味着,我的问题归结为,我不知道如何找到(活动的)PDF文件的打开窗口的文件路径。

我想用Autohotkey完成这一切,我的pdf阅读器是Foxit PhantomPDF。我过去曾为Adobe Acrobat做过这项工作,但我想Foxit Phantom没有那么受欢迎,所以我无法找到解决方案。

任何帮助都将不胜感激。

这是我目前掌握的代码代码描述:因此,如果我将文件放在特定位置,我可以通过按F1键找到总页码。(我需要的一半)

第一层:pdfPath:=“C:\20yorkcondofin.pdf”VarSetCapacity(GUID,16)DllCall(“ole32\CLSIDFromString”,“wstr”,IID_RandomAccessStream:=“{905A0FE1-BC53-11DF-8C49-001E4FC686DA}”,“ptr”,&GUID)DllCall(“ShCore\CreateRandomAccessStreamOnFile”,“wstr”,pdfPath,“uint”,Read:=0,“ptr”,&GUID,“ptr*”,IRandomAccessStream)CreateClass(“Windows.Data.Pdf.PdfDocument”,IPdfDocumentStatics:=“{433A0B5F-C007-4788-90F2-08143D922599}”,PdfDocumentStatic)DllCall(NumGet(NumGet(PdfDocumentStatics+0)+8*A_PtrSize),“ptr”,PdfDocumentStatics,“ptr”,IRandomAccessStream,“ptr*”,PdfDocument);从流异步加载等待异步(PdfDocument)DllCall(NumGet(NumGet(PdfDocument+0)+7*A_PtrSize),“ptr”,PdfDocument,“uint*”,PageCount);获取页面计数对象释放关闭(IRandomAccessStream)对象发布关闭(PdfDocumentStatics)对象发布关闭(PdfDocument)消息框%PageCount返回CreateClass(字符串,接口:=“”,ByRef Class:=“”){CreateHString(字符串,hString)if(接口=“”)结果:=DllCall(“Combase.dll\RoActivateInstance”,“ptr”,hString,“ptr*”,Class,“uint”)其他的{VarSetCapacity(GUID,16)DllCall(“ole32\CLSIDFromString”,“wstr”,接口,“ptr”,GUID)结果:=DllCall(“Combase.dll\RoGetActivationFactory”,“ptr”,hString,“ptr”,&GUID,“ptr*”,类,“uint”)}if(结果!=0){如果(结果=0x80004002)msgbox不支持此类接口else if(结果=0x80040154)消息框类未注册其他的消息框错误:%result%退出应用程序}删除字符串(hString)}CreateHString(字符串,ByRef hString){DllCall(“Combase.dll\WindowsCreateString”,“wstr”,字符串,“uint”,StrLen(字符串),“ptr*”,hString)}删除字符串(hString){DllCall(“Combase.dll\WindowsDeleteString”,“ptr”,hString)}WaitForAsync(ByRef对象){AsyncInfo:=ComObjQuery(对象,IAsyncInfo:=“{00000036-0000-0000-0000000000 46}”){DllCall(NumGet(NumGet(AsyncInfo+0)+7*A_PtrSize),“ptr”,AsyncInform,“uint*”,状态);IAsyncInfo。状态if(状态!=0){if(状态!=1){DllCall(NumGet(NumGet(AsyncInfo+0)+8*A_PtrSize),“ptr”,AsyncInform,“uint*”,错误代码);IAsyncInfo。错误代码消息框AsyncInfo状态错误:%ErrorCode%退出应用程序}对象发布(AsyncInfo)打破}睡眠10}DllCall(NumGet(NumGet(Object+0)+8*A_PtrSize),“ptr”,Object,“ptr*”,ObjectResult);获取结果对象释放关闭(对象)对象:=ObjectResult}ObjReleaseClose(ByRef对象){if对象{if(关闭:=ComObjQuery(对象,IClostable:=“{30D5A829-7FA4-4026-83BB-D75BAE4EA99E}”){DllCall(NumGet(NumGet(Close+0)+6*A_PtrSize),“ptr”,关闭);关闭目标发布(关闭)}对象发布(Object)}对象:=“”}返回
  • 我知道如果我在FoxIt中单击属性,我可以看到总页数 评论 2022年8月15日20:49
  • @KJ兄弟!好吧,我离解决方案越来越近了。这几乎奏效了:ControlGetText、xedit、Edit4、A msgbox、%xedit%,正如你所说,它显示了每个总页数的页码。问题是Edit4可能是Edit2或6,依此类推,那么我如何找到需要的正确编辑ClassNN?我可以看看值1-10,看看哪个有斜线吗?当ControlGetText已经获得了末尾带有A的活动窗口时,为什么要编写WinGetTItle,xtitle A?非常感谢您到目前为止的帮助!你帮了大忙! 评论 2022年8月16日17:02
  • @KJ关于渔获物22。。。我不知道。谢谢!将api作为反馈的目标。。。我如何将此用于AHK?cdn01.foxitsoftware.com/pub/foxit/manual/pomnto/en_us/…我可以看到有一个“GetNumPages获取文件中的页数” 评论 2022年8月16日17:15

0

重置为默认值

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

浏览标记的其他问题问你自己的问题.