草庐IT

c++ - 如何在没有延迟的情况下从 Win32 中的另一个进程捕获标准输出?

我想做的类似于VisualStudio在其输出窗口或其他编辑器在其工具窗口中所做的:从我的进程A启动另一个进程B并捕获其stdout/stderr输出。到目前为止,我使用CreatePipe()让它工作,但由于某种原因,B的输出在写入时并没有立即到达B。它的行为更像是某种缓冲区被填满,当缓冲区已满时,所有缓冲区内容立即到达A。我编写了自己的测试程序,该程序输出一些内容并随后直接执行fflush(stdout)。然后输出直接到达A。但是我不能更改我想那样使用的所有B进程的代码。尝试从A冲洗管道也不起作用。这应该如何工作?我的初始化代码和消费代码:sa.nLength=sizeof(SEC

c++ - Windows Web Server 2008 中的事件 CTRL_CLOSE_EVENT 未调用 CtrlHandler

我有一个控制台应用程序,它使用SetConsoleCtrlHandler设置一个处理程序来处理和CTRL_CLOSE_EVENT。处理程序仅返回TRUE,这将导致出现一个对话框并提示用户继续关闭或取消。该软件在WindowsXPSP3和WindowsWebServer2008SP2上运行。在XP上,当单击控制台窗口上的“X”时,将调用我的控制处理程序并按预期出现提示。在Server2008上,关闭控制台窗口不会调用我的控制处理程序,应用程序会在没有提示的情况下关闭。为了检查控制处理程序是否设置正确,我为CTRL_C_EVENT添加了一个案例。我可以看到为Ctrl-C调用了代码。在Ser

c++ - 键盘 Hook 问题

我正在做一个使用一键通键的语音聊天应用程序。我做了一个钩子(Hook),所以它也会在应用程序外部注册一键通。HHOOKhHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)pushtotalk,0,0);LRESULTCALLBACKpushtotalk(intkey,WPARAMwParam,LPARAMlParam){if(keyvkCode==75&&wParam==WM_KEYDOWN){MessageBox(mainhWnd,"KEYSTART","KEYSTART",0);}elseif(kbdll->vkCode==75&&wPa

c++ - 编写加载 msvcr80.dll 并公开 free() 函数的 DLL

我有一个依赖于MSVCR80并分配我需要清理的资源的第三方DLL。该库不公开用于执行此操作的免费函数。相反,我需要加载相同的运行时库并手动调用free函数。作为解决方法,我正在尝试编写一个“包装器”DLL,它加载正确的运行时并公开free函数。此DLL是使用VisualStudio2010创建的,并且依赖于单独的运行时库。执行LoadLibrary("msvcr80.dll")失败并出现错误R6034,我猜这是因为明显的问题。甚至可以使用LoadLibrary加载msvcr80.dll吗?我是否需要创建一个list,将其嵌入DLL并将msvcr80.dll存储在与我的包装器DLL相同的

c++ - 如何正确地对程序进行版本控制?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我总是看到程序显示类似Version:1.5.6之类的内容。我的问题是,如何正确确定版本?我是一名C++程序员,所以我认为这很重要。我还使用VisualStudioUltimate2012。编辑:如何在代码中添加版本?

c++ - 如何强制 MessageBox 显示为顶部窗口

我不知道怎么解释我的意思。我创建了一个程序(A),它在超时后显示一个MessageBox。如果我的程序(A)被激活,它只会像我想要的那样显示MessageBox。但是当我使用另一个程序(B)时(我的程序-A-未激活),MessageBox仅出现在任务栏中,如下所示:我想要这个:谁能帮我创建一个最顶层的消息框(方法的名称是什么)? 最佳答案 我也找到了我的解决方案:我可以使用:MB_SETFOREGROUND或MB_TOPMOST或MB_SYSTEMMODAL 关于c++-如何强制Mess

c++ - 双缓冲故障(2013 年 12 月 17 日更新)

介绍和相关信息:我有一个复杂的绘画要在我的主窗口的WM_PAINT处理程序中实现。我已经提交了下面的图片来说明它:主窗口具有静态控件,而不是具有SS_NOTIFY样式的按钮。当用户点击它们时,程序中会发生某些操作,这些操作目前无关紧要。下图显示了主窗口中静态控件的位置:橙色面板上的map是一个EMF文件,左上角和右上角的logo是PNG文件,其他图片是bitmaps。VisualStyles通过#pragma指令启用。我还使用GDI+和GDI。项目被创建为空项目,我已经从“头”开始编码了所有内容。为了实现这个任务,我决定在WM_PAINT中绘制整张图片,并在将透明的staticcont

c++ - 每个显示器 DPI 感知 : black window glitch with NVIDIA Optimus

我想制作一个Per-MonitorDPI-AwareDirect2D应用程序。我已经扩展了Microsoft的"FirstDirect2DProgram"处理WM_DPICHANGED的示例,如KennyKerr'sMSDNarticle中所述.这在两个显示器都使用一个视频卡时有效,但在使用我的笔记本电脑的NVIDIAOptimus设置时出现故障。我可以通过运行Per-MonitorAwareWPFSample重现相同的故障通过以下步骤:每台显示器上的不同DPI比例因子。启用Optimus(集成显卡上的笔记本电脑显示屏,Quadro卡上的外接显示器)应用程序在主显示器上启动-右侧的外部

c++ - Ruby win32 API 接口(interface)

我需要访问ruby​​中win32库的一些函数。我在网上发现关于Win32API类的信息非常稀少,所以我在这里问一下。我知道你可以这样做:function=Win32API.new('user32','MessageBox',['L','P','P','L'],'I')但我似乎无法使用当前的win32绑定(bind)调用此函数:http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx问题出在它的原型(prototype)上:UINT_PTRSHAppBarMessage(DWORDdwMessage,PAPPBAR

c# - 优先自动复位事件

我有这个问题:Thread1可能会设置一个自动重置事件,并且有很多线程可能会等待该事件。有什么方法可以为特定事件指定等待线程的优先级,也就是说,如果说事件已设置并且A和B都在等待它,我想确保B会工作,而A会等待下一次机会。为此有任何同步对象吗?语言不是那么重要。提前致谢 最佳答案 您描述的问题需要实时调度程序和同步器。虽然我知道WindowsAPI中存在此类内容,但我非常努力地避免了解它们。除非系统的其余部分是真正的实时系统,否则我的建议是使用优先级队列推出您自己的解决方案。确保每个线程在注册时将其有效优先级传达给队列,在condv