Articles of winapi

如何在运行时加载PathCchCanonicalizeEx?

我正在尝试使用PathCchCanonicalizeEx API,但也使得我的应用程序在Windows 8之前的操作系统上可用。所以我想使用LoadLibrary加载它,但我似乎无法弄清楚它是什么库?

暂时隐藏模式对话框

我有一个模式对话框显示主应用程序窗口设置为所有者(如在dialog.ShowDialog(mainAppWindow) ),我想暂时让用户与主应用程序窗口交互,然后再返回到modal dialog。 我怎样才能做到这一点? 我正在使用Windows窗体。 编辑: AutoCAD做得很好。

只使用GDI()保留图像的红色通道

我最初有一个彩色图像,我通过只复制红色通道,即RGB的前8位(24位),使其灰度。 这是因为一些处理需要图像灰度。处理后,我必须在屏幕上使用GDI显示此图像。 所以我必须把灰色值复制到最终输出的红色chanel。 像setpixel(i,j,RGB(grayvalue,0,0))。 我如何实现这个使用GDI?

什么是最小的Windows(PE)可执行文件?

作为编写编译器的先驱,我试图了解Windows(32位)便携式可执行文件格式。 特别是我希望看到一个裸机可执行文件,除了正确加载,运行和退出之外什么也不做。 我已经尝试编写和编译一个简单的C主函数,它除了生成的.exe是〜22KB,并且包含从KERNEL32.DLL(可能被LIBC用来设置环境,堆等)的许多import。 即使是DOS头可能会更小(它目前打印默认“这个程序不能在DOS模式下运行”)。 什么是最小的Windows 32位可执行文件的结构?

如何在Windows中创build虚拟打印机?

我想为Windows创build一个虚拟打印机驱动程序。 我应该从哪里开始? WDK有一些打印驱动程序的例子,但没有我可以使用的。 MSDN似乎不是很有帮助。 那里有很多虚拟打印机(主要是生成PDF文件),他们是怎么做到的? 任何指向我似乎错过的文档的链接表示赞赏。 谢谢。

检测Windows 10版本

我的目标是检测我的代码中的Windows 10,它必须跨平台以及不同版本的Windows(至less7以上)工作。 Windows提供了IsWindows10OrGreater()来解决这个问题,但是还有另一个问题,这个函数在以前的Windows版本中不存在。 你会发现无数的博客和关于这个问题,以及明显的疯狂,这样的function和冒充和其他人返回一些不同的版本,而不是正确的。 例如,在我的机器上 – 方法IsWindows10OrGreater()不能编译(我将不得不安装Win10 SDK), IsWindowsVersionOrGreater()报告6作为主要版本。 那么有没有一个理智的多版本方式可以解决这个问题?

如何在Windows Vista / 7中以编程方式控制文本input面板(TabTip.exe)

我正在调整一个触摸屏界面的应用程序,我们希望使用Windows Vista / 7中包含的平板电脑文本input面板,特别是它的键盘。 我想显示和隐藏它适合我的应用程序。 基本上我需要ShowKeyboard()和HideKeyboard()函数。 什么是控制这个最好的方法? 我查看了ITextInputPanel API,但是我无法直接用它控制键盘(也许我错过了什么?)。 我也没有尝试将窗口消息发送到窗口。 该应用程序是用C ++ / MFC编写的。 任何指针都非常赞赏。

为什么FormatMessage()无法为WinINet错误find消息?

我正在运行这个testingFormatMessage : LPVOID lpMsgBuf; errCode=12163; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM , 0, errCode, 0, (LPTSTR) &lpMsgBuf, 0, NULL ); 但是,当它返回lpMsgBuf包含NULL …我期待像ERROR_INTERNET_DISCONNECTED 。 什么东西看起来不对? 谢谢。

EnumWindows返回句柄的顺序是否有意义?

从几个初步的testing看来, EnumWindows总是以反向实例顺序返回窗口,即最近实例化的窗口。 这是一个有效的观察? 如果是这样,所有版本的Windows都是真的吗? 这是一个可靠的假设,也就是说,行为logging在某个地方? 上下文: 我正在处理的情况是,我正在触发第三方应用程序来打开几个非模式窗口,我需要发送一些窗口消息到这些窗口打开,但我没有确定的方式确定他们的窗口类别和他们的标题不会有所不同,我也不知道他们的预期坐标。 但是,如果我可以依靠EnumWindows的上述行为,我可以简单地使用由EnumWindows返回的第一个句柄,它们的类和标题符合我的期望。 这仍然留下一些假设的循环漏洞,但我认为这将是足够好的。 不过,欢迎提供其他build议。

Windows在c ++中读取快捷方式文件的目标

如何在Windows上读取快捷方式文件的目标。 尝试使用boost :: read_symlink抛出exception,说“该文件或目录不是重新分析点”消息。 int main(int argc, _TCHAR* argv[]) { try { boost::filesystem::path target = boost::filesystem::read_symlink("c:\\tmp\\blobstore_2.lnk"); cout<<target.string(); } catch(const boost::filesystem::filesystem_error& ex) { cout<<"in catch"<<ex.what(); // prints "the file or directory is not a reparse point" } std::ifstream smbConfStream("c:\\tmp\\sym_file_2.lnk"); string ss((std::istreambuf_iterator<char>(smbConfStream)), std::istreambuf_iterator<char>()); cout <<endl<<" ss: "<<ss; // From the output of the "ss" it looks like […]