Articles of winapi

如何将UNC转换为本地path

我正在寻找一种方法来获得给定的UNCpath相应的本地path。 微软为此提供了一个小型库CheckLCL 。 所有Windows版本都不支持此库。 有没有人知道这个开源的方法? 还有MAPI函数ScLocalPathFromUNC ,但不知道它是否适用于所有平台。

处理消息太慢,导致一个干扰,无响应的用户界面 – 我怎样才能使用多个线程来缓解呢?

我无法保持我的应用程序响应用户操作。 因此,我想在多个线程之间拆分消息处理。 我可以简单地创build几个线程,从它们中的同一个消息队列中读取,并且让每个消息处理哪个消息? 如果是这样,那怎么能做到呢? 如果不是的话,你能提出解决这个问题的另一种方法吗?

使用系统托盘图标创build一个后台进程

我试图做一个Windows应用程序,在后台检查一些事情,并通过系统托盘图标通知用户。 该应用程序使用Not managed C ++制作,没有选项切换到.net或Java。 如果用户想要停止应用程序,他将使用托盘图标。 该应用程序不能是一个服务,因为系统侧,因为它必须运行,而无需在用户计算机上安装任何东西(这是一个单一的.exe) 使用典型的Win32程序结构(RegisterClass,WndProc等)我不知道如何放置一些代码来运行窗口消息循环。 也许我必须使用CreateProcess()或CreateThread()? 这是处理multithreading环境的正确方法吗? 如果我必须使用CreateProcess()/ CreateThread(),我怎么可以在两个线程之间交stream? 谢谢 ;)

如何调用shell的“文件复制对话框”来报告在Win32中复制的进度?

我怎样才能通过调用Windows“复制文件”对话框来复制文件呢? SHFileOperation看起来像一个选项,但它在我们的过程中。 顺便说一下, SHFileOperation是否有GUI界面? 它是否与Windows复制对话框完全相同?

如何获得Windows启动时间?

我怎样才能获得一些WinAPI函数在C + +的Windows启动时间? 我目前使用命令“systeminfo”,但我正在寻找一个更合适的解决scheme。

UAC打开时没有pipe理员权限,程序是否可以写入磁盘的根目录?

如果我不是pipe理员,并启动一个程序写入C:\某些文本文件 – 我需要pipe理员权限…在Windows 7或Vista中? 我看到在XP中没有任何问题可以写入任何文件夹,包括system32 – 但我不确定如果一个程序在.NET中能够做到这一点,没有pipe理员权限。

我怎样才能让EnumWindows列出所有的窗口?

我假设,我问的实际上应该是默认的,但我遇到了一些我不明白的行为。 #include "stdafx.h" using namespace std; BOOL CALLBACK enumWindowsProc( __in HWND hWnd, __in LPARAM lParam ) { if( !::IsIconic( hWnd ) ) { return TRUE; } int length = ::GetWindowTextLength( hWnd ); if( 0 == length ) return TRUE; TCHAR* buffer; buffer = new TCHAR[ length + 1 ]; memset( buffer, 0, ( length + […]

捕获隐藏桌面的屏幕截图

我正在Windows上使用虚拟桌面使用简单的应用程序,我用C ++编码自己,我想知道是否有方法来捕获次要/隐藏桌面的屏幕截图? 我知道我可以做SwitchDesktop – >截图截图 – > SwitchDesktop,但它听起来不是很好的解决scheme…. 也许我在隐藏的桌面上运行一些窗口,以获得其hwnd和有人用它来捕捉整个屏幕? 我运行Spy ++,但似乎没有find不属于当前活动桌面的窗口。 提前致谢。

在FAT-32的Unicode文件名?

据我所知 – NTFS支持Unicode文件名(UTF-16作为微软的声明?)。 但是官方的MSDN文档对于在FAT-32上使用什么代码页来存储文件名(文件path)非常含糊。 在这里它说, OEM代码页 (我假设CP437)是用来存储文件名: http : //msdn.microsoft.com/en-us/library/windows/desktop/dd317748.aspx 但是,事实certificate,可以有不同的OEM代码页与CP437是其中之一: http : //msdn.microsoft.com/en-us/library/windows/desktop/dd317752.aspx 而且我们现在所有的像mount这样的工具都支持更多不同的FAT代码页,而不仅仅是OEM代码页。 那么FAT-32文件名的实际cdepage是什么? 这取决于FAT卷创build时的系统代码页。 FAT可以支持像UTF-16这样的真正的双字节字符集代码页吗? 或者像UTF-8这样的多字节字符集编码是限制吗? 更具体的问题: 当我使用CreateFileW函数(如MSDN所述,使用UTF-16作为文件名代码页)在FAT-32卷上创build文件时会发生什么?

Spy ++如何构build其进程列表?

TL; DR – Spy ++工具如何真正构build其进程列表? 阶段 我们有一个MFC桌面应用程序(在Windows XP上运行)挂起来,它不会对任何用户input作出反应。 但是,通过alt-tab切换到它时重绘。 (它接收WM_SETFOCUS , WM_ACTIVATE等,它显然没有收到任何鼠标或键盘消息。) 由于该应用程序悬挂在某种程度上,我们拉了一些进程垃圾,但目前为止这些帮助并不大。 input: 间谍++ 我们使用Spy ++来查找上面给出的有关此应用程序似乎正在处理的窗口消息的信息。 我们通过打开Windows视图来完成 并select我们的应用程序窗口,并在消息属性中selectWindows of same process和Messages to View : Select All 。 但是,我们首先尝试通过打开“ 进程视图”来查看此进程的所有消息 Spy ++和我们的应用程序没有显示在这个进程列表中 。 在应用程序正常运行的另一台PC上进行交叉检查,该进程通常也会显示在Spy ++的进程列表中。 从Spy ++的进程视图中没有显示这个进程的事实可以推断出行为不正常的应用程序的任何事情 ,但应用程序的主窗口显示在Windows视图。 为什么在Spy ++的进程视图中有一个不可见的主窗口进程? 该进程列在任务pipe理器和Visual Studio 2005的附加进程窗口中。所以这些工具明显使用不同的方法来列出进程比Spy ++ …? 该应用程序当前挂起的系统是Windows XP SP2系统,我们使用了Visual Studio 2005附带的Spy ++ Utility。 这种行为偶尔会重复发生,但只有在应用程序运行了几天之后!