Articles of 句柄

创build窗口句柄时出错

我创build了一个.NET 2.0的Windows应用程序。 此应用程序dynamic地创build表单控件 现在,当我试图运行该应用程序,它正在抛出一个exception“创build窗口句柄错误”。 在此之后,应用程序就会挂起而没有任何反应 在第一次,表格得到正确显示。 在一个特定的事件我试图重新加载相同的forms,而那时我正在得到这个例外。 任何人都知道如何摆脱这一点。 任何forms的帮助将是伟大的完整:)

使用多less个Windows句柄是“太多”了?

据我所知,这个问题的答案可能取决于registry设置和Windows的版本,也可能取决于RAM的数量,如果没有足够的内存。 为了这个问题,假定服务器有足够的RAM(3 + GiB)。 如果一个应用程序(这种情况下的第三方应用程序)以几百个小时的时间泄漏句柄,那么在其他应用程序遇到麻烦之前,该应用程序可以泄露多less个句柄? 我所说的“麻烦”是指,例如,无法启动线程,无法打开文件,等等。 我已经看到一些服务器(轻载)使用几万个句柄运行一个进程(通常是一个数据库进程),所以旧的10000句柄限制显然不是问题。 (无论如何,这是一个每个进程的限制,所以不会影响我的应用程序,在这一点之下)。 有人可以回答这个问题,也可以指出一些资源,解释一下Windows服务器在处理完(句柄或其他系统资源)之前可以处理多less个句柄?

当closures有效句柄时,AppVerifier报告“无效句柄 – 代码c0000008”

我有一个简单的testing程序,在AppVerifier下运行时会失败并失败。 该程序复制STD_INPUT_HANDLE ,然后尝试使用CloseHandle()closures它。 该程序工作正常,没有AppVerifier返回TRUE的CloseHandle 。 但是,如果在AppVerifier下运行Lock , Heaps和Handles则会引发exception。 详情如下。 任何人都可以评论为什么发生? 这是一个AppVerifier错误? */ // stdintst.cpp : Defines the entry point for the console application. // // // This code fails if run under AppVerifier x64 4.0.0665 // Test is compiled under VS 2005 // #include "stdafx.h" #include <windows.h> #include <stdio.h> static int duplicate(HANDLE h) { HANDLE […]

C#在桌面图标后面设置窗口

假设我在屏幕上的0,0坐标处有一个100px乘100px的空格式。 它没有边框样式。 有没有什么办法让这个定位在桌面上的图标? 我会认为这将涉及过程Progman,因为那是什么包含桌面图标。 但是,不pipe我尝试什么…获得窗口句柄,改变父母等,我似乎无法得到窗口出现在图标后面。 有任何想法吗?

一旦进程结束,会发生什么?

如果我有一个窗口进程已经停止(死亡或刚刚结束)的句柄: 将句柄(或更好的背后的记忆)重新用于另一个过程? 或者将GetExitCodeProcess()从现在起永远得到正确的结果吗? 如果1.是真的:GetExitCodeProcess()如何工作? 如果2.是真的,那么这不意味着我可以通过启动/终止新进程来降低操作系统,因为我创build了越来越多的句柄(并且操作系统为它们保留了内存)? 我对手柄的概念有点困惑。 先谢谢你!

一些控件怎么没有窗口句柄?

我想得到一些控件的窗口句柄来做一些东西(需要一个句柄)。 这些控件在不同的应用程序中。 奇怪的是; 我发现许多控件没有窗口句柄,就像Windows资源pipe理器中工具栏(?)中的button一样。 只要尝试获取文件夹/search/(等)button的句柄。 它只是给我0。 所以..第一个问题:为什么一些控件没有窗口处理? 他们心中不是所有的控制窗口吗? (只是谈论标准控件,就像我在Windows资源pipe理器中期望的那样,在窗格上没有任何自定义的控件)。 这使我想到了第二个问题:如果无法获得它们的句柄,如何使用它们(如使用EnableWindow)? 非常感谢任何投入! 编辑(其他信息): Windows资源pipe理器只是一个例子。 我经常遇到这个问题 – 在另一个应用程序中(我真正感兴趣的是专有应用程序)。 我有“物理”控制(因为我可以得到这些控件的AutomationElement),但他们没有窗口句柄。 此外,我试图发送一个消息(SendMessage)来获取button状态,试图找出它是否被推或不推(这是一个标准的button,似乎只有通过该消息,performance出这种行为 – 至less我已经看到了,而且button的按下状态可以持续比标准button更长的时间,尽pipeWindows资源pipe理器button显示类似的行为,就像button式checkbox,尽pipe它们是(推)button)。 SendMessage需要一个窗口句柄。 工具栏在某种程度上改变了它的子元素的行为吗? 拿走他们的窗户把手或类似的东西? (使用父处理/控制ID进行标识??)但是,那么如何使用那些需要窗口句柄的控件的function?

如何枚举过程的句柄?

有什么办法如何枚举窗口给定的PID进程,并获得他所有打开的句柄(locking的文件等)的列表? 编辑:我不在乎语言。 如果是在.NET中,我会很高兴,如果在WinApi(C)中,它不会受到伤害。 如果在别的地方,我想我可以重写它:-)

wxPython不会closures与父窗口句柄的框架

我有一个Python程序,从另一个程序通过COM获取窗口句柄(把Python程序看作是一个插件)我把这个窗口设置为主Python框架的父窗口,所以如果另一个程序最小化,python框架也会。 问题是,当我退出,并尝试closures或销毁主框架,frame.close永远不会完成它的执行(虽然它消失),另一个程序拒绝closures,除非杀死与TaskManager。 这里大概是我们采取的步骤: if we are started directly, launch other program if not, we are called from the other program, do nothing enter main function: create new wx.App set other program as frame parent: Get handle via COM create a parent using wx.Window_FromHWND create new frame with handle as parent show frame enter main loop […]

SWT没有更多的句柄

Windows XP对每个进程限制10000个用户句柄,每个桌面会话总共限制32000个。 但是,当我运行4或5 SWT过程,每个消耗不超过2000个用户句柄,SWT没有更多句柄exception将被抛出。 有谁知道为什么?

为什么在redirect输出时调整控制台缓冲区会引发无效句柄exception?

在将输出redirect到文件时,调整C#控制台应用程序中的Console.BufferWidth会引发exception。 我们来看一个例子test1.exe: static void Main(string[] args) { Console.BufferWidth = 240; Console.WriteLine("output1\noutput2"); } 标准输出很好: test1.exe output1 output2 redirect到文件引发exception: test1.exe > file.txt Unhandled Exception: System.IO.IOException: The handle is invalid. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.__Error.WinIOError() at System.Console.SetBufferSize(Int32 width, Int32 height) at System.Console.set_BufferWidth(Int32 value) at test1.Program.Main(String[] args) in \\wopr\falken\test1\Program.cs:line 13 很容易忽略使用try … catch,但有一些我一般不理解的文件句柄或句柄。 为什么句柄无效?