windows - 访问另一个 Windows 应用程序资源

标签 windows kernel privileges autoit

即使您不了解 AutoIt,您也可能对这个问题有一些深入的了解,因为 AutoIt 并不是一种完全独特的语言。它是一种可以轻松访问窗口的 dll 的语言。

我正在尝试使用 AutoIt 语言编写一个与 Windows Journal 一起运行的程序,以便通过热键选择它的颜色。我已经完成了大部分脚本并开始工作。我现在正在为它制作一个 GUI。我发现它确实使用 imagelist 来显示颜色的图像。我想在我的 GUI 中使用该确切的图像列表以获得更加用户友好的外观。我的问题是我无法捕获它并使用它。我也试过复制它,但无济于事。我认为这可能是因为我的应用程序没有适当的权限来访问该程序的资源。

我的脚本是这样的(还有很多变体):

$hWnd = ControlGetHandle("[CLASS:JournalApp]", "", 113) ;113 is the control ID for the color selecting toolbar 
$hImageJS = _GUICtrlToolbar_GetImageList($hWnd)   
$hImage = _GUIImageList_Duplicate($hImageJS) 
ConsoleWrite(_GUIImageList_GetImageCount($hImage)&"<--count")

我知道有一个图像列表,因为我发现我从 GUICtrlToolbar_GetButtonImage($hWnd, $cmdId) 得到的返回支持这个想法。

我总是从 imagecount 中得到 0。我尝试了各种方法,例如直接访问它但无济于事。有什么想法/建议/意见吗?

有没有办法让一个窗口的程序访问另一个窗口程序的资源?是否有可以在 kernel32 dll 中设置的特殊权限或特权?

最佳答案

很抱歉,您没有在 AutoIt 论坛上获得帮助,但您所做的远远超出了我们社区大部分的业余编码人员的水平。

理论上你是对的,在编程中一切皆有可能。

你不能访问数据,因为你是一个不同的进程。为此,您必须在其他程序中创建一 block 内存,添加一些代码,然后执行它。该过程称为注入(inject)。

注入(inject)过程相当简单,几乎就是这些函数调用:_WinAPI_OpenProcess_MemVirtualAllocEx_WinAPI_WriteProcessMemoryCreateRemoteThread code> 您必须为 _WinAPI_WaitForSingleObject_WinAPI_ReadProcessMemory_MemVirtualFreeEx 编写自己的包装器。

即使完成了这些,您也不能只将图像列表发送到新应用程序,您可以获取图标的句柄,然后将数据写入内存块,然后然后传回指针。

在论坛中搜索一下,现在您知道自己在寻找什么了。有例子,比如 this onethis one ,在论坛中搜索 CreateRemoteThread,您将获得一些值得一读的话题。

祝你好运。如果我是你,我会找到一些方法来制作你自己的图像列表版本,而不是试图复制他们的。

关于windows - 访问另一个 Windows 应用程序资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011592/

相关文章:

Windows 许可问题

c - ebpf 中的有界循环。现在验证者是否检查程序是否为 DAG?

sql - 如何列出数据库中运行的计划作业?

Linux内核调度实现

python - "Operation not permitted"关于使用 os.setuid() [python]

mysql - 在 MySQL 中设置应用程序权限

windows *.bat 文件用户输入和验证

python - .py 文件的 IDLE 编辑消失了

windows - delphi windows服务无法从互联网下载文件

linux - 为什么当 kthread_run 失败时,linux 内核的 kref doc 会省略 kref_put