Questions tagged «winapi»

Windows API(以前称为Win32 API)是可用于Microsoft Windows操作系统的应用程序编程接口的核心集。该标签用于有关使用Windows API开发本机Windows应用程序的问题。



8
找出什么程序注册了全局热键?(Windows API)
据我所知,Windows没有提供API函数来告诉哪个应用程序已经注册了全局热键(通过RegisterHotkey)。我只能发现如果RegisterHotkey返回false,而不是谁“拥有”该热键,则该热键已注册。 在没有直接API的情况下,是否会有回旋路?Windows维护与每个已注册热键关联的句柄-有点令人发疯的是,应该无法获取此信息。 可能不起作用的示例:发送(模拟)已注册的热键,然后拦截Windows将发送给已注册热键的进程的热键消息。首先,我认为拦截消息不会显示目标窗口句柄。其次,即使有可能,也将是一件坏事,因为发送热键会触发各种程序的各种潜在有害活动。 并不是很关键,但是我经常看到对此类功能的要求,并且我自己是注册热键的应用程序的受害者,甚至没有在UI或文档中的任何位置公开它。 (请在Delphi中工作,并且只不过是WinAPI的学徒,请客气。)


12
检查路径是否有效
我只是想知道:我正在寻找一种验证给定路径是否有效的方法。 (注意:我不想检查文件是否存在!我只想证明路径的有效性-因此该位置是否可能存在文件)。 问题是,我在.Net API中找不到任何内容。由于Windows支持多种格式和位置,因此我宁愿使用MS-native。 由于该功能应能够检查: 相对路径(./) 绝对路径(c:\ tmp) UNC路径(\ some-pc \ c $) NTFS-Limitations的完整路径为1024个字符-如果我没有记错,超过该路径将使许多内部Windows函数无法访问该文件。使用资源管理器重命名仍然有效 Volume GUID路径:“ \?\ Volume {GUID} \ somefile.foo 有人有这样的功能吗?
110 c#  .net  winapi  path 

4
使用dllexport从DLL导出功能
我想要一个从C ++ Windows DLL导出函数的简单示例。 我想查看标题,.cpp文件和.def文件(如果绝对需要)。 我希望导出的名称没有修饰。我想使用最标准的调用约定(__stdcall?)。我想要使​​用__declspec(dllexport),而不必使用.def文件。 例如: //header extern "C" { __declspec(dllexport) int __stdcall foo(long bar); } //cpp int __stdcall foo(long bar) { return 0; } 我试图避免链接程序在名称中添加下划线和/或数字(字节数?)。 我可以不支持dllimport并dllexport使用相同的标头。我不需要有关导出C ++类方法的任何信息,而只希望获得c样式的全局函数。 更新 不包括调用约定(并使用extern "C")会为我提供我喜欢的导出名称,但这意味着什么?是什么默认的调用约定我得到了什么pinvoke(.NET),声明(vb6)并GetProcAddress可以预期?(我猜GetProcAddress这取决于调用者创建的函数指针)。 我希望此DLL在没有头文件的情况下使用,因此我真的不需要花哨的钱就#defines可以使调用者使用该头。 我可以接受的答案是,我必须使用*.def文件。

15
生成唯一的机器ID
我需要编写一个函数,该函数生成的ID对于运行Windows OS的给定计算机是唯一的。 当前,我正在使用WMI查询各种硬件参数,并将它们连接在一起并对其进行哈希处理以得出唯一的ID。我的问题是,我应该使用哪些建议的参数?目前,我正在使用bios \ cpu \ disk数据的组合来生成唯一ID。如果每个指标有多个结果,则使用第一个结果。 但是,我遇到了一个问题,即双重引导进入2个不同Windows操作系统的计算机在每个OS上生成不同的站点代码,理想情况下不会发生这种情况。 作为参考,这些是我当前正在使用的指标: Win32_Processor:UniqueID,ProcessorID,Name,Manufacturer,MaxClockSpeed Win32_BIOS:Manufacturer Win32_BIOS:SMBIOSBIOSVersion,IdentificationCode,SerialNumber,ReleaseDate,Version Win32_DiskDrive:Model, Manufacturer, Signature, TotalHeads Win32_BaseBoard:Model, Manufacturer, Name, SerialNumber Win32_VideoController:DriverVersion, Name

6
什么是消息泵?
在此线程(大约一年前发布)中,讨论了在非交互式会话中运行Word可能带来的问题。给出的(非常强烈的)建议不这样做。在一篇文章中说:“所有Office API都假设您正在桌面上的交互式会话中运行Office,并带有监视器,键盘和鼠标,最重要的是,消息泵。” 我不确定那是什么。(我使用C#编程仅一年左右;我的其他编程经验主要是使用ColdFusion。) 更新: 我的程序通过大量的RTF文件运行,以提取用于构造医疗报告编号的两条信息。我没有尝试弄清楚RTF中的格式化指令如何工作,而是决定只在Word中打开它们,然后从那里拉出文本(实际上没有启动GUI)。有时,该程序在处理一个文件的过程中出现了打ic,并在该文件上保留了一个Word线程打开(我仍然必须弄清楚如何关闭该文件)。当我重新运行该程序时,我当然会收到一条通知,指出有一个线程正在使用该文件,我是否想打开一个只读副本?当我说“是”时,Word GUI突然从任何地方弹出并开始处理文件。我想知道为什么会这样。

9
如何使用透明背景制作OpenGL渲染上下文?
渲染上下文通常在背景上具有纯色(黑色或其他颜色,请参见下图): 我想知道是否可以设置一个没有装饰且具有透明背景的窗口,同时允许我在其上渲染OpenGL。 这会使人产生三角形在屏幕上浮动的错觉。透明的背景应该可以让您看到桌面或背后的其他应用程序。 您能举例说明源代码吗? 平台:Windows(仅Win32)

10
gettimeofday()是否保证具有微秒级的分辨率?
我正在将一个最初为Win32 API编写的游戏移植到Linux(很好,是将Win32端口的OS X端口移植到Linux)。 QueryPerformanceCounter自程序启动以来,我已经通过提供uSeconds来实现: BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount) { gettimeofday(&currentTimeVal, NULL); performanceCount->QuadPart = (currentTimeVal.tv_sec - startTimeVal.tv_sec); performanceCount->QuadPart *= (1000 * 1000); performanceCount->QuadPart += (currentTimeVal.tv_usec - startTimeVal.tv_usec); return true; } 再加上QueryPerformanceFrequency()恒定的1000000作为频率,可以在我的机器上很好地工作,并为我提供了一个uSeconds自程序启动以来包含的64位变量。 这是便携式的吗?我不想发现以某种方式或类似方式编译内核时,它的工作原理有所不同。我可以将其移植到Linux以外的其他软件上,这很好。


3
LPCWSTR代表什么?应该如何处理?
首先,到底是什么?我猜它是一个指针(LPC表示长指针常量),但是“ W”是什么意思?是指向字符串的特定指针还是指向特定字符串的指针?例如,我想关闭一个名为“ TestWindow”的窗口。 HWND g_hTest; LPCWSTR a; *a = ("TestWindow"); g_hTest = FindWindowEx(NULL, NULL, NULL, a); DestroyWindow(g_hTest); 该代码是非法的,并且由于const char [6]无法转换为CONST WCHAR而无法使用。我一点都不明白。我想对所有这些LPCWSTR,LPCSTR,LPSTR有一个清晰的了解。我试图找到一些东西,但是我感到更加困惑。在msdn站点FindWindowEx上声明为 HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow ); 所以最后一个参数是LPCSTR,编译器需要LPCWSTR。请帮忙。
91 c++  winapi  lpcstr 



8
如何从Windows注册表读取值
给定某个注册表值的键(例如HKEY_LOCAL_MACHINE \ blah \ blah \ blah \ foo),我该如何: 安全地确定存在这样的密钥。 以编程方式(即使用代码)获得其价值。 我绝对不打算将任何内容写回注册表(如果可以的话,在我的职业生涯中)。因此,如果我不正确地写注册表,我们可以跳过关于体内每个分子以光速爆炸的讲座。 首选C ++的答案,但大多数情况下,您只需要知道特殊的Windows API咒语即可获得该价值。
89 c++  windows  winapi  registry 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.