Articles of winapi

如何清除进程命令行?

我想从内部清除我的进程的命令行。 例如,在任务pipe理器/进程资源pipe理器中查看我的进程时,命令行条目将为空。 我想在当前正在运行的进程中执行此操作,而不是在可能的情况下重新启动进程。

获取窗口句柄的WNDPROC

存在任何Windows API函数来检索Windows句柄的WNDPROC ? 提前致谢。

PATH_NOT_FOUND和NAME_NOT_FOUND有什么区别

在Win32层,我们经常遇到ERROR_PATH_NOT_FOUND , ERROR_NAME_NOT_FOUND 。 WinAPI(eg CreateFileW, RemoveDirectoryW)何时WinAPI(eg CreateFileW, RemoveDirectoryW)返回这些值? 有什么区别? 如果我写一个文件系统驱动程序,我什么时候设置STATUS_OBJECT_PATH_NOT_FOUND或者STATUS_OBJECT_NAME_NOT_FOUND ? 你如何确定? 我很困惑。 有谁能清楚解释? 还是有任何文件解释这个? 我找不到他们。 提前致谢。

将unicodestring存储在ini文件中时是否会出现与编码相关的问题?

目前已经有关于unicode和ini文件的问题,但是其中很多是针对特定领域的。 所以我不确定这个答案是否适用于一般情况。 动机 :我想使用ini文件来存储简单的数据,如一些数字和一些string。 string由用户提供(通过GUIinput)。 该软件可以运行在世界任何地方,任何语言都可以使用。 这些文件也可以在用户之间共享(这样他们可以写在一个系统上,在另一个系统上阅读等等)。 我认为在使用GetPrivateProfileStringW和WritePrivateProfileStringW (我的目标系统> = Windows XP)时,ini文件中的unicode应该没有问题。 但后来我偶然发现了这个问题的答案。 引用: WritePrivateProfileStringW函数将使用传统系统编码(例如,日文系统上的Shift-JIS)编写INI文件,因为它是传统的支持function。 如果你想有一个完全支持Unicode的INI文件,你将需要使用一个外部库。 我现在不确定 – 我必须担心吗? 或者我可以继续使用ini文件? 编辑: 似乎避免随机编码的关键可能是准备一个包含BOM的空文件,然后使用这个文件。 有没有人(正面/负面)的经验呢?

如何创build一个更低的完整性级别(IL)的新stream程?

看起来,从Windows Vista开始,具有较低完整性级别(IL)的进程不能将消息发送到具有较高完整性级别的进程。 这从安全的angular度来看是有道理的,但是它打破了我们的一些进程间通信。 我们有遗留的应用程序(进程A),不幸的是必须以提升的“pipe理员”权限运行(通过将其快捷方式设置为始终以pipe理员身份运行来完成)。 有时它需要实例化一个单独的应用程序(过程B)。 因此,进程Binheritance了与进程A相同的提升权限(和IL)。存在这个问题。 可能还有其他独立的进程B实例没有提升权限,所有这些进程B实例都需要能够相互发送消息。 如果进程B的一个实例提升,另一个则不提升,这显然会失败。 我知道我们可以使用ChangeWindowMessageFilter API方法在UIPI消息filter中打开漏洞,但这看起来不是理想的解决scheme。 相反,我更愿意让Process A产生具有减less权限的进程B,特别是为了能够与其他进程B实例进行通信。 我想默认情况下,其他进程B实例运行在“中”IL,所以我想过程A产生与这个相同的IL过程B实例。 我的search引导我到CreateProcessAsUser和CreateRestrictedToken API方法,但尽pipe有这个文档,所有的令牌和安全描述符等方面仍然让我感到困惑。 我也遇到了一些线程( 在winapi中运行一个具有最低权限的进程, 在Windows上运行C ++的权限 ),但是我找不到任何有代码的好例子。 任何人都可以提供一些简单但“正确”的代码,这将帮助我使用适当的Windows IL产卵subprocess? 具体来说,我想要一个如何采取现有的过程A令牌的例子,并将其转换,使其具有减less的权限(我敢肯定,我可以找出其余的)。 我还不清楚在修改之前是否需要复制进程的标记。

如何为Win32应用程序启用工具栏的现代外观?

最近我开始学习基于Win32 API的GUI编程。 当我将工具栏控件(从comctl32.lib )添加到我的简单应用程序时,我发现它看起来很平坦,而菜单栏有更多“Windows 7友好”的3D外观和感觉(顶部为白色光晕,上部为垂直灰度梯度)。 差异使它看起来有线。 但是,我发现许多其他应用程序对于菜单栏和工具栏都有一致的外观和感觉。 例如。 记事本++和记事本2 。 我读过一些官方文档,并尝试了解决scheme,例如视觉样式概述 , 启用视觉样式 ,但是,它只启用平面button样式(与旧的Win98实体button样式相比)。 这与我在第一张照片中得到的风格没有任何区别。 我试图阅读Notepad ++的源代码。 findToolBar.cpp,并相应地对我的代码进行了一些更改,但没有任何更改。 我想我是在代码库中输了。 这里是我调用InitCommonControlsEx和创buildToolBar的代码。 // in WinMain INITCOMMONCONTROLSEX icce; icce.dwSize = sizeof(INITCOMMONCONTROLSEX); icce.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES | ICC_USEREX_CLASSES; InitCommonControlsEx(&icce); // called in WM_CREATE handler, hwnd is the handle of the main window VOID BuildToolBar(HWND hwnd) { HWND hTool; […]

如何在窗口上设置HICON(多种尺寸的.ICO)?

我想定义一个Win32窗口的应用程序图标,例如,通过使用GCL_HICON调用GCL_HICON并传递一个图标的句柄(参见MSDN上的SetClassLong函数 )。 这很好,但我还没有想出我应该如何加载一个图标(从一个ICO文件),以保持所有可用的大小(例如16×16,32×32,48×48和全尺寸的PNG图标)。 当我通过LoadImage将图标文件LoadImage到内存中以获取HICON ,我必须指定我想要的大小(请参阅我对相关问题的回复 )。 我的ICO文件包含一个小尺寸的图像,它应该被用作窗口图标(标题栏的左上angular),并且devise得非常清晰,但是也应该在Alt-Tab对话框中显示更大的变体,但是… 加载16×16图标在标题栏中显示正确的图标,但是 – 当然 – 当我按Alt-Tab时,它是一个难看的拉伸版本。 而在任务栏中显示的那个也不是很漂亮。 加载48×48图标时,按Alt-Tab时会显示一个漂亮的图标,但标题栏中显示的图标是模糊的,因为它是48×48图标的缩小版本。 有什么办法告诉Windows,我的Windows有一个多尺寸的图标? 有没有我错过的一些明显的API?

当使用Winsock读取所有信息时,结束“recv()”循环

我在winsock的recv()循环中遇到问题。 我试图在iResult == 0时终止循环,但是,循环仅在套接字closures时结束。 它似乎挂在最后recv()哪里iResult将等于0.所以任何想法如何有效地终止循环? 我的最终目标(无论是否iResult == 0,也许我是这样做的错误方式)是当所有发送的信息被读取时停止循环。 这是循环。 do { iResult = recv(socket, recvbuf, BUFLEN-1, 0); if(iResult > 0){ // Null byte 🙂 // Remove that garbage >:( recvbuf[iResult] = '\0'; printf("Recvbuf: %s\n\n\niResult: %d\n",recvbuf,iResult); continue; // working properly } else if(iResult == 0) // Connection closed properly break; else { printf("ERROR! %ld",WSAGetLastError()); break; } […]

使用Windows IStream下载文件

我正在实现将一个虚拟文件从一个网站拖出,并通过一个ActiveX控件拖到桌面上。 如何在我的http url上创build一个IStream ,所以Windows可以执行这个drop? 我正在看的例子使用SHCreateStreamOnFile复制本地文件; 对于其他types的stream,例如http文件下载,必须有类似的function。

Windows UAC对话框

我有一个没有资源的应用程序(根本就没有UAC清单)。 此应用程序使用CopyFile将其自身安装到appdata / roaming文件夹。 它还设置自动启动,以便在每次启动时自动启动。 现在,随着电脑的每一个开始,UAC对话框popup并说,应用程序不会改变电脑。 如果它位于appdata中,它也在图标上有盾牌标志。 我怎样才能删除图标中的对话框/屏蔽? Windows是否检测到复制文件API并自动设置它? 感谢您的回答。