Articles of winapi

Pythonsubprocess无法捕获Windows程序的输出

使用stdout=subprocess.PIPE停止输出到控制台,但是不会捕获任何内容。 >>> import subprocess >>> proc = subprocess.Popen(['C:\\Users\\me\\program.exe']) >>> ERROR: please provide an argument // TRUNCATED USAGE OUTPUT proc.wait() 0 >>> proc = subprocess.Popen([''C:\\Users\\me\\program.exe''], stdout=subprocess.PIPE) >>> proc.communicate() ('', None) 我已经尝试了每个组合可用在stackoverflow。 shell=True没有工作。 产生一个子cmd没有奏效。 subprocess.check_output捕获任何东西。 我很高兴在评论中重试这些命令。 我猜这与程序附加到shell有关。 这是程序用来输出的程序集( mcall只是一个将内存alignment到16位的macros)。 我包含这个的原因是GetStdHandle正在影响事情。 console_write PROC ; rcx MSG ; rdx LEN prologue push rcx push rdx xor rcx, rcx mov […]

TabCtrl_SetItemSize和用户绘制选项卡控件

我有这个Win32用户绘制的选项卡控件创build为: CONTROL "Tab1",IDC_TAB_CONT,"SysTabControl32",TCS_BOTTOM | TCS_OWNERDRAWFIXED | NOT WS_VISIBLE,0,14,185,88 我想要这个控件的标签大小调整为从来没有看到“ 滑动箭头 ”: 现在,几乎所有关于此控件的工作都按预期工作,除了它不响应TabCtrl_SetItemSize 。 尝试尽可能的,当我绘制它们(在传递给WM_DRAWITEM的DRAWITEMSTRUCT )时,我得到的标签的大小始终是适合其中最长的标题的大小,而不是我用TabCtrl_SetItemSize设置的大小。 但是,在TabCtrl_SetItemSize文档中 ,它说: [ TabCtrl_SetItemSize ]在固定宽度或自绘制选项卡控件中设置制表符的宽度和高度。 我设法resize的唯一方法是通过向控件发送一个TCM_SETITEM消息,并在绘制时在其中写入所需的文本,在其中设置所需长度的虚拟string。 这是相当不方便,不是一个特别好的黑客。 有谁知道吗? 为什么TabCtrl_SetItemSize不能按预期工作? 和/或 如何正确设置标签大小? 非常感谢, JOCE。

桌面图标操作 – 如何启用图片旋转主题时获取SysListView32的句柄

我试图在桌面上移动图标,一切都很好,直到select了图片旋转的主题。 使用基本的Windows 7主题, SysListView32是SHELLDLL_DefView子代,而SHELLDLL_DefView又是Progman 。 但是,当选取图片旋转桌面主题时, SysListView32变成SHELLDLL_DefView子WorkerW ,而SHELLDLL_DefView又变成了WorkerW子WorkerW 。 有超过1个。我应该如何去寻找正确的HWND指向正确的WorkerW 。 枚举所有的桌面窗口,并检查每个类名WorkerW? [DllImport("user32.dll", SetLastError = true)] static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd); [DllImport("user32.DLL")] public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); enum GetWindow_Cmd : uint { GW_HWNDFIRST = 0, GW_HWNDLAST […]

当使用Windows线程时,我可以指定一个缓冲区用于线程的堆栈,类似于pthread_attr_setstack()?

pthreads允许用户提供一大块内存用于线程堆栈: size_t stack_size = 1024*1024*4; void *stack = malloc( stack_size ); pthread_attr_t attributes; pthread_attr_init( &attributes ); pthread_attr_setstack( &attributes, stack, stack_size ); pthread_t thread_id; pthread_create( &thread_id, &attributes, worker_function, NULL Windows线程是否提供类似的function? CreateThread的第二个参数允许指定堆栈的最小大小,但是我看不到指定要使用的缓冲区地址的方法。

如何检测窗口内容何时更改

我需要编写一个截屏,并且需要检测窗口内容何时发生变化,即使只有文本被选中。 这个窗口是第三方控制。

如何避免在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。