草庐IT

c++ - WM_SETFOCUS,获取刚刚失去焦点的应用

当我的WTLC++应用程序被激活或获得键盘焦点时,我需要确定先前激活/具有焦点的应用程序的窗口句柄。但是,WM_SETFOCUS和WM_ACTIVATE消息的窗口句柄(LPARAM)都是NULL(XP,32位)。当我的应用程序被激活时,如何确定刚刚失去焦点的应用程序?有没有一种简单的方法可以做到这一点,或者我需要滚动一个特殊的CBTHook? 最佳答案 要准确查看正在发送的消息及其参数的简单方法是启动Spy++并将其设置为记录消息,同时按Alt+Tab转到另一个窗口。与您发现的一致,WM_SETFOCUS和WM_ACTIVATE的l

Windows XP : change background color programatically (how to redraw Desktop after changing registry key? )

如何以编程方式更改WindowsXP上的背景/墙纸颜色?我正在更改注册表项HKEY_CURRENT_USER\ControlPanel\Colors\Background(使用regedit),但更改该注册表项不会更改背景颜色,尽管当我从“显示属性”窗口更改颜色时该注册表项已更改。知道为什么吗?编辑:啊,如果我更改key并重新启动,效果就会改变。那么如何在不重新启动的情况下进行更改呢? 最佳答案 我认为您需要调用WindowsAPI函数SetSysColors. 关于WindowsXP:

c++ - 如何拦截 "Show Desktop"事件?

我正在寻找一种方法来拦截ShowDesktop事件并将我的窗口设置在前面。有没有不使用APIHook的方法?谢谢,奥马尔。 最佳答案 如果您正在编写一个Windows任务栏样式的停靠栏,那么只需确保您的窗口设置了WS_EX_TOPMOST并且“显示桌面”将保留它。或者使用SetWindowPos使其在创建后成为最顶层的窗口,例如:SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);更新:您需要使用Windows应用程序栏API来制作“停靠”风格的应用程序。参见h

windows - 在不重置剪贴板链的情况下中止进程会导致麻烦吗?

我有一个调用SetClipboardViewer的程序在启动时注册剪贴板更改通知。在关机时,它会调用ChangeClipboardChain正确地从链中删除自己。只要程序正常运行,一切都很好。但这让我想知道,如果程序被中止,会发生什么情况,要么是我在调试器下杀死它,要么是崩溃,要么是用户因为出错而杀死了进程?然后清理永远不会发生。这会以某种方式给系统带来麻烦吗?具体来说,我知道Windows可以毫不费力地删除我的查看器,因为它是一个句柄,并且Windows可以在进程终止时清理所有句柄,但这会导致链下游的下一个值,我持有一个引用,以某种方式迷路? 最佳答案

windows - 使用 MS CryptoAPI 保存/恢复证书会使附加的私钥无效

我编写了一个程序,该程序应该使用WindowsCryptoAPI保存和恢复用户证书。我的印象是它工作正常,但现在用户提示证书恢复后附加到证书的私钥无效。我使用以下方式保存证书:HCERTSTOREhCertStore=CertOpenStore(CERT_STORE_PROV_PHYSICAL_W,0,NULL,CERT_SYSTEM_STORE_CURRENT_USER|CERT_STORE_OPEN_EXISTING_FLAG|CERT_STORE_READONLY_FLAG|CERT_STORE_UPDATE_KEYID_FLAG,(PVOID)storeName.c_str()

windows - Windows 中的进程间条件变量

我知道我可以使用条件变量来同步线程之间的工作,但是是否有任何类likethis(conditionvariable)来同步进程之间的工作,在此先感谢 最佳答案 使用一对已命名的Semaphore对象,一个作为信号,一个作为锁。Windows上的命名同步对象是自动进程间的,它会为您处理这部分工作。像这样的类就可以了。classInterprocessCondVar{private:HANDLEmSem;//UsedtosignalwaitersHANDLEmLock;//Semaphoreusedasinter-processlock

c++ - 带有 Aero 主题(阴影)的窗口定位 - 0,0 处的窗口隐藏了一些边框

我在0,0打开一个窗口。当Aero和窗口阴影被禁用时,这工作得很好。如果启用了窗口阴影,则窗口的部分边框(和标题)会隐藏在桌面左边缘的上/左上方。有没有办法检测阴影是否打开以及我需要调整窗口位置多少像素?我已经尝试了几乎所有GetSystemMetrics()可用的方法,但没有一个有意义。 最佳答案 Aero位于窗口位置。这是一个重型应用程序兼容功能,窗口边框在很长一段时间内都具有相同的宽度。这是不可持续的,在Vista时代,不要将窗口边框设置为一个像素宽变得越来越重要。显示器技术不断发展,拥有1600x900分辨率的显示器(我的笔

.net - 如何获取调用进程 Windows 用户访问 token

如何为创建调用我的应用程序的进程的用户获取访问token?我需要使用该token进行模拟,目的是访问该用户应用程序数据中的文件。附言将模拟用户的应用程序是在系统下运行的服务。 最佳答案 查看MSDN,所有这些API都有详细的文档记录。你可能想做这样的事情:HANDLEthisToken,thisProcess;thisProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,GetCurrentProcessId());OpenProcessToken(thisProcess,TOKEN_ALL_AC

c++ - Windows 中 _strnicmp 的 LPTSTR 等价物是什么?

是否有一个LPTSTR等效于_strnicmp,它接收2个LPTSTR字符串,以及要比较的TCHAR数量?使用cwinapi顺便说一句 最佳答案 它是_tcsncicmp,见thedocumentation. 关于c++-Windows中_strnicmp的LPTSTR等价物是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7525844/

Windows 资源管理器获取所选项目的列表并将其传递给另一个进程

我必须创建文件/文件夹管理系统。用户可以在其中选择多个文件/文件夹并从上下文菜单中执行命令。该命令发送所有选定文件/文件夹列表的列表以调用进程。这样,进程就可以处理文件/文件夹列表。如果进程正在运行,上下文菜单不应显示或变灰。我添加了上下文菜单,但找不到禁用它的方法。我怎样才能做到这一切?任何可能的学习链接都会有很大帮助吗? 最佳答案 您的IContextMenu::QueryContextMenu处理程序可以应用您想要的任何逻辑来确定是否显示/隐藏菜单项,如果显示,它是启用还是禁用。但是请注意,由于CLR注入(inject)问题,