Articles of winapi

其他进程的GetKeyboardLayoutName?

基本上,我想要做的是让GetKeyboardLayoutName返回其他进程的键盘ID(KLID)。 默认情况下,它只重新显示我的应用程序窗口的键盘ID。 我也试过GetKeyboardLayout,但是它返回一个不幸的HKL(它接受另一个窗口的hwnd)。 或者,如果有一种将HKL转换成KLID的方法,那也是很棒的,但是我怀疑是不是有这样的一个问题。 那么,我怎么能做到这一点呢? 我希望能够使用获得的KLID作为LoadKeyboardLayout函数的参数。

C#中的Windows凭据提供程序

我正在做一个学校项目,我应该修改Windowslogin界面提供的凭据方式。 经过一番search,我find了着名的Vista RTM(Longhorn)样本和技术文档。 我发现所有的样本都是用C ++开发的。 由于我没有任何C / C ++的经验,我认为自己是一个体面的C#程序员,我想知道是否有可能做这个C#。 我还需要与REST API交换数据来validationlogin,所以C#会更友好。 我发现这个https://stackoverflow.com/a/23496878/3626447 ,但由@mageos提供的信息太“原始”。 有人知道一些有用的资源吗?

CBS_DROPDOWNLIST组合无法在Windows UX主题下响应WM_CTLCOLOR …

我们有一些C ++ Win32代码,通过响应WM_CTLCOLOR …消息,将特定的控件应用于背景颜色。 这在Windows UX主题不运行时正常工作。 在带默认主题的Windows 7中,带有CBS_DROPDOWNLIST样式的combobox只显示主题的灰色背景。 CBS_DROPDOWNcombobox将在启用主题的情况下正确响应背景颜色更改。 我知道我可以删除受影响的控件的主题,但这使他们看起来很奇怪。 任何人都有任何想法的官方方式来改变个人主题控制的背景颜色,现在MS似乎已经打破了WM_CTLCOLOR …的东西。 谢谢JF

通过subprocess发送一个钩子捕获消息到控制台是可能的吗?

所以我开始一个普通的控制台程序,然后在其中创build另一个进程。 接下来,subprocess尝试在父进程拥有的控制台上写入内容。 是否有可能在这个控制台上挂钩,所以当subprocess试图写一些文本我可以做这个文本search和replace,并把它改变到控制台。 (我知道使用pipe道是可能的,但是在这里我特别要求在控制台级别执行此操作,因为如果某些程序看到它们连接到pipe道而不是控制台,则其行为会有所不同。) SetWindowsHookEx与我的问题有关吗?

如何使用套接字重叠I / O?

我想在我的服务器中使用重叠I / O,但是我无法find关于这个主题的很多教程(大多数教程都是关于重叠I / O与完成端口,我想使用callback函数)。 我的服务器最多可同时连接400个客户端,并且只能长时间发送和接收数据(每30秒钟,服务器和客户端之间交换几千字节的数据)。 我想使用重叠I / O的主要原因是select()最多只能处理64个套接字(我有400个!)。 所以我会告诉你我是如何理解重叠的I / O,并纠正我,如果我错了: 如果我想从一个客户端接收数据,我使用WSARecv()并提供套接字句柄和一个缓冲区来填充接收到的数据, 同时我也提供一个callback函数 。 当数据被接收并填充到缓冲区时,callback函数将被调用,并且我可以处理这些数据。 当我想发送数据时我使用WSASend() ,我也提供套接字句柄和callback函数,并且当数据被发送时(不确定是否放置在底层的发送缓冲区中或实际放置在线上),callback也会被称为告诉我数据已发送,我可以发送下一个数据。

Win32:如何根据Active Directoryvalidation凭据?

它已被问及 .NET的答案,但现在是时候得到本机Win32代码的答案: 我如何validationWindows用户名和密码? 我之前问过这个问题的托pipe代码 。 现在是本地解决scheme的时候了。 它需要指出一些更常见的解决scheme的陷阱: 无效的方法1.使用模拟查询Active Directory 很多人build议查询Active Directory的东西。 如果抛出exception,那么你知道凭据是无效的 – 正如在这个stackoverflow问题中所build议的。 然而,这种方法有一些严重的缺陷 : 您不仅要validation域帐户,还要进行隐式授权检查。 也就是说,您正在使用模拟令牌从AD读取属性。 如果否则有效的帐户没有权利从AD读取? 默认情况下,所有用户都具有读取访问权限,但可以将域策略设置为禁用受限帐户(和/或组)的访问权限。 针对AD的绑定具有严重开销,AD架构caching必须在客户端(DirectoryServices使用的ADSI提供程序中的ADSIcaching)中加载。 这既是networking,又是AD服务器,消耗资源,而且对于像validation用户帐户这样的简单操作来说太昂贵了。 对于非例外情况,您依赖exception失败,并假设这意味着无效的用户名和密码。 其他问题(如networking故障,AD连接故障,内存分配错误等)则被误解为authentication失败。 .NET的DirectoryEntry类的使用是validation凭据的不正确方法的一个例子: 无效的方法1a – .NET DirectoryEntry entry = new DirectoryEntry("persuis", "iboyd", "Tr0ub4dor&3"); object nativeObject = entry.NativeObject; 无效的方法1b – .NET#2 public static Boolean CheckADUserCredentials(String accountName, String password, String domain) { Boolean result; using […]

如何以编程方式使用Win32创build一个快捷方式

我需要以编程方式使用C ++创build一个快捷方式。 我怎样才能使用Win32 SDK做到这一点? 什么API函数可以用于这个目的?

在Win32中,有没有一种方法来testing套接字是否是非阻塞的?

在Win32中,有没有一种方法来testing套接字是否是非阻塞的? 在POSIX系统下,我会做如下的事情: int is_non_blocking(int sock_fd) { flags = fcntl(sock_fd, F_GETFL, 0); return flags & O_NONBLOCK; } 但是,Windows套接字不支持fcntl()。 非阻塞模式是使用ioctl和FIONBIO 设置的 ,但是似乎没有办法使用ioctl 获得当前的非阻塞模式。 有没有其他的Windows调用,我可以用它来确定套接字当前是否处于非阻塞模式?

在Windows上获取实际的文件名(正确的shell)

Windows文件系统不区分大小写。 如何,给定一个文件/文件夹名称(例如“somefile”),我得到该文件/文件夹的实际名称(例如,如果资源pipe理器显示它应该返回“SomeFile”)? 我知道的一些方式,所有这些看起来都很倒退: 给定完整path,searchpath上的每个文件夹(通过FindFirstFile)。 这给每个文件夹适当的结果。 在最后一步,search文件本身。 从句柄获取文件名(如在MSDN示例中 )。 这需要打开一个文件,创build文件映射,得到它的名称,parsing设备名称等。相当复杂。 它不适用于文件夹或零大小的文件。 我是否缺less一些明显的WinAPI调用? 最简单的,如GetActualPathName()或GetFullPathName()返回传入的名字(例如,如果传入的是程序文件,即使它应该是“Program Files”也会返回)。 我正在寻找一个本地解决scheme(不是.NET的)。

创build窗口而不注册WNDCLASS?

是否有必要始终为您的应用程序build立并注册新的WNDCLASS(EX)? 然后使用主窗口的lpszClassName? 是不是有一些预制的类名称,我们可以用于主窗口,如button和文本框等“button”和“编辑”?