草庐IT

windows - Delphi:如何响应WM_SettingChange/WM_WinIniChange?

我需要知道我的应用程序何时收到WM_SETTINGCHANGE消息(以前称为WM_WININICHANGE)。问题是TApplication中的消息泵在我有机会看到它之前将它发送到黑洞(默认处理程序):procedureTApplication.WndProc(varMessage:TMessage);...beginMessage.Result:=0;forI:=0toFWindowHooks.Count-1doifTWindowHook(FWindowHooks[I]^)(Message)thenExit;CheckIniChange(Message);withMessagedoc

c++ - 向窗口应用程序发送 WM_CHANGEUISTATE 后,当使用鼠标访问菜单时,助记符不会显示在系统菜单上

下面的代码向窗口过程本身发送一个WM_CHANGEUISTATE,参数为:LOWORD(wParam)=UIS_CLEARHIWORD(wParam)=UISF_HIDEACCELlParam=0x00000000当用鼠标左键单击窗口客户区时。根据thisblog通过RaymondChen当使用鼠标访问菜单时,这应该会显示系统菜单中的助记符。以下段落摘自这篇文章:Clearingaflagshowsthecorrespondingindicator.Forexample,ifyouhaveaUIS_CLEARforUISF_HIDE­FOCUS,thatmeansthatyouwant

windows - 是否有 WM_QUERYHIDE/CLOSE 或类似信息?

我有一个使用WS_POPUP/WS_EX_APPWINDOW创建的顶级窗口,因此它使用非标准框架并且其标题显示在任务栏上。然而,如果重要的话,我有自定义的WM_NCHITTEST处理程序。当窗口“折叠到任务栏”(从屏幕上移除)并且用户单击其在任务栏上的图标/标题时,窗口将收到WM_QUERYOPEN消息并由DefWindowProc打开。但是当窗口打开并且用户在任务栏中单击其图标/标题时,窗口就会被停用-我需要折叠它。当鼠标在任务栏的标题上时,shell是否向窗口发送任何消息?我正在尝试重现标准的WindowsShell行为-第一次单击任务栏的窗口图标显示窗口,第二次单击-隐藏它。默认

c++ - 使用 sendmessage 将 wm_close 发送到另一个进程

我想将wm_close发送到另一个进程,我想用它安全地结束该进程。int_tmain(intargc,_TCHAR*argv[]){DWORDSetOfPID;SetOfPID=GetProcId(_T("abc.exe"));//thiswillreturnpidHANDLEh=OpenProcess(PROCESS_ALL_ACCESS,false,SetOfPID);HWNDhwnd=::GetTopWindow(NULL);while(hwnd){DWORDpid;DWORDdwThreadId=::GetWindowThreadProcessId(hwnd,&pid);if(

python - Windows 上的 WX Python 和原始输入 (WM_INPUT)

有谁知道如何使用RawInput从WXPython应用程序在Windows上运行?我需要做的是能够区分来自多个键盘的输入。因此,如果有另一种方法可以实现这一目标,那也行得通。 最佳答案 您尝试过使用ctypes吗?>>>importctypes>>>ctypes.windll.user32.RegisterRawInputDevices设置必要结构的Python版本可能需要一些工作,但您可以通过这种方式直接查询Win32API而无需通过wxPython。 关于python-Windows

c - PostQuitMessage() 是否进入 WM_DESTROY 或 WM_CLOSE?

我正在尝试使用Win32API创建一个非常基本的窗口,我已经很久没有这样做了。我认为我的消息循环没问题,但是当我关闭打开的窗口时,应用程序仍在运行。看起来消息循环永远不会收到WM_QUIT消息。但是,我正在调用PostQuitMessage并且消息框确认我调用了它。这个极简代码有什么问题?#includeLRESULTCALLBACKwindow_proc(HWNDhwnd,UINTmsg,WPARAMw_param,LPARAMl_param){switch(msg){caseWM_DESTROY:MessageBox(NULL,L"destroy",L"info",MB_OK);P

windows - 鼠标单击是 WM_* 消息还是向上和向下消息的组合?

我习惯于使用Windows框架,它为鼠标单击或鼠标双击等事件提供事件。单击事件是Windows构造的(即Windows是否发送WM_DOUBLECLICK或类似消息)或者它是否将WM_MOUSEDOWN和WM_MOUSEUP发送到应用程序,然后应用程序进行一些计算以确定事件是单击还是其他? 最佳答案 根据MSDNdocumentation,您将看到的双击事件的正确消息顺序是-WM_LBUTTONDOWN、WM_LBUTTONUP、WM_LBUTTONDBLCLK和WM_LBUTTONUP

wpf - 为什么处理 WM_NCCALCSIZE 会导致我的窗口跳转?

我有一个捕捉到屏幕边缘的WPF应用程序(如果您在屏幕边缘的20像素以内,我只是设置窗口的.Top或.Left),但我最近添加了一些代码providedbytheWPFSDKTeam“弄乱”窗口镶边,虽然它工作得很好(screenshot),但它导致“snapto”意外移动窗口(例如:当它应该直接向下捕捉到底部时它跳到左边)我已经将范围缩小到他们对WM_NCCALCSIZE的处理......这真的很奇怪,因为他们基本上什么都不做,他们只是说他们处理了它,然后返回0。根据WM_NCCALCSIZE的文档,这应该只会导致整个窗口被视为客户端(没有非客户端边缘),但不知何故,这也意味着每当我的

windows - 为什么当用户单击任务栏按钮时模态 Delphi 窗体不接收 WM_SYSCOMMAND?

在Windows8.1上运行的Delphi(2007)程序中,我希望在用户单击属于我的程序的任务栏按钮时收到通知。所以我捕获了通常在这种情况下发送的WM_SYSCOMMAND。这适用于程序的主窗口。如果模态窗口处于事件状态(使用Form2.ShowModal打开),则相同的代码不能捕获WM_SYSCOMMAND,无论是在主窗体中还是在模态窗体中。有什么不同吗?有什么办法可以改变这种情况吗?这是我添加到两种形式的代码:unitunit1;interfacetypeTForm1=class(TForm)//[...]procedureWMSysCommand(varMsg:TWMSysCo

c++ - 未捕获 WM_PAINT 中的访问冲突

为了测试这个问题,我编写了一个最小的Windows应用程序。如果我在WM_PAINT处理程序中强制执行访问冲突,则此异常永远不会到达调试器。如果在没有调试器的情况下启动,访问冲突也不会出现。通常您应该会看到Windows错误报告对话框。再深入一点,似乎user32.dll中的某些东西捕获了所有传入的异常。这是正常行为吗?我能以某种方式控制它吗?捕获所有异常不是安全风险吗?至少它很烦人。这是Vista64上的32位和64位应用程序。在XP上,异常似乎按预期处理。其他窗口消息也有同样的问题。也许所有这些?WM_PAINT处理程序:caseWM_PAINT:hdc=BeginPaint(hW