Windows 访问其他窗口的应用程序资源

Windows 访问其他窗口的应用程序资源,windows,kernel,privileges,autoit,Windows,Kernel,Privileges,Autoit,即使您不知道AutoIt,您也可能对这个问题有一些很好的见解,因为AutoIt不是一种完全独特的语言。它是一种语言,可以方便地访问窗口的dll 我正在尝试使用AutoIt语言制作一个运行Windows日志的程序,以便通过热键选择其颜色。我已经完成了大部分脚本并开始工作。我正在为它制作一个GUI。我发现它确实使用图像列表来显示颜色的图像。我想在GUI中使用这个精确的图像列表,以获得更友好的外观。我的问题是我无法抓住它并使用它。我也试着复制它,但没有用。我认为这可能是因为我的应用程序没有适当的权限访

即使您不知道AutoIt,您也可能对这个问题有一些很好的见解,因为AutoIt不是一种完全独特的语言。它是一种语言,可以方便地访问窗口的dll

我正在尝试使用AutoIt语言制作一个运行Windows日志的程序,以便通过热键选择其颜色。我已经完成了大部分脚本并开始工作。我正在为它制作一个GUI。我发现它确实使用图像列表来显示颜色的图像。我想在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论坛上获得帮助,但您所做的远远超出了业余程序员的水平,他们构成了我们社区的大部分

理论上你是对的,编程中的一切都是可能的

您无法访问数据,因为您是另一个进程。为此,您必须在另一个程序中创建一个内存块,添加一些代码,然后执行它。这个过程叫做注射

注入过程相当简单,基本上是以下函数调用:_WinAPI_OpenProcess、_MemVirtualAllocEx、_WinAPI_WriteProcessMemory、CreateRemoteThread,您必须为其编写自己的包装器、_WinAPI_WaitForSingleObject、_WinAPI_ReadProcessMemory、_MemVirtualFreeEx

即使这样做了,您也无法将图像列表发送到新的应用程序,您可以获得图标的句柄,然后将数据写入内存块,然后将指针传递回

现在你知道你在找什么了,在论坛里搜索一下吧。有一些例子,比如和,在论坛上搜索CreateRemoteThread,你会得到一些值得一读的帖子


祝你好运。如果我是你,我会想办法制作你自己的图片列表,而不是复制他们的图片列表。

如果你在这里找不到任何帮助;要么悬赏,要么去AutoIt论坛。如果你重读你的评论,你会注意到它听起来更像是你在发出命令而不是建议,尽管我相信你不是那个意思。我知道我的选择是什么。谢谢你的意见。在我在这里发布之前,我已经尝试过AutoIt论坛,最近得到的回应是这是不可能的。我相信在计算中任何事情都是可能的,因此我将把这个问题留给大家。也许有人会给我一个更好的答案。你说得对,如果我想把它写成一个陈述,我会把它写成一个答案。尽管如此,我还是在评论中发布了它,因为这是你的问题,我想如果你在AutoIt论坛上发布,你可能会得到快速的回复。寻找不可能的答案;我不得不同意你的看法。因此,我确实找到了一份工作,稍后我会在AutoIt论坛上发布,作为对我问题的回答。不过,我不会在这里发布,因为这可能会让其他人相信问题已经得到了回答,而事实并非如此。顺便说一句,你是我注意到的那个编辑。不正确的语法也让我讨厌,所以我没有抱怨。顺便说一句,你应该用你是而不是你的。如果之前应该有一个句点,则也应如此:干杯。你那样叫我是对的!当人们没有近乎完美的语法和拼写时,我非常恼火,但还是要感谢你们的指点。不在这里发布是个好主意,因为你可能会有人进来给你一个比你在AutoIt论坛上得到的更好的答案。+1,这是一篇信息非常丰富的帖子。我感谢你的评论。我不会接受这个答案,以免影响其他答案。我自己是一个程序员爱好者,对这些东西有一些经验。我确实做了一个工作,但我仍然想找到一种方法来完成这个任务,正如我上面所描述的。如果没有别的,那就是对社区的贡献。我想知道,为什么你说我不能访问数据?我以前做过一些程序,可以读取另一个进程的内存来改变某些东西,例如游戏训练师作弊。@the古怪的人,当然你可以访问数据,事实上我接着说,我的措辞非常糟糕。我是什么
我不是说你不能使用其他应用程序句柄。哦,我明白了。但我发现很难理解的是,我可以通过AutoIt操作一些控件。例如,我可以通过从外部AutoIt程序更改MS Journal中的按钮状态来隐藏工具栏按钮。我相信你,我不能使用那个图像列表的句柄,它只是混淆了在哪里画线;有些手柄我可以操纵,有些我不能。另外,我注意到你正在制作一种将编程与代数结合起来的语言。这是一个非常好的主意。我曾经用LUA做过一个数学解析器,这很有挑战性。@The古怪的人,据我所知,你可以将消息发送到外部窗口句柄。这是你不用耍花招就能做到的。