Articles of 句柄

.NET中的窗口句柄可以改变它的值吗?

在.NET进程的生命周期中,执行System.Windows.Forms.Form的句柄,可以说Application.Run(form)使用的主表单实际上改变了它的值,也就是说,如果使用不同的进程,例如IntPtr handle = User32.FindWindow(null, "Name") ,是否有一种情况下,该处理可能会失效.NET运行时? 编辑 我需要知道句柄,因为我想为IPC使用SendMessage和WM_COPYDATA等。

如何访问一个窗口?

我试图访问一个特定的窗口使用它的句柄(即System.IntPtr值): // Getting the process of Visual Studio program var process = Process.GetProcessesByName("devenv")[0]; // Showing the handle we've got, we've no problem MessageBox.Show(this, process.MainWindowHandle.ToString()); // Attempting to get the main window object by its handle var wnd = NativeWindow.FromHandle(process.MainWindowHandle); // always fails if (wnd == null) MessageBox.Show("Failed"); else MessageBox.Show(wnd.ToString(), "Yeeeeees!!"); 我也尝试访问另一个演示.net winforms应用程序的主窗口,我已经做了这个目的,(即我运行演示应用程序,并尝试访问它的主窗口通过此应用程序),也失败了,虽然两者演示和这个应用程序是.NET应用程序。 但是,这个成功: var process2 […]

我必须CloseHandle()在线程句柄?

_beginthreadex返回一个线程的句柄: m_hStreamStatsThread = (HANDLE) _beginthreadex( NULL, 0, StreamStatsThread, this, 0, NULL ); 例如,如果您需要引用像TerminateThread(..)这样的调用中的线程,则可以使用此句柄。 根据_beginthreadex上的MSDN页面 ,_beginthreadex不会总是返回一个有效的句柄 – 例如错误时也可能返回-1L 当线程正常完成时,我必须在线程句柄上调用CloseHandle,还是只能将其值设置为NULL / INVALID_HANDLE_VALUE?

Windows句柄如果控件设置为可见= false(.NET)

快速的问题,在.NET中的控件有处理(hWnd),如果他们被设置为不可见? 马龙

在Skype客户端通过WinAPI和Delphi查找和使用当前活动的聊天室?

在Delphi中,通过使用Skype API,我可以很容易地向联系人发送消息。 但是,我正在尝试做的是在当前重点联系人的聊天框中input消息,而不发送消息。 通过使用Winspector,我发现Chatbox的Classname是TChatRichEdit,放在TChatEntryControl上,放在TConversationForm上,最后放在tSkMainForm上。 (很明显,Skype客户端是用Delphi编码的;)) 通过使用Win API,我怎样才能find正确的tSkMainForm> TConversationForm> TChatEntryControl> TChatRichEdit ,然后在其中input消息? 最好的办法是什么呢? 此外,TConversationForm也包含联系人的名称,所以我想这使得它更容易一些? 编辑:这是Windspector间谍的屏幕截图,显示TChatRichEdit: 这是我现在的代码: function GetConversationWindow(Wnd: HWnd; P: LParam): Bool; stdcall; var Param: PGetConversationParam; ProcID: DWord; // WndClass docs say maximum class-name length is 256. ClassName: array[0..256] of Char; WindowTitle: array[0..256] of Char; begin Result := True; // assume it doesn't match; keep searching […]

创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了越来越多的句柄(并且操作系统为它们保留了内存)? 我对手柄的概念有点困惑。 先谢谢你!