My environment: C++ Builder XE4
我正在隐藏/显示来自其他应用程序的一个应用程序,这两个应用程序都是使用XE4构建的。
两个项目
UnitShow的代码如下:
void __fastcall TFormShow::B_showClick(TObject *Sender)
{
HWND hwnd = GetDesktopWindow();
hwnd = FindWindowEx(hwnd, NULL, L"TFormHide", NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);
}
UnitHide的代码如下:
void __fastcall TFormHide::B_hideClick(TObject *Sender)
{
this->Hide();
}
上面,我尝试了以下内容。
我预计第二个B_hide按钮会隐藏UnitHide。
这个问题的原因是什么?
答案 0 :(得分:1)
我尝试了以下内容。
var compiled = $('<div>', {css: {display: 'none'}})
.append($compile(popoverContent)(scope)).appendTo('body');
button.popover({
//... other config
content: compiled.html()
});
当我使用void __fastcall TFormHide::B_hideClick(TObject *Sender)
{
bool isShowing = this->Showing;
#if 1
this->Hide();
#else
ShowWindow(this->Handle, SW_HIDE);
#endif
}
时,在UnitShow显示后,this->Hide()
为isShowing
。有了这个,似乎false
不起作用(第二次之后)。
另一方面,始终使用this->Hide()
ShowWindow(this->Handle, SW_HIDE);
为isShowing
。有了这个,第二次工作后就隐藏了。
对于true
,似乎我必须使用其他应用程序中的this->Hide()
,目前我不知道该怎么做。
答案 1 :(得分:0)
使用FindWindow函数代替FindWindowEx,如下所示:
procedure TfShow.btnShowClick(Sender: TObject);
var
hWindow:Hwnd;
begin
hWindow := FindWindow('TFormHide', nil);
ShowWindow(hWindow, SW_SHOWNORMAL);
end;
关于UnitHide,您可以在按钮中调用self.hide
procedure TfHide.btnHideClick(Sender: TObject);
begin
self.Hide; {Hide the hidden form }
//or
ShowWindow(Self.Handle, SW_HIDE);
end;
您可以在C ++中执行相同的调用
<强>更新强>
正如雷米在answer 中提到的那样所以你可以使用以下内容:
在两个应用程序中定义自定义消息
const
Show_MESSAGE = WM_USER + 1;
Hide_MESSAGE = Show_MESSAGE + 1;
在HideUnit中定义消息的处理程序
private
{ Private declarations }
procedure WMShow(var Message: TMessage); message Show_MESSAGE;
procedure WMHide(var Message: TMessage); message Hide_MESSAGE;
....
implementation
procedure TfHide.WMShow(var Message: TMessage);
begin
Self.Show;
end;
procedure TfHide.WMHide(var Message: TMessage);
begin
Self.Hide;
end;
从ShowUnit&gt;发送消息Showbtn
procedure TfShow.btnShowClick(Sender: TObject);
var
hWndX : HWND;
begin
hWndX := FindWindow('TfHide',nil);
if hWndX <> 0 then begin
SendMessage(hWndX, Show_MESSAGE, 0, 0);
end
else MessageBox(0, 'Window not found', 'Msg', 0);
end;
隐藏表格隐藏表格
procedure TfHide.btnHideClick(Sender: TObject);
begin
SendMessage(Handle, Hide_MESSAGE, 0, 0);
end;