今天,我的应用程序在分配图像时在Windows上抛出“不再有句柄”错误。要对此进行调试,我很想获得我的应用程序已获取的所有句柄的列表。如果可能,甚至使用字体、图像或其他类型,并在我的错误报告中包含这些信息以查看我的应用程序泄漏的位置。我使用Java和SWT,但在这种情况下调用native函数或第三方应用程序来获取信息没有问题。 最佳答案 对于实用程序,请尝试Microsoft的ProcessExplorerSysinternals.这将显示进程字符串、句柄、文件、父进程、线程、线程堆栈等等。
我正在WindowsXP上编写程序,试图获取calc.exe的进程句柄。我可以假设用户确实运行了calc.exe,但他可能更改了文件名。即使名称已更改,是否有一个名称可以获取calc.exe进程的句柄?我找到了这个答案,但它不处理顽皮用户更改名称(例如更改为calc_new.exe)的情况:HowcanIgetaprocesshandlebyitsnameinC++?我可以使用Win32进程的一些其他属性来查找句柄吗? 最佳答案 您可以使用以下Win32API调用序列执行此操作:使用Spy++或类似工具找到您定位的顶级窗口的类名。调
我有一些事件句柄并将它们添加到列表中。我想知道我是否可以存储这些句柄,关闭本地的,以后仍然使用存储的。例子:std::mapEvents;DWORDOpenSingleEvent(std::stringEventName,boolInheritHandle,DWORDdwDesiredAccess,DWORDdwMilliseconds){HandlehEvent=OpenEvent(dwDesiredAccess,InheritHandle,EventName.c_str());//LocalHandle.if(hEvent){DeleteSingleEvent(EventName)
我正在编写一个C#应用程序。我正在寻找一种方法,只需提供鼠标单击的坐标(或任何坐标)即可在其他应用程序中找到控件的窗口句柄。示例:在我的桌面上,我打开了计算器应用程序、打开了记事本并运行了一些其他第3方应用程序。屏幕被他们每个人部分覆盖。现在,如果我运行我的应用程序并单击屏幕上的任何位置,我希望能够找出鼠标下控件(按钮、文本框、标签、选项卡、框架等)的窗口句柄,无论是否它是在计算器中的按钮、记事本中的文件菜单或第3方应用程序中的某些其他控件上单击的。它类似于我们从Spy++获得的功能。 最佳答案 顺便说一句,这有alreadybee
好的,我正在学习WindowsAPI以及如何创建线程/进程和获得调试权限等。非常新,如果这是一个愚蠢的问题,我深表歉意。无论如何,我正在创建一个.dll注入(inject)器来玩,并且已经成功地能够注入(inject)32位和64位进程,包括通过注入(inject)我的.dll文件的explorer.exe。但是,我试图在标准用户模式下对此进行测试,但在弄清楚如何进行时遇到了问题。现在我正在为.dll和injector.exe编译为x64。我正在尝试注入(inject)x64进程,主要是explorer.exe(适用于管理员)。使用VisualStudio2012,进行了一些优化,没有
我有一个生成多个子“工作进程”的.NET应用程序。我正在使用Windows作业对象API和JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE设置来确保在父进程终止时子进程总是被杀死。但是,我观察到许多孤立进程在父进程关闭后仍在机器上运行。使用ProcessExplorer,我可以看到它们仍然正确分配给作业,并且作业配置了正确的“作业关闭时终止”设置。JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE的文档指出:“当作业的最后一个句柄关闭时,导致与该作业关联的所有进程终止。”这似乎意味着Job的句柄在某处仍然打开...我搜索了我的Job对象的句柄,并在
我有一个我想删除的文件,它的句柄由系统进程持有,所以每次我尝试删除它时它都会显示Accessdenied但出于某种原因cygwin能够删除它。我下载了coreutils并查看了rm可执行文件的源代码,发现它使用unlink函数来实现它。我创建了一个使用相同功能的小测试程序,但它仍然给我Accessdenied。然后我找到了这个article那个家伙描述了cygwin如何能够删除以下文件:Cygwinopensfilesalwayswithallsharingflagsset,soafileopenedbyaCygwinprocessshouldnotresultinasharingvi
尝试使用SetConsoleScreenBufferSize但失败并显示“句柄无效”。在最后一个错误。将发布所有代码,但这里有一些要点:使用它来调整缓冲区大小:intTGHandleResizeEvent(structTGHandle*tgHandle,INPUT_RECORDrecord){if(record.EventType==WINDOW_BUFFER_SIZE_EVENT){WINDOW_BUFFER_SIZE_RECORDsize=record.Event.WindowBufferSizeEvent;sizeTGDrawBuffer(&tgHandle->drawBuffe
我正在写一个驱动程序,但我遇到了问题每次我尝试使用CreateFile打开我的驱动程序的句柄时,我都会收到bsod(访问冲突)重要的是要提到我的驱动程序加载成功并且我没有收到任何错误有人知道怎么处理吗?提前致谢! 最佳答案 !analyze-v是你的friend。 关于windows-每次创建驱动程序句柄时都会出现蓝屏,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1102234
我正在做一个应用程序虚拟化项目。所以我在NT级别挂接应用程序并将注册表调用定向到我的虚拟注册表。在运行任何应用程序时,如果我转到"file"->“打开”。我几乎没有像下面这样的注册表调用:ZwOpenKey(registrykeypath)->它生成句柄ex:(0x04e8)ZwQueryKey(0x4ea,...)ProcessMonitor说打开和查询都是在同一个键上执行的。我自己测试确认是同一个key。查询键也为查询键api生成了正确的结果。这2个字节的差异并不适用于所有打开和查询键的情况。应用程序如何以及为何在调用querykey之前将句柄从0x4e8更改为0x4ea?我还测试