Articles of winapi

如何在.NET 3.5中获取CSIDL_COMMON_DOCUMENTS的path?

我正在为安装程序进行自定义操作。 它必须读取存储在CSIDL_COMMON_DOCUMENTS的文件以确定安装目录。 (我希望在自定义操作中更改安装目录不会成为问题,但这是一个不同的问题。) 我看到.NET 4将CommonDocuments添加到Environment.SpecialFolder 。 不幸的是,我被困在.NET 3.5中。 接下来最简单的方法是什么?

从内存stream复制时显示Windows文件复制对话框?

我的应用程序将从MemoryStream将文件写入磁盘。 我不想创build自己的进度对话框,而是喜欢使用现有的窗口function,例如SHFileOperation Win32 API,它显示带有animation和进度条的标准文件复制对话框。 但是,这个特定的API要求指定源文件的path。 是否有可能以某种方式使用此API的MemoryStream还是有另一个API,我可以使用?

与Windows XP / win32串行通信的基本示例

我正在使用需要通过串行通信的外设。 我可以使用超级terminal发送它的命令,但现在我需要编写程序,让我没有超级terminal。 有人可以指向我的网站和/或向我展示一个样本你好世界程序,让我开始? 我已经通过许多网站search,让我无法编译/古代VC6代码。

我可以停止请求UAC提升的可执行文件吗?

我有一个安装程序,我想从脚本运行。 安装程序请求UAC提升,但不需要提升,因为我正在安装到用户目录。 有没有办法运行安装程序,以便它不要求UAC提升? 脚本是用Python编写的,所以我可以通过ctypes访问Windows API。 更改安装程序不是一个选项。

有什么API函数可以在安装任何挂起的更新时closuresWindows?

我知道简单地closuresWindows的ExitWindowsEx() API函数。 但据我所知,你不能让Windows安装任何挂起的更新。 是否有任何API支持安装任何挂起的更新(在标准的蓝屏,其中指出“ n个m更新已经安装 – 请不要closures或拔下电脑,Windows将自行closures ”),然后closuresWindows(相当于点击Windows用户界面的“安装更新和关机”菜单选项)? (操作系统版本:Windows XP及更高版本)

在C#中查看非托pipedll上的导出表

我目前正在尝试创build一个C#应用程序,这将允许我从非托pipeDLL查看导出表。 我的问题是,一旦我有了所需的指针,我就不知道如何循环API提供给我的信息。 这是我现在所拥有的: using System; using System.ComponentModel; using System.Runtime.InteropServices; namespace DLLMapper { class DLLExportViewer { #region APIs [DllImport("imagehlp.dll")] public static extern Boolean MapAndLoad(String ImageName, String DllPath, ref LOADED_IMAGE LoadedImage, Boolean DotDll, Boolean ReadOnly); [DllImport("imagehlp.dll")] public static extern Boolean UnMapAndLoad(ref LOADED_IMAGE LoadedImage); [DllImport("dbghelp.dll")] public static extern IntPtr ImageDirectoryEntryToData(IntPtr Base, Boolean MappedAsImage, UInt16 DirectoryEntry, ref Int32 Size); […]

确定文件是否是连接(在Windows中)?

我一直在四处搜寻,试图find一种方法来确定一个文件是否是一个交叉点,并没有find任何满意的答案。 我尝试的第一件事是: Files.isSymbolicLink(aPath) 它只检测符号链接,而不是在Windows中被称为连接点的文件。 也尝试了这里提出的解决scheme(使用JNA库): Stackoverflow的问题(3249117) ,但它从来没有返回真正的任何文件,我知道是路口。 我发现确定哪些文件是连接点的唯一方法是在Windows命令提示符下运行以下命令: DIR /S /A:L 在我的计算机上,它返回66个文件夹,而Files.isSymbolicLink(aPath)只返回2.所以我想我可以find一种方法来利用这个,但我不认为这将是非常有效的遍历文件树。 有没有办法做到这一点使用标准的Java库,或者替代JNA?

我们如何轮询堆栈状态 – 未使用(可用)的内存

我们如何获得这些信息? 我想这是依赖于操作系统,我正在运行Windows,所以我的问题是指Windows API。 有什么function可以为我们做 – 为调用线程获取剩余的堆栈内存? 或者,如果我们能够找出以下细节,我们将能够自行计算: 获取线程堆栈基地址 。 必须有一些函数把一个线程标识符作为参数,并返回一些关于它的信息(比如…栈基地址?) 获取线程堆栈大小 。 如果线程是由我们启动的,我们可以知道它(因为我们在调用CreateThread时指定了它)。 但是,如果它是主程序,由操作系统为我们的程序启动,或者其他任何线程我们没有明确启动,我们如何find它? 获取当前的堆栈指针 。 那么,这很容易。 我们可以用esp来检查,也可以取一个局部variables的地址来得到一个很近的位置。 这是为了教育目的,但我想它可以用来阻止recursionalgorithm导致堆栈溢出 – 而不是使用任何最大深度限制function。

捕获窗口像素,而不pipe它的z顺序

我其实是试图读取被别人隐藏的窗口上的特定像素。 我想从GDI库中使用GetPixel函数,但它似乎只适用于全局设备上下文。 我无法从特定的窗口读取像素,我不明白为什么..我发现这篇文章使用PrintWindow函数将特定的窗口内容复制到可以读取的临时设备上下文中。 但我不能重现它。 编辑 谢谢大家,我的问题解决了:) 即使窗口被隐藏,该脚本也会为您提供选定窗口上指针的RGB颜色。 请注意,此程序必须以pipe理员权限启动才能获取以pipe理员权限启动的进程的像素。 #define STRICT #define WINVER 0x0501 #define _WIN32_WINNT 0x0501 // 0x0501 for PrintWindow function // You must be at least running Windows XP // See http://msdn.microsoft.com/en-us/library/6sehtctf.aspx #include <stdio.h> #include <string.h> #include <windows.h> #define WINDOW_LIST_LIMIT 32 #define WINDOW_NAME_LIMIT 1024 void FatalError(char* error) { printf("%s", error); exit(-1); } HWND window_list[WINDOW_LIST_LIMIT]; […]

使用WH_KEYBOARD的SetWindowsHookEx不适用于我,我错了什么?

#include <iostream> #include <fstream> #define _WIN32_WINNT 0x501 #include <windows.h> using namespace std; HHOOK hKeyboardHook = 0; LRESULT CALLBACK KeyboardCallback(int code,WPARAM wParam,LPARAM lParam) { cout << "a key was pressed" << endl; ofstream myfile; myfile.open ("hookcheck.txt", ios::ate | ios::app); myfile << "a key was pressed\n"; myfile.close(); return CallNextHookEx(hKeyboardHook,code,wParam,lParam); } int main() { HWND consoleWindow = GetConsoleWindow(); […]