【问题标题】:Issues with nVidia nView desktop manager and Delphi applications?nVidia nView 桌面管理器和 Delphi 应用程序的问题?
【发布时间】:2009-11-17 12:13:18
【问题描述】:

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

复制:

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

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

感谢任何 cmets 或建议!

-马克

【问题讨论】:

  • 我已经设置好了。只是按照您的描述编写了一个小应用程序,不幸的是,预期的行为没有发生。当我将主窗体拖到第二台显示器时,它是唯一可见的。虽然使用 Delphi 6。 NVIDIA nView 桌面管理器 v105.31。
  • 谢谢。你只是拖动应用程序吗?您需要使用 nView 命令“将其发送到其他监视器”才能出现问题。

标签: delphi delphi-2010 nvidia multiple-monitors


【解决方案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;

【讨论】:

  • 谢谢!我很想知道它为什么会引起问题。我一直希望我能做些什么来解决问题。
  • 可能是向 NVidia 报告错误?
  • 斯科特,100% 同意。只是如果这只会影响 Delphi 应用程序,那么我不确定他们是否会热衷于修复它。我希望在我走那条路线之前获得更多信息。
  • Delphi制作的常用程序。我想到了Skype。我很确定 nVidia 希望 Skype 工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
相关资源
最近更新 更多