Articles of winapi

我怎样才能使一个subprocess窗口在我的过程中出现模态?

我有一个应用程序调用其他实用程序应用程序来为特定设备设置一些设置。 该实用程序应用程序使用ShellExecuteEx进行调用。 为了不使用户混淆,最好将实用程序模式窗口设置为我的主窗口。 如何做到这一点? 我试过的东西: WaitForSingleObjectEx在ShellExecuteEx之后的进程中,INFINITE TIMEOUT – 窗口是模态的,但主应用程序不重画(因为它正在等待单个对象!) WaitForSingleObjectEx在ShellExecuteEx之后的过程中,有一些小超时,然后调用PeekMessage和DispatchMessage – repaint现在可以工作,但是实用程序应用程序不再是“模态”的。 主应用程序响应鼠标点击,button点击等 EnableWindow(FALSE),然后执行方法#2,然后EnableWindow(TRUE) – WORKS !!!,但是在此之后,我的应用程序的z顺序改变了。 (现在在其他窗口下面)。 为什么?!

如何在Windows上限制进程的CPU使用率? (需要代码,而不是应用程序)

有一些程序能够限制Windows中进程的CPU使用率。 例如BES和ThreadMaster 。 我需要编写自己的程序来完成与这些程序相同的function,但具有不同的configurationfunction。 有谁知道一个进程的CPU节stream是如何完成的(代码)? 我不是在谈论设置进程的优先级,而是如何将CPU使用率限制在例如15%,即使没有其他进程争夺CPU时间。 更新:我需要能够扼杀已经运行的任何进程,并且我没有源代码访问权限。

GetDC()和BeginPaint()之间的区别

我正在使用Win32 UI。 我想知道GetDC和BeginPaint之间的区别。 何时使用哪个API以及何时不使用哪个API。

有没有办法在文件系统上伪造文件或写一个文件只能看到我的EXE文件

好吧,我写和使用Adobe ActiveX控件来显示PDF文件的应用程序。 Adobe ActiveX控件仅从文件系统加载文件。 所以我只需要提供一个文件path到这个控制。 问题是我不想将PDF文件存储在文件系统上。 活动临时! 我不想将我的PDF文件只存储在内存中 ,我想使用Adobe ActiveX控件。 所以我nead: 1)在文件系统上伪造文件的一种方法。 所以这个控件会“认为”有一个文件,但会从内存中加载它 2)在文件系统上创build文件的方法,只有一个应用程序“可见”,所以我的PDF控件可以加载它,其他用户甚至不会看到它。 3)别的东西 PS:我不是要“完成我的家庭工作”,我只是问 – 有没有办法做到这一点?

是否有可能跟踪进程之间的PostMessage?

我们有一个系统,通常有两个进程在同一个系统上运行。 一个进程处理的GUI和其他运行像服务(虽然由于历史原因,这不是一个服务,只是一个exe没有可见的窗口)。 这两个进程主要通过注册消息asynchronous进行IPC – 即我们在两个进程中使用RegisterWindowMessage()来定义一组大量消息,这些消息有效地形成了API到服务器进程。 我编写了一个“免提”监视应用程序,使用SetWindowsHookEx()来监视和显示两个进程的消息队列,并提供API的使用方式以及如何将通知传播到GUI进程的某种级别的解码(每个窗口可以直接订阅来自服务器的通知)。 所以,在两个方向都有大量的消息,所以我有过滤和总结计数等,所以我可以专注于特定的活动。 所有这些都可以在不影响实时代码的情况下完成,这很好。 这一切运行良好,但是现在能够“标记”源自GUI的消息是非常有用的,所以我可以在服务器处理它时跟踪相同的消息。 这对于debugging和诊断系统问题将是非常有用的,但是我不能find一个干净的方式(实际上我找不到任何方法!),而不用为我们的注册消息API添加这样的支持,这将是很多而且涉及到的风险远远超过了我现在所熟悉的风险。 由于服务器预先处理了一些消息,然后执行PostMessage()来执行操作,所以原始消息可能会“丢失”,这变得更加复杂了。 有没有人在这里解决这类问题? 如果是这样,你可以给我一些指针? 如果没有,那么是否有任何logging或没有logging的方法来将一小块数据添加到Windows消息并稍后检索? 我看了SetMessageExtraInfo()但似乎是每队列,而不是每个消息。

ULARGE_INTEGER联盟的要点是什么?

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383742%28v=vs.85%29.aspx 它们应该像这样使用,在LowPart和HighPart上设置两个32位值,然后在QuadPart上执行算术运算。 int a,b,c; ULARGE_INTEGER u; … u.LowPart = a; u.HighPart = b; u.QuadPart += c; 所以如果你打算在QuadPart(64位)上执行算术,那么你需要一个64位的处理器,对吧? 那么整个问题是什么呢? 为什么不直接将值分配给QuadPart?

从进程ID获取进程可执行文件的名称

我目前正在试图获得我的pid程序列表的名称。 该程序以pipe理员身份运行,但GetModuleFileNameEx失败,错误代码为5。 我用OpenProcess(PROCESS_TERMINATE,PROCESS_QUERY_INFORMATION)打开程序,并启用了SE_DEBUG_PRIVILEGE 。

将GetClassInfo从HINSTANCE调用到外部窗口是不恰当的?

作为一名前锋,我对windows API非常不熟悉。 我试图了解有关不同窗口的信息,所以我在ATOM从Windows窗口,我试图调用GetClassInfo ,但它每次我打电话时失败。 我正在试图查看一个Untitled – Notepad窗口,我打开了一边。 这是我正在使用的代码,我不知道是否不正确调用从我没有真正拥有的ATOM的GetClassInfo,或者如果有其他事情正在进行。 我只是想读出有关窗口属性的信息。 这里是我现在的代码: #include <iostream> #include <string> #include <Windows.h> int main(int argc, _TCHAR* argv[]) { char* window_name = "Untitled – Notepad"; unsigned int window_name_length = strlen(window_name) + 1; wchar_t* transformed_window_name = new wchar_t[window_name_length]; unsigned int number_of_characters_transformed; mbstowcs_s(&number_of_characters_transformed, transformed_window_name, window_name_length, window_name, window_name_length); HWND handle_to_window = FindWindow(NULL, transformed_window_name); WINDOWINFO window_info; […]

Windows API DLL文件的许可证文件

我的朋友目前正在准备分发他的软件,并希望清理他使用的软件的许可证。 策略是他收集所有提供许可文本的文件。 他完成了所有“显而易见的”许可证的收集,例如他使用的Qt库的Qt许可证。 但是他也使用了Windows附带的一些Windows DLL,比如kernel32.dll和advapi32.dll 。 他在哪里可以find许可证文件,以便他可以用他的软件发布? 第一个DLL文件kernel32似乎基于http://en.wikipedia.org/wiki/Auto-linking指令自动链接到他的软件。 第二个文件, advapi32.dll显式链接到他的软件,他想通过收集提供许可证的文件来清理该文件的情况。 例如,对于debian linux,他知道这些文件在/usr/share/doc/<package of the library>/copyright 。

KillTimer是否必要?

我使用SetTimer API,我看到很多这样的代码: case WM_DESTROY: // Destroy the timer. KillTimer(hwnd, IDT_TIMER); PostQuitMessage(0); break; 我是否需要调用KillTimer或者系统会自动释放进程退出的资源? 忘记调用KillTimer导致资源泄漏? 我明白,如果不需要定时器,它可以被KillTimer破坏。 但必须手动销毁?