草庐IT

c++ - 创建一个创建全屏覆盖的程序

我想编写一个程序来创建一个透明覆盖层来填充Windows7中的整个屏幕,最好使用C++和OpenGL。不过,如果有一个用另一种语言编写的API可以让这一切变得super简单,我也非常愿意使用它。一般来说,我假设我必须能够以某种方式读取屏幕上已有的像素。使用屏幕捕获软件使用的相同方法从屏幕获取像素然后重新绘制它们最初是可行的,但如果屏幕更新就会出现问题。然后我的程序必须最小化/关闭并重新出现,以便我能够读取底层像素。 最佳答案 WindowsVista在PIXELFORMATDESCRIPTOR中引入了一个新标志:PFD_SUPPOR

windows - 复制文件+文件时去掉方框字符

在WindowsXPCMD中执行copyfile+file命令时,带有附加信息的文件在最后一行的末尾会有一个方框字符。后续的copyfile+file命令也会留下额外的方框字符。有没有办法避免这种情况发生?还是事后删除? 最佳答案 使用十六进制查看器查看添加的字节可能是什么。我猜在0x1a,一个Ctrl+Z用于指示文本文件的结尾。这一直追溯到CP/M,这是一个没有文件大小属性的早期操作系统,因此需要一个特殊字符来指示文本文件的EOF。使用/B选项告诉COPY这些文件是二进制文件。 关于w

c++ - 是否可以从 XML 文件动态构建函数声明?

这是我正在探索的插件框架场景:第三方插件开发人员设计了一个具有已知入口点和任意参数的DLL。它们还在XML文件中提供了入口点和参数的详细信息,并提供了在调用插件时它们将被我的程序回调的数据。他们将能够在XML中使用一组可扩展变量,我的程序将扩展这些变量并通过他们指定的参数传回给他们。我知道在win32中我可以使用LoadLibrary/GetProcAddress来获取它们定义的函数。我不太清楚的是我是否可以从它们定义的参数动态生成一个函数规范,我可以用它来调用它们。有人知道这是否可能吗? 最佳答案 C++不支持反射。但是,可以(在

c++ - 如何获得文本框焦点的通知?

使用Windows7触摸设备,当您选择/聚焦文本框或输入字段(记事本等)时,Windows会显示这个小触摸键盘指示器(点击它会在屏幕键盘上显示触摸)。我想编写一个应用程序,当发生这种情况时得到通知,文本框(等)获得焦点(无论是哪个应用程序)。是否通知应用程序关注其他应用程序,我是否需要Hook某些东西?有没有办法在C++中这样做? 最佳答案 我相信SetWinEventHook函数,特别是EVENT_OBJECT_FOCUS事件就是您要查找的内容。来自MSDN的描述:Anobjecthasreceivedthekeyboardfoc

c++ - 堆内存什么时候真正被释放?

我正在使用new分配内存,当我在其中一个方法和析构函数中接收到数据时,我将使用delete释放所有分配的内存。但是,释放内存后,从任务管理器中,在进程选项卡下查看内存使用情况时,内存使用情况仍然保持不变。它不会给人一种正在释放内存的印象。那么,内存什么时候真正被释放?找出进程实际使用的内存的最佳方法是什么。谢谢 最佳答案 在大多数情况下,它不会在应用程序运行时返回给操作系统。之后,当然,所有资源都由操作系统回收。[在评论正确指出“从不”是一个很长的时间后编辑...] 关于c++-堆内存什

c++ - 从非 COM 静态库中删除对 OleInitialize 的调用是否安全?

今天我必须在原生C++项目中定义WIN32_MEAN_AND_LEAN预处理器宏,因为我决定在其中使用boost::asio,如果没有该宏,我会得到构建错误。事实是,我现在得到的错误是OleInitialize:identifiernotfound。根据MSDN,此函数用于初始化COM库。我的项目现在不是COM库,但我的合作伙伴说它曾经是。在这种情况下,删除电话是否安全?该项目混合使用了Win32串行端口函数和boost::asio(逐渐地,我将只使用boost::asio)。我担心的是OleInitialize对于某些Win32调用可能是必需的。这就是它所做的一切:HRESULThO

c++ - 从 4.5.0 更新到 4.6.2 后 MinGW g++ 性能损失

今天我更新了MinGW并重建了我当前的C++项目。自从使用4.5.0以来,我已经记录了计时信息,并且在使用4.6.2版进行编译时,我看到了巨大的性能损失(大约慢了4倍)。我的构建命令:g++-Ilib\svl-1.5\include-Ilib\SDL-1.2.15\include-static-libgcc-static-libstdc++\-Ofast-O3-oecl.exesrc\ecl.cpp-lmingw32-lSDLmain-lSDL-std=c++0x我在Window64位系统上运行MinGW。您知道是什么导致了糟糕的表现吗?我的bin文件夹包含一个名为mingw32-gc

c++ - 不写入任何数据,WriteFile 怎么能成功呢?

我调用WriteFile将数据发送到调制解调器:BOOLwriteResult=WriteFile(m_hPort,p_message,length,&numOut,NULL);哪里:m_hPort是一个有效的HANDLEp_message是一个unsignedchar*包含ate0\rlength是一个值为5的intnumOut是一个初始化为0的unsignedlong偶尔我会看到此方法成功但numOut!=lengthWriteFile怎么可能不发送任何数据就返回成功呢?编辑这就是我创建句柄的方式:HANDLEhPort=CreateFileA("\\\\.\\COM5",GENE

c++ - 是什么导致 WS_TABSTOP 影响窗口绘制顺序?

在WTL中,CBitmapButton不支持带有透明层的图片,比如PNG。所以我自定义代码使用GDI+绘制PNG,命名为CPNGButton。但是在winXP上情况很奇怪。当按钮与其他窗口重叠时,按钮先接收WM_PAINT,然后再接收父级,导致结果不正确。--->我检查资源并从按钮的模板中删除WS_TABSTOP属性,一切正常,父窗口首先接收WM_PAINT,然后是按钮。是什么导致WS_TABSTOP影响窗口绘制顺序? 最佳答案 这是不绘制背景时发生的情况。这会在窗口中留下一个“洞”,您会看到您后面的任何窗口的像素。或者桌面,如果没

c++ - 将指向局部变量的指针传递给另一个进程有时有效,但有时无效

前阵子我写了一个程序,可以让你选择和修改窗口。它使用WindowFromPoint()获取鼠标光标下窗口的句柄,并调用GetWindowText()获取窗口的标题。这很好用。然后我添加了获取列表控件列标题的功能。问题在于,与返回宽度的GetColumnWidth()不同,没有相应的函数来获取标题。相反,获取列标题的标题需要将缓冲区传递给GetColumn()以填充标题。因此,当我将LVCOLUMN结构的pszText成员分配给指向缓冲区的指针并将该结构传递给GetColumn()时,其他进程将指针解释为在其自己的内存空间内。显然这是行不通的。我使用CodeProjectarticle中