我怎样才能通过他们的把手关闭窗户?

mar*_*ark 4 windows window

有谁知道有一个应用程序会根据其句柄关闭窗口?命令行很好。

请注意,我不想杀死相应的应用程序,而是该应用程序拥有的模式窗口。

理由:

有时,我的笔记本电脑的主窗口下方会打开一个模式对话框。这在 VS 和 Firefox 中不止一次发生。很烦人。

我可以用 Spy++ 定位窗口,但无法杀死它。

编辑:

允许向任意窗口发送消息的应用程序也很好,我想我可以发送诸如 WM_CLOSE 之类的东西。

编辑:

我想强调的是,我对关闭可见窗口并不感兴趣。重点是在拥有窗口下方打开模态对话框时处理丑陋的异常情况,这确实发生了,而且在我使用 VS 和 Firefox 时没有发生过一次。因此,理想的解决方案是通过其句柄关闭窗口,或者,如果它可以专门定位被遮挡的窗口并将它们显示出来。

小智 5

好的,我制作了一个可以解决问题的小应用程序。

截屏

你可以在这里下载。

用法:

  1. 启动程序
  2. 将鼠标悬停在要关闭的窗口上(不要单击它)
  3. 按删除。

它将 wm_close 发送到鼠标光标下的窗口。

德尔福代码如下...

unit uCloseWindow;

interface

uses
  Windows, Forms, Messages, SysUtils, Variants, Classes, Controls;

type
  TfrmMain = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  public
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  HandleUnderCursor:HWND;
begin
  if Key=VK_DELETE then
  begin
    HandleUnderCursor := WindowFromPoint(Mouse.CursorPos);
    SendMessage(HandleUnderCursor,WM_CLOSE,0,0)
  end;
end;

end.
Run Code Online (Sandbox Code Playgroud)

  • 不,您说它在另一个窗口的“下方”(暗示 y 位置),并且您没有提到窗口不可见。在我努力帮助你之后,你拒绝投票有点粗鲁。 (3认同)