草庐IT

windows - 窗口句柄 (HWND) 是唯一的,还是它们曾经被重复使用?

我在想是否有相同值的句柄?为了澄清我的问题,假设我打开记事本,输入一些文本,保存,然后关闭记事本。如果我重复此操作一千次(或更多次),我是否有机会看到第一次使用的记事本主窗口使用相同的窗口句柄(HWND)值?如果是,为什么? 最佳答案 是的。句柄只能表示有限数量的值,因此Windows最终必须重用它们。句柄一旦关闭,它就消失了,你不能用它做任何事情,它不存在,你甚至不应该看它。如果您随后打开另一个句柄,则Windows可能会重用该句柄值。 关于windows-窗口句柄(HWND)是唯一的

c - 在 C 中为我自己的应用程序获取 HWND

因为我找不到this的答案问题我进一步研究了MSDN,发现了isChild()。它可能会给我另一个问题的答案。现在,为了使用isChild(),我需要传递我要检查的父应用程序的HWND,在本例中是我自己的应用程序。如何获取我自己的应用程序的HWND?我不知道标题,因为它不断变化,所以我不能使用FindWindow()。谢谢编辑:由于不清楚,我将添加更多信息:我没有创建窗口。我无权创建窗口。我的代码是一段与其他程序员编写的任何应用程序一起编译的代码,我无法访问窗口的创建方式、标题或任何其他信息。那么,如何将HWND获取到我正在运行的应用程序的“WINDOW”?

c# - 如何从 hWnd 获取 "Application Name"for Windows 10 Store Apps (e.g. Edge)

我正在尝试为Windows10应用获取一个易于理解的“进程名称”。目前,它们都使用ApplicationFrameHost,所以我想我可以使用ModelId或PackageName,但似乎是Windows10StoreApps(我尝试使用Mail、Store和Edge)无法与PackagequeryAPI一起使用使用kernel32.dll,GetApplicationUserModelId返回APPMODEL_ERROR_NO_APPLICATION,GetPackageId返回APPMODEL_ERROR_NO_PACKAGE.如何获取Windows10应用商店应用程序的标识符,以

c++ - 如何在不使用 CreateWindow(Ex) 的情况下创建窗口 (HWND)?

我正在使用代理DLL拦截对CreateWindowExA/CreateWindowExW的调用.这很好地退出,除了一些应用程序(最值得注意的是一些VisualBasic6应用程序)似乎能够创建窗口而无需通过这两个函数中的任何一个。Spy++等工具能够显示窗口,但我的Hook函数没有注意到它们。我的第一个怀疑是这些(旧的)应用程序可能使用了CreateWindowA/CreateWindowW用于创建窗口,但至少使用我的编译器(MSVC6到MSVC10),CreateWindow只是一个#define;文档的备注部分证实了这一点。我的第二个想法是我可以安装一个CBThook使用SetWi

c - 将 `HWND` 与 `INVALID_HANDLE_VALUE` 进行比较是错误的吗?

我和一位程序员同事进行了一场小辩论。他在他的代码中使用了以下习语:HWNDhWnd=SomeFunctionWhichReturnsAWindow();if(hWnd!=NULL&&hWnd!=INVALID_HANDLE_VALUE){//Allgood}else{//Error}我告诉他在我看来这是一个错误的方法,因为HWND类型与INVALID_HANDLE_VALUE定义无关,但他确信这是好的代码,因为有效句柄永远不会等于INVALID_HANDLE_VALUE,而且它的意思是“安全总比遗憾好”。那么,这是一个可以接受的正确成语吗? 最佳答案

python - 获取每个窗口的 HWND?

我正在开发一个python应用程序,我想获取每个打开的窗口的HWND。我需要窗口的名称和HWND来过滤列表以管理一些特定的窗口,移动它们并调整它们的大小。我试着自己做,但我没有得到正确的代码。我试过这个code但我只得到每个窗口的标题(这很好),但我也需要HWND。importctypesimportwin32guiEnumWindows=ctypes.windll.user32.EnumWindowsEnumWindowsProc=ctypes.WINFUNCTYPE(ctypes.c_bool,ctypes.POINTER(ctypes.c_int),ctypes.POINTER(

c# - 我如何判断给定的 hWnd 是否仍然有效?

我正在使用生成InternetExplorer实例的第三方类。此类有一个属性hWnd,它返回进程的hWnd。稍后,我可能想重用应用程序的实例(如果它仍然存在),所以我需要告诉我的帮助程序类附加到它。在此之前,我想知道给定的hWnd是否仍然有效,否则我将生成另一个实例。如何在C#和.NET3.5中执行此操作? 最佳答案 如果是窗口句柄,可以调用isWindow(hWnd);来自msdn:ReturnValueBOOLIfthewindowhandleidentifiesanexistingwindow,thereturnvalueis

c# - 在给定 HWND 的情况下如何获取窗口的子窗口?

我有给定窗口的句柄。如何枚举它的子窗口? 最佳答案 Here你有一个可行的解决方案:publicclassWindowHandleInfo{privatedelegateboolEnumWindowProc(IntPtrhwnd,IntPtrlParam);[DllImport("user32")][return:MarshalAs(UnmanagedType.Bool)]privatestaticexternboolEnumChildWindows(IntPtrwindow,EnumWindowProccallback,IntPt

c# - 如何获取 Window 实例的 hWnd?

我的WPF应用程序有多个窗口,我需要能够获取每个窗口实例的hWnd,以便我可以在Win32API调用中使用它们。我想做的事的例子:WindowmyCurrentWindow=Window.GetWindow(this);IntPtrmyhWnd=myCurrentWindow.hWnd;//Exceptthispropertydoesn'texist.执行此操作的最佳方法是什么? 最佳答案 WindowInteropHelper是你的friend。它有一个接受Window参数的构造函数,以及一个返回其窗口句柄的Handle属性。Wi

c++ - 使用 Win32 API 验证 HWND

从使用C++的nativeWin32API是否可以确定与HWND关联的窗口是否仍然有效? 最佳答案 您可以使用Win32APIIsWindow.不建议使用它,原因有两个:一旦窗口被销毁,窗口句柄就可以重新使用,所以你不知道你是否有一个完全不同的窗口的句柄。状态可能会在此调用后直接更改,您会认为它是有效的,但它可能真的无效。来自MSDN(与上面相同的链接):AthreadshouldnotuseIsWindowforawindowthatitdidnotcreatebecausethewindowcouldbedestroyedaft