Articles of winapi

用Win API设置壁纸

我想以编程方式设置壁纸。 这是迄今为止唯一的解决scheme: SystemParametersInfoW(SPI_SETDESKWALLPAPER, 1, (void*)wallpaperImageFilePath.utf16(), SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); 我的问题是:如何告诉Windows我想壁纸图像居中(不resize)? 上面的解决scheme总是将图像设置为拉伸模式。 根据MSDN, SPI_SETDESKWALLPAPER没有标志。

如何防止用户查杀C#应用

如果您在pipe理员想要结束进程时看到ESET Smart Security或Deep Freeze,则会看到一个错误,指出“拒绝访问” 我如何保护我的C#应用​​程序免于有人杀死它

本地化的指数表示法?

我试图将数字转换成本地化的string。 对于整数和金钱的价值很简单,因为string只是一系列的数字和数字分组分隔符。 例如: 12 345 678 901 (保加利亚语) 12.345.678.901 (加泰罗尼亚语) 12,345,678,901 (英语) 12,34,56,78,901 (印地语) 12.345.678.901 (弗里斯兰语) 12?345?678?901 (普什图语) 12'345'678'901 (德语) 我使用Windows GetNumberFormat函数格式整数(和GetCurrencyFormat格式货币值)。 但有些数字不能用固定的符号来合理地表示,需要科学记数法 : 6.0221417930×10 23 或更具体地E符号 : 6.0221417930E23 我怎样才能得到科学记数法的本地化版本? 我想我可以使用本地化的数字构造它: 6.0221417930E23 6,0221417930E23 6.0221417930e23 6·0221417930E23 6·0221417930e23 6,0221417930e23 6,,0221417930e23 6.0221417930E+23 6,0221417930E+23 6.0221417930e+23 6,0221417930e+23 6·0221417930E+23 6·0221417930e+23 6,,0221417930e+23 6.0221417930E23 6,0221417930E23 6.0221417930e23 6,0221417930e23 6·0221417930E23 6·0221417930e23 6,,0221417930e23 6.0221417930X10^23 6,0221417930X10^23 6.0221417930×10^23 […]

如何强制Windows清除所有磁盘读取caching数据?

可能重复: 如何使文件系统caching失效? 我正在写一个磁盘密集的win32程序。 第一次运行时,运行速度比使用FindFirstFile()/ FindNextFile()扫描用户的文件夹要慢很多。 如何在不重新启动的情况下重复第一次演奏? 有没有办法强制系统丢弃磁盘caching中的所有内容? 我知道,如果我正在读取单个文件,则可以通过将FILE_FLAG_NO_BUFFERING标志传递给CreateFile()的调用来禁用caching。 但是在search文件时这样做似乎不可能。

从应用程序中获取应用程序版本

有没有一种简单的方法在运行时从资源文件中获取应用程序版本信息? 实际上,我希望能够在运行时显示“版本XYZ”,而不必在单独的variables某处保留与我的ProductVersion和FileVersion同步的variables。 澄清:是的,这是一个标准的C ++ Windows项目。 我知道的GetFileVersionInfo方法,但它似乎很难从内存中的版本打开二进制只是为了查询版本信息 – 我敢肯定我失去了一些明显的东西:-)

检测Windows(IE)代理设置更改

我使用WinHttpGetIEProxyConfigForCurrentUser和朋友收集当前的代理信息,当我的应用程序启动时,在每个请求看起来会大大降低性能,因为它坐几秒钟收集代理数据。 有没有一种方法来检测Windows代理设置何时更改,以便我可以caching信息,直到它更改? 谢谢,J

HPET是否可以在Windows中直接访问?

我想使用高性能事件计时器(HPET)来进行性能分析工具,以便快速进行非常高精度的测量。 timeGetTime在1ms时不能提供足够的分辨率,QueryPerformanceCounter每次读取都比我想要的慢得多。 我在研究这个问题的时候遇到了HPET,但是我看不到有什么样的实际情况。 所以我可以直接使用它(汇编是否正常),还是必须依赖Win32 API中内置的多媒体/高性能计时工具?

只响应第一个WM_KEYDOWN通知?

Win32应用程序如何才能响应第一个WM_KEYDOWN通知? MSDN文档要求位30“指定以前的密钥状态,如果在发送消息之前密钥已closures,则值为1,如果密钥已closures,则为零。 但是在我的WndProc中,位30总是0。 case WM_KEYDOWN: // ToDo – stop multiple notifications for repeating keys printf("WM_KEYDOWN %i %i", wParam, lParam & 30); return 0; lParam&30是不是要问这个问题? 我在做别的事吗?

如何从某个驱动器打开文件夹closuresWindows资源pipe理器窗口

我在写一个小应用程序,允许用户popup(或安全删除)USB驱动器。 除了在Windows资源pipe理器中打开USB驱动器(或多个文件夹)上的文件夹时,我的应用程序工作正常。 在这种情况下popupfunction失败,因为驱动器似乎被locking。 所以我很好奇,因为用户通过我的应用程序发出一个命令来popupUSB驱动器,有没有办法让ExplorerclosuresUSB驱动器打开的窗口? PS。 请注意,我不想closures属于Windows资源pipe理器的所有进程,但仅closures在特定驱动器上打开文件夹的进程。

如何使用InjectTouchInput特定的窗口?

我试图使用InjectTouchInput发送触摸事件到特定的窗口。 POINTER_INFO结构有hwndTarget字段,据我hwndTarget ,它指定目标窗口发送input。 但是当我尝试使用这个参数时,注入失败,代码为ERROR_INVALID_PARAMETER (87) 码: void MakePointerTouchInfo(POINTER_TOUCH_INFO& contact, int x, int y, int radius, int id, int orientation = 90, int pressure = 32000) { ZeroMemory(&contact, sizeof(POINTER_TOUCH_INFO)); contact.pointerInfo.pointerType = PT_TOUCH; contact.pointerInfo.ptPixelLocation.x = x; contact.pointerInfo.ptPixelLocation.y = y; contact.pointerInfo.pointerId = id; contact.touchFlags = TOUCH_FLAG_NONE; contact.pointerInfo.pointerFlags = POINTER_FLAG_DOWN | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT; contact.touchMask = TOUCH_MASK_NONE; } POINTER_TOUCH_INFO […]