根据SDK,有一些Win32对象可以"继承"给定进程创建的子进程.(事件,互斥体,管道......)
这究竟意味着什么?
比方说,我有一个名为事件对象,以创建CreateEvent,一个时间bInheritHandle == true,和其他时间== false.
现在我开始一个子进程.这两个事件句柄如何影响子进程?它们在哪些情况下有所不同?
如果我已经知道句柄,有人可以告诉我如何使用进程类在c#中捕获正在运行的进程吗?
我宁愿也不必枚举getrunning流程方法.如果可能的话,pInvoke是可以的.
我目前正在创建一个静音打印模块.我正在使用的当前控件是,它确保已经创建了控件句柄(IsHandleCreated).我做了一切来欺骗这一点,没有运气.
您是否有想法如何创建控件的句柄而不在屏幕上显示任何内容?
我使用它的句柄操作绘图上的数据:
x = 1:10; y = sin(x);
h1 = line(x,y);
Run Code Online (Sandbox Code Playgroud)
但是,如果在脚本实际终止之前图形被关闭,则执行此类操作会返回错误.
>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.
Run Code Online (Sandbox Code Playgroud)
h1在使用它进行任何操作之前,有没有办法检查是否是有效的句柄?
我需要访问我的一些WPF窗口的Win32窗口句柄,以便我可以处理Win32激活消息.我知道我可以使用PresentationSource.FromVisual或WindowInteropHelper获取Win32窗口句柄,但是如果尚未创建WPF窗口,我遇到了问题.
如果我使用PresentationSource.FromVisual并且尚未创建窗口,则返回PresentationSourcenull.如果我使用WindowInteropHelper并且尚未创建窗口,则Handle属性为IntPtr.Zero(null).
我打过电话this.Show(),并this.Hide()在窗口上之前,我试图访问手柄.然后我可以拿到手柄,但是窗口上的窗口瞬间闪烁(丑陋!).
有谁知道强制创建WPF窗口的方法?在Windows窗体中,这就像访问Form.Handle属性一样简单.
编辑:我最终选择了Chris Taylor的答案.在这里它是,如果它帮助其他人:
static void InitializeWindow(Window window)
{
// Get the current values of the properties we are going to change
double oldWidth = window.Width;
double oldHeight = window.Height;
WindowStyle oldWindowStyle = window.WindowStyle;
bool oldShowInTaskbar = window.ShowInTaskbar;
bool oldShowActivated = window.ShowActivated;
// Change the properties to make the window invisible
window.Width = 0;
window.Height = 0; …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Windows中运行Linux服务器.
在Linux中,套接字和文件描述符的处理方式相同.某些系统api可用于套接字和文件描述符.
但是,我通过WIN API处理Winsock和HANDLE(文件描述符)的socket.
所以我需要知道一个整数是一个套接字或一个HANDLE.
现在问题是:
在Windows中,socket()和open()的返回值是否相同?
如果它们总是不同,我可以编写自己的socket()和open()来包装系统的一个.并记录系统api的返回值,无论整数是套接字还是HANDLE.
如果它们是相同的,我不知道如何处理它.
SafeHandleZeroOrMinusOneIsInvalid.NET Framework中有一个类,还有一个SafeHandleMinusOneIsInvalid类.
为什么是这样?在哪些情况下零是一个有效的句柄?
我不能说我有强大的C++背景,所以这些天我经常听到Handle.我知道Pointer是什么(它存储内存位置的地址就像参考),但我不确定Handle是什么以及这两者之间的区别.如果你能提供一个C#中的示例代码就会很棒.
顺便说一下,我用Google搜索了这个术语,然而很多人给出了不同的解释,所以我觉得我从SO中得到了最好的解释.
编辑:
为其他访客快速提醒:句柄就像是指向资源的参考.它可以指向像指针一样的内存地址,但Handle是更通用的术语,所以它更像是一个伪指针.文件就是一个很好的例子.文件可以具有操作系统可以理解并用于查找文件的ID.因此Handle可以保存此ID(可能是也可能不是内存地址),当我们通过此Handle时,OS可以轻松找到该文件.
有关更多详细信息,请参阅以下答案.
编辑:
这个问题下的所有答案都很棒,很有说服力.我很难选择其中一个来标记它作为答案.
我将学习如何在C#中处理作为服务器端的HTTPS流量,并且在第一步中我遇到了一些麻烦.
这是一些代码(http://pastebin.com/C4ZYrS8Q):
class Program
{
static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None) return true;
Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
return false;
}
static void Main()
{
var tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8080);
tcpListener.Start();
var clientAccept = tcpListener.AcceptTcpClient();
Thread.Sleep(1000);
if (clientAccept.Available > 0)
{
var sslStream = new SslStream(clientAccept.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
var certificate = new X509Certificate("path\server.pfx", "password");
sslStream.AuthenticateAsServer(certificate);
}
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
不要争辩!:)这只是测试代码,我只想在C#中实现SSL处理的一些基本步骤.
所以......问题发生在这一行:
sslStream.AuthenticateAsServer(certificate);
Run Code Online (Sandbox Code Playgroud)

从俄语翻译为: - SSL服务器模式必须使用具有相应私钥的证书.
我想,我的X509证书不正确,但再次检查:
makecert.exe …Run Code Online (Sandbox Code Playgroud)