Articles of winapi

什么是Windows相当于sys / select.h和termios.h中定义的function

我在linux上有一个应用程序,编译成功。 我想在Windows中运行相同的程序。 但编译产生与头文件相关的以下错误。 找不到sys / select.h 找不到termios.h 我怎样才能解决这个问题?

如何从Windowsregistry中读取值

给定一些registry值的关键(例如HKEY_LOCAL_MACHINE \ blah \ blah \ blah \ foo)我怎么能: 安全地确定这样的密钥存在。 以编程方式(即用代码)得到它的价值。 我绝对不打算把任何东西写回registry(在我的职业生涯期间,如果我可以帮助它的话)。 所以我们可以跳过关于我身体中每个分子以光速爆炸的讲座,如果我不正确地写入registry。 更喜欢C ++中的答案,但大多只需要知道什么特殊的Windows API咒语得到的价值是。

在C:\ ProgramData \中编写特权/所有者问题

正如在C:\ Program Files(x86)\ MyApp \ myapp.cfg中写configuration文件指出的,与pipe理员权限 ,在C:\Program Files (x86)\MyApp\myapp.cfg编写configuration文件不是一个好主意C:\Program Files (x86)\MyApp\myapp.cfg 。 现在,我的软件将其数据保存在%ALLUSERSPROFILE% C:\ProgramData\MyApp\myapp.cfg (例如Win7上的C:\ProgramData\MyApp\myapp.cfg ) [我在Python中使用myfile = open(filename, 'a')来执行此操作。] 我现在遇到关于这个文件的问题: 我用User A安装了软件,然后运行它,然后编写了C:\ProgramData\MyApp\myapp.cfg文件。 然后,我将用户更改为User B ,并再次运行我的软件:现在显示一个错误: User 2无权在C:\ProgramData\MyApp\myapp.cfg ( Permission denied )中C:\ProgramData\MyApp\myapp.cfg 。 为什么? 是不是%ALLUSERSPROFILE%所有用户都可以写的地方? 如何解决这个问题呢 ?

如何将string发送到包括Microsoft Word在内的其他应用程序

我试图做到这一点,但没有得到好的结果。 我使用GetForegroundWindow(),AttachThreadInput(uint,uint,bool)和GetFocus()函数将string发送到另一个窗口。 它适用于记事本,写字板和其他应用程序,但不适用于Microsoft Word。 int foregroundWindowHandle = GetForegroundWindow(); uint remoteThreadId = GetWindowThreadProcessId(foregroundWindowHandle, 0); uint currentThreadId = GetCurrentThreadId(); bool b = AttachThreadInput(remoteThreadId, currentThreadId, true); int focused = GetFocus(); int d = System.Runtime.InteropServices.Marshal.GetLastWin32Error(); b = AttachThreadInput(remoteThreadId, currentThreadId, false); SendMessage(focused , WM_GETTEXT, builder.Capacity, builder); clip = builder.ToString(); //Text operations… SendMessage(focused, WM_SETTEXT, 0, builder); 这是我有的代码,但它不适用于Word。 我知道Word使用自定义控件,但我认为应该有另一种方式来处理这个。 例如:Windows语音识别将文本发送到每个具有焦点的应用程序,即使它是Word。 我不认为他们手动input。 我想使用SendInputs函数,但我不知道如何做到这一点。

如何使用mt.exe将清单添加到可执行文件?

我正在尝试使用Windows SDK中的mt.exe来使用以下命令行将清单添加到没有的可执行文件中: C:\winsdk61>mt.exe -nologo -manifest "r:\shared\hl.exe.manifest" -updateresource:"r:\shared\hl33m.exe;#1" 不幸的是,当我这样做,我得到这个错误: mt.exe : general error c101008c: Failed to read the manifest from the resource of file "r:\shared\hl33m.exe". The specified resource type cannot be found in the image file. 当然,在文件中找不到资源 – 文件没有清单,这就是为什么我要添加一个。 我怎样才能将一个清单附加到一个可执行文件? 难道这不简单吗?

我如何读取subprocess的输出?

我写了一个函数,试图通过pipe道读取subprocess的命令行输出。 这应该是MSDN创buildsubprocess的一个简单的子集与redirect的input和输出文章 ,但我明显犯了某种错误。 下面的ReadFile(…)调用将永远封锁,无论我将它放在WaitForSingleObject(…)调用之前还是之后,该调用都将指示subprocess的结束。 我已阅读所有提示“使用asynchronousReadFile”的答案,如果有人能够给我一些想法如何在pipe道上完成,我愿意接受这个build议。 虽然我不明白为什么这种情况下需要asynchronousI / O。 #include "stdafx.h" #include <string> #include <windows.h> unsigned int launch( const std::string & cmdline ); int _tmain(int argc, _TCHAR* argv[]) { launch( std::string("C:/windows/system32/help.exe") ); return 0; } void print_error( unsigned int err ) { char* msg = NULL; FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), […]

添加支持以在基于对话框的MFC应用程序中打印和预览HTML

我有一个两部分的问题。 我需要添加支持打印到现有的基于对话框的MFC项目。 正在打印的文档由HTML组成。 我知道我可以添加基于HTML的对话框,但是如何添加打印function呢? PS。 我需要这个能够根据程序的需要设置打印页面大小。

如何在另一个应用程序之上绘制graphics/文本

我想增强一个应用程序,但是没有3:e派对API可用。 所以基本上这个想法是在应用程序窗口上绘制graphics/文本。 z顺序,裁剪和将鼠标点击指向我的应用程序或其他应用程序都有问题。 什么是这样做的一个优雅的方式? 示例图像在这里。 这是一个交易应用程序,我的应用程序想要在交易应用程序的窗口中添加额外的信息。 [URL = http://img.zgserver.com/c%23/2wwindowontopp] [/ URL ]

为什么RemoveDirectory函数不能删除最顶层的文件夹?

请参阅:codeguru.com/forum/showthread.php?t=239271 使用下面的function删除文件夹时,除最上面的文件夹外,所有文件夹,子文件夹和文件都将被删除。 说pathc:\folder1\folder2所有东西都被删除,除了folder2 。 BOOL DeleteDirectory(const TCHAR* sPath) { HANDLE hFind; // file handle WIN32_FIND_DATA FindFileData; TCHAR DirPath[MAX_PATH]; TCHAR FileName[MAX_PATH]; _tcscpy(DirPath,sPath); _tcscat(DirPath,_T("\\")); _tcscpy(FileName,sPath); _tcscat(FileName,_T("\\*")); // searching all files int nRet = 0; hFind = FindFirstFile(FileName, &FindFileData); // find the first file if( hFind != INVALID_HANDLE_VALUE ) { do { if( IsDots(FindFileData.cFileName) ) continue; //if not […]

有没有办法来检测系统时钟是否已经在Windows中倒退?

在Windows机器上,有没有办法找出时间是否已经改变了,而不是连续监视WM_TIMECHANGE消息? 例如,我想让我的应用程序在启动时执行的第一件事是查看自上次运行应用程序以来是否改变了时间。 据我所知,看到一个变化的唯一方法是看WM_TIMECHANGE消息,但我只会看到,如果我的应用程序正在运行。