Articles of winapi

用户locking屏幕的Windows消息

我正在用C ++编写老式Windows编程,我需要在我的WndProc中捕获一个表示用户已经注销或locking屏幕的事件。 更新 (谢谢David Hefernan)我到处search,但唯一发现的是WM_ENDSESSION消息 – 它不处理屏幕locking事件。 任何人都知道这是怎么做的? 我需要通过Windows XP的风格将其应用到Windows 2000。

在将ASCIIstring传递给Windows API函数之前将其转换为UTF-16

在我目前的项目中,我一直在使用宽字符(utf16)。 但是因为我唯一的用户input将是一个URL,反正最后还是一个string,另外一个string,我只想把整个程序切换到ascii。 我的问题是,在将string传递给Windows API函数之前将string转换为utf16有什么好处吗? 在网上做了一些研究之后,好像很多人推荐这个,如果你不在Windows上使用UTF-16。

在Delphi中CreateFile不能返回一个合适的Handle – 设备

希望能find一些在windows中有服务经验的人。 我想在Delphi中使用NdisProt驱动程序用于以太网适配器 my_Handle:= CreateFile(PChar('\\。\ NdisProt'), GENERIC_WRITE或GENERIC_READ,0,nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); (也曾用\\.\\NdisProt ) 执行后, my_Handle的值始终为“4008”,GetLastError总是返回0 如果我试图读取或写入文件,我得到违反,有人知道为什么我得到这种不需要的行为?

微软怎么能说WinAPI中一个单词的大小是16位?

我刚开始学习WinAPI。 在MSDN中,为WORD数据types提供了以下说明。 字 一个16位无符号整数。 范围是0到65535十进制。 这个types在WinDef.h中声明如下: typedef unsigned short WORD; 很简单,它与我一直用来学习的其他资源相匹配,但它怎么可以明确地说,它是16位? 维基百科上的C数据types页面指​​定 short / short int / signed short / signed short int 短签名整数types。 能够至less包含[-32767,+32767]范围; 因此它至less有 16位的大小。 所以根据C标准, short的大小short可能是32位。 但谁决定使用什么样的比特尺寸呢? 我在这里find一个实际的解释 。 具体而言,该行: …这取决于两个处理器(更具体地说,ISA,指令集架构,例如x86和x86-64)和编译器,包括编程模型。 所以这是ISA,这是有道理的,我想。 这是我迷路的地方。 看看维基百科上的Windows页面 ,我可以在侧面看到: 平台ARM,IA-32,Itanium,x86-64,DEC Alpha,MIPS,PowerPC 我真的不知道这些是什么,但我认为这些是处理器,每个将有一个ISA。 也许Windows支持这些平台,因为所有这些平台都保证使用16位作为unsigned short ? 这听起来不太对,但我对这个东西还没有足够的了解。 回到我的问题:Windows API如何能够inputtypedef unsigned short WORD; 那么当C标准本身不能保证一个总是16位时, WORD是一个16位无符号整数?

如何更改button上的光标?

static HWND btn; HCURSOR cursor = LoadCursor(0, IDC_CROSS); case WM_CREATE: btn = CreateWindow(TEXT("BUTTON"), TEXT("Press Me"), WS_CHILD|WS_VISIBLE, 50, 50, 80, 30, hwnd, (HMENU) 111, NULL, NULL); 现在,在WM_COMMAND ,我尝试使用: SendMessage(btn, WM_SETCURSOR, 0, (LPARAM) cursor); 哪个不行 那么点击button后,如何更改鼠标的光标呢? 另外,当鼠标hover在button上时,如何更改鼠标的光标(例如,当鼠标hover在网页浏览器的链接上时,它会变成一只手)?

C代码相当于C#来安装证书

我发现下面的代码将证书安装到本地机器可信发布者。 但代码是在C#我想要在C完成相同的。如何将其转换为C? private static void InstallCertificate(string cerFileName) { X509Certificate2 certificate = new X509Certificate2(cerFileName); X509Store store = new X509Store(StoreName.TrustedPublisher,StoreLocation.LocalMachine); store.Open(OpenFlags.ReadWrite); store.Add(certificate); store.Close(); } 任何Windows APIS可用?

什么时候应该使用VS2015平台工具集V140_XP?

我想从VS2010切换到VS2015,但关于V140_XP的文档不是很清楚。 我有两个问题: 我使用静态库(/ MT)。 所以我不需要vcruntime140.dll或任何其他以前的运行时库。 我是否应该将平台工具集设置为V140_XP以在Windows XP中运行我的应用程序? 如果我没有将平台工具集设置为XP,我的应用程序将在Windows 7和更高版本上运行吗?

我怎样才能添加一个WPF覆盖在一个外部的Win32应用程序的窗口?

我试图附加一个WPF窗口作为一个外部应用程序,如记事本的子窗口提供覆盖。 在研究了所有可以在SO和MSDN上find的答案之后,当我的WPF应用程序运行时,我已经在记事本的angular落创build了一个可靠的叠加层。 然而, 只要记事本获得焦点,叠加消失, 以及在记事本上显示的叠加层,叠加层也单独显示为一个窗口 记事本上的叠加层不会收到任何MouseMove事件(但单独的窗口不会)。 这是演示这个问题的最简单的例子: Overlay.xaml <Window x:Class="WindowControlTest.Overlay" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="300" Width="300" Opacity="1" Background="Azure" MouseMove="Window_MouseMove" GotFocus="Window_GotFocus" Loaded="Window_Loaded" Title="Overlay" WindowStyle="None" > </Window> Overlay.xaml.cs using System; using System.Windows; using System.Windows.Input; using System.Windows.Media; using System.Windows.Interop; namespace WindowControlTest { public partial class Overlay : Window { IntPtr m_ParentHwnd; HwndSource m_HwndSource; public Overlay(IntPtr parentHwnd) { InitializeComponent(); m_ParentHwnd = […]

如何从麦克风捕获audio以通过套接字发送?

我正在使用Windows 7并使用Visual Studio 2010开发类似于聊天的应用程序。我正在寻找一种从麦克风(或更确切地说,来自默认logging设备)捕获audio的简单方法,从所述input中收集缓冲区,然后发送它在一个套接字上。 我已经看到DirectX解决scheme的build议,但从我的研究来看,这与简单的情况恰恰相反。 5000行简单的捕获/保存文件程序的示例代码? 这根本不适用于我(是的,这是SDK提供的官方示例)。 无论如何,我并不需要它是跨平台的,我真的更喜欢Windows已经提供的东西,尽pipe我不介意安装一个库,只要不需要比写硬件驱动程序更长的时间从头开始弄清楚(夸张)。 我听说过这个waveInOpen函数,但奇怪的是我找不到任何有关如何使用它的演示。 如果任何人有一个想法或链接到一些示例代码,我将不胜感激。 谢谢大家的时间! PS我可以自己弄清楚networking部分。 我只需要访问原始audio数据缓冲区。

如何获得一个DLL加载过程句柄

我试图得到从DLL加载DLL的过程的句柄。 我的方法是:在DLL_PROCESS_ATTACH我调用EnumWindows(EnumWindowsProc,NULL); 我的EnumWindowsProc实现如下: BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) { if(GetCurrentProcessId() == GetWindowThreadProcessId(hWnd,NULL)){ MessageBox(hWnd,L"I loaded your dll!",L"it's me",MB_OK); return TRUE; } return FALSE; } 问题是,GetCurrentProcessId()== GetWindowThreadProcessId(hWnd,NULL)从来没有真正的(如果我放置在if块的一切工作,但它被调用每个列出的窗口之外的messagebox调用)。 有没有其他方法可以说明问题? 这种做法是完全错误的还是我错过了一些东西? 提前感谢