保持窗口看起来活跃

时间:2009-12-21 19:29:17

标签: taskbar

我正在为辅助监视器创建任务栏。我的工作做得很好。我也有航空模糊的外观。但我的问题可能与空气动力学无关。

我想要做的是让我的任务栏窗口始终显示为聚焦/激活。它不需要实际聚焦或激活,我只是希望它看起来那样。你可以通过在应用程序空闲时放置一个setforgroundwindow调用来看到我所效应的效果。但我无法使用它,因为我不想让它像这样抓住焦点。我只是希望它总是看起来它有焦点的方式。

我尝试了各种WM_XXX消息调用,包括捕获和发送,我尝试过setwindowpos调用,然后打开。唯一有用的是调用Mouse_Event(MOUSEEVENTF_LEFTDOWN,然后是Mouse_Event(MOUSEEVENTF_LEFTUP)。我不喜欢这个解决方案,因为它是一个非常俗气的黑客/解决方法,我想做什么。但是用Mouse_Event调用的任何东西基本上都是什么我需要在没有实际点击我的应用程序或发送Mouse_Event调用的情况下实现。

1 个答案:

答案 0 :(得分:3)

您没有说明您使用的是哪种语言,或者这是管理代码还是非托管代码。

对于C ++非托管代码,您只需处理WM_NCACTIVATE消息并强制它始终显示为活动状态,如下所示:

case WM_NCACTIVATE:
   {
   // wParam tells us whether we are active or inactive, but we are going to ignore
   // that and always pass active down to DefWindowProc so it will draw us active.
   DefWindowProc(hwnd, uMsg, TRUE, lParam);
   //return FALSE; // returning false here prevents actual deactivation
   return TRUE; // return true allows deactivation (even though we draw as active)
   }
   break;

编辑:delphi代码中的解决方案(从评论中删除以使其更具可读性)

procedure TForm1.WndProc(var Message: TMessage); 
begin inherited; 
  if (Message.Msg = WM_NCACTIVATE) then 
  begin 
    DefWindowProc(handle, Message.Msg, 1, Message.LParam ); 
    Message.Result := 1; 
  end; 
end;