我最近有一个客户报告了我的应用程序和NVidia nView桌面管理器的问题。基本上,当在监视器之间移动应用程序时,nView似乎“取消隐藏”隐藏的辅助表单。我正在使用Delphi 2010进行测试。只需使用IDE(显示非停靠窗口,关闭它然后选择将Delphi IDE发送到不同的监视器)也可以看到问题。以前隐藏的表单没有响应国家,不能关闭。
重现:
。使用带有NVidia nView桌面管理器的多显示器系统
。使用辅助表单启动任何Delphi应用程序,这些表单在关闭时将被隐藏
。显示或ShowModal表单,然后关闭它(表单需要至少显示一次)
。选择将应用程序发送到其他监视器。 (通过热键或标题图标)
。应用程序将移动到另一个监视器,任何隐藏的表单都将可见。
还有其他人看过这个问题吗?我已经使用旧版本的nView验证了它,但是当他试图移动主窗体或调整其大小时,具有最新版本的客户会遇到问题。不幸的是我的笔记本电脑无法更新到最新版本,因此无法轻松测试。
感谢您的任何意见或建议!
-Mark
答案 0 :(得分:1)
我遇到了同样的问题。 Delphi应用程序没有任何明显的原因停止响应。查看来自madExcept的堆栈跟踪,我可以看到应用程序在nview.dll中冻结。我找到的唯一“解决方案”是寻找nView并建议用户使用以下代码将其关闭:
function CheckForNview: Boolean;
function IsNviewModuleRunning(AHandle: THandle; AProcessId: DWord): Boolean;
var
AModuleEntry: TModuleEntry32;
begin
AModuleEntry.dwSize := SizeOf(AModuleEntry);
AModuleEntry.th32ProcessID := AProcessId;
Result := False;
if Module32First(AHandle, AModuleEntry) then
begin
if SameStr(AModuleEntry.szModule, 'nview.dll') then
Result := True;
while Module32Next(AHandle, AModuleEntry) do
begin
if SameStr(AModuleEntry.szModule, 'nview.dll') then
Result := True;
end;
end;
end;
var
AHandle: THandle;
AProcessEntry: TProcessEntry32;
begin
Result := False;
AHandle := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if Process32First(AHandle, AProcessEntry) then
begin
if SameStr(AProcessEntry.szExeFile, ExtractFileName(ParamStr(0))) then
Result := Result or IsNviewModuleRunning(AHandle, AProcessEntry.th32ProcessID);
while Process32Next(AHandle, AProcessEntry) do
begin
if SameStr(AProcessEntry.szExeFile, ExtractFileName(ParamStr(0))) then
Result := Result or IsNviewModuleRunning(AHandle, AProcessEntry.th32ProcessID);
end;
end;