Articles of winapi

如何避免在EnumWindows中使用全局variables在Win32 C API中查找窗口?

在使用EnumWindows (或FindChildWindows )Win32 API时如何避免使用全局variables? 我大概下面的代码: HWND prog_hwnd; BOOL CALLBACK ProgEnumProc(HWND hwnd, LPARAM lParam) { if (…) { // found the right hwnd, assign it to prog_hwnd; prog_hwnd = hwnd; return FALSE; } return TRUE; } void FindProgHwnd() { EnumWindows(ProgEnumProc, 0); } int main() { FindProgHwnd(); if (prog_hwnd) { // found prog_hwnd, but it's global variable […]

如何判断用CreateProcess启动的进程是否仍在运行?

如果我有通过CreateProcess()创build的进程,我将如何确定它是否仍在运行? 我知道我需要使用pi.hProcess但我不知道如何,谷歌并没有真正给我有意义的提示。 PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); bool got_it=CreateProcess(NULL, CA2T(launchString.c_str()), NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

在Win32应用程序中使用Windows窗体

我需要创build一个Win32应用程序。 我正在使用visual studio。 我真的很喜欢在Windows窗体中devise我的应用程序,它允许以graphics方式devise我的窗口。 但是,我不能使用Windows窗体(仅)。 我必须使用Win32应用程序。 现在,当我创buildWin32应用程序时,我无法用graphicsdevise我的窗口。 有没有办法将Win32应用程序中的Windows窗体? 还是graphicsdevise的Win32窗口? (如果有graphics化devise Win32应用程序GUI的方法,只是我无法想象它,我将不胜感激资源或方法。)

FindFirstFile LPCSTR

你好,我在这里得到了我的代码的问题。 LPCSTR mergeString(LPCSTR firstString, std::string secondString) { string convertedString = ConvertString(firstString); LPCSTR mergedString; int i = convertedString.size(); convertedString.insert(i, secondString); mergedString = (convertedString.c_str()); return mergedString; } void GetFiles(LPCSTR path) { WIN32_FIND_DATA File_Data; LPCSTR lPath = mergeString(path,"\\*.txt"); FindFirstFile(lPath, &File_Data); wcout << File_Data.cFileName; } 你传递你想要在GetFiles(LPCSTRpath)中使用的path然后,我使用mergestring函数将path与一个扩展(\ *。txt)合并在一起,除了当它返回LPCSTR时,它只是很多更奇怪的字符,我不知道为什么或者是一个更好的方法来做到这一点?

读取和写入一个大文件,而不是一个小块的磁盘一次的缺点?

我主要在基于Windows和Windows CE的系统上工作,其中CreateFile , ReadFile和WriteFile是工作马,无论是在本地Win32域还是在托pipe的.Net域中。 到目前为止,我一直没有任何明显的问题写或读大块文件,而不是循环,直到处理几个较小的块。 我通常将IO工作委托给后台线程,在完成时通知我。 但是看看文件IO教程或“教科书示例”,我经常会发现“小块循环”,而没有解释为什么它被使用,而不是更明显(我敢说!)“一次完成”。 我有什么缺点,我没有明白? 澄清: 通过大文件,我比较了我的单块与多个块。 我提到的多个块的例子通常在Windows CE上有1024个字节的大小,在桌面上有10个大小。 我的大文件通常是二进制文件,如手机等相机的照片,大小顺序为2-10 MB。 换句话说,不接近1 GB。

为最大化的WPF自定义窗口删除DropShadow

我有一个自定义窗口边框的WPF应用程序(.NET Framework 4)。 我已经禁用使用WPF壳集成库的玻璃边框,并绘制我自己的边框。 但是,我想添加一个DropShadow的时候没有最大化的窗口边界。 我已经添加了这样的阴影: private static bool DropShadow(Window window) { try { WindowInteropHelper helper = new WindowInteropHelper(window); int val = 2; int ret1 = DwmSetWindowAttribute(helper.Handle, 2, ref val, 4); if (ret1 == 0) { Margins m = new Margins { Bottom = 0, Left = 0, Right = 0, Top = 0 }; […]

如何使用线程同时下载和转换二进制文件?

我有一个程序,从另一台PC下载一个二进制文件。 我也有另一个独立的程序,可以将这个二进制文件转换为人类可读的CSV。 我想将转换工具“下载到”下载工具中,在下载工具中创build一个启动转换代码的线程(这样它可以在下载时开始转换,减less下载和独立转换的总时间)。 我相信我可以成功地启动另一个线程,但是如何将转换线程与主下载同步? 即转换赶上下载,需要等待更多的下载,然后再开始转换等。 这与multithreading同步执行相似吗? 如果是这样,这意味着下载的二进制文件需要是信号量访问的资源? 我在正确的道路上,还是应该在我开始之前指向另一个方向? 任何意见表示赞赏。 谢谢。

WPF相当于Application.AddMessageFilter(Windows窗体)

我在我的WinForms应用程序(使用非托pipe代码时)使用Application.AddMessageFilter() )。 现在我切换到WPF ,无法find这个function。 请咨询哪里可以find或实施。

在Windows中实现“请勿打扰/分散我”模式

我想在我的应用程序中实现“请勿打扰”模式。 基本上,他们启用这种模式,我们阻止某些应用程序,如MSN / Skype /等,打乱用户的重点。 这是一个在线游戏,一些用户已经要求这个,我们想尝试一下。 我不知道从哪里开始。 Windows有像Skype这样的应用程序敏感的全局“忙碌”模式吗? 我听说过Windows Presentation Mode ,但是我认为这只能让我们走到一半。 否则, 以编程方式将Skype / IM应用程序设置为“繁忙” , 是否有一种好的方法 ?

安全地使用临时文件

在我的程序中有一个静态库,它只能把文件名作为input,而不是实际的文件内容。 对于图书馆的源代码,我无能为力。 所以我想:创build一个全新的文件,将数据存储到它中,将其刷新到磁盘(?),将其名称传递给库,然后删除它。 但我也希望这个过程相当安全: 1)文件必须重新创build,没有任何虚假的数据(也许它不是关键,但无论如何); 2)除了我的进程之外,任何人都不能读/写这个文件(我希望库能够处理我的实际数据,而不是一些聪明的插件)。 3)我完成这个文件后,它必须被删除(好的,如果有人TerminateProcess()我,我猜没有什么可以做的,但仍然)。 该库似乎使用非Unicode fopen()来打开给定的文件,所以我不太清楚如何处理所有这些,因为该程序旨在运行在Windows上。 有什么build议么?