gpt4 book ai didi

delphi - nVidia nView 桌面管理器和 Delphi 应用程序有问题吗?

转载 作者:行者123 更新时间:2023-12-03 15:58:56 25 4
gpt4 key购买 nike

最近,一位客户报告我的应用程序和 NVidia nView 桌面管理器存在问题。基本上,当在监视器之间移动应用程序时,nView 似乎会“取消隐藏”隐藏的辅助表单。我正在使用 Delphi 2010 进行测试。仅使用 IDE 也可以看到该问题(显示非停靠窗口,关闭它,然后选择将 Delphi IDE 发送到不同的监视器。)以前隐藏的表单处于无响应状态状态且无法关闭。

重现:

。使用带有 NVidia nView 桌面管理器的多显示器系统。
。使用辅助窗体启动任何 Delphi 应用程序,辅助窗体在关闭时将被隐藏。
。显示或 ShowModal 表单,然后关闭它(表单需要至少显示一次)。
。选择将应用程序发送到不同的显示器。 (通过热键或标题图标)
。应用程序将移动到另一台显示器,所有隐藏的表单都将可见。

还有其他人看到过这个问题吗?我已经使用旧版本的 nView 进行了验证,但是使用最新版本的客户每当尝试移动主窗体或调整其大小时都会遇到问题。不幸的是,我的笔记本电脑无法更新到最新版本,因此我无法轻松地使用它进行测试。

感谢您的意见或建议!

-标记

最佳答案

我也遇到了同样的问题。 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;

关于delphi - nVidia nView 桌面管理器和 Delphi 应用程序有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1748454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com