2009-11-17 61 views
3

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

重现:

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

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

感谢您的任何意见或建议!

-Mark

+0

我已经完全设置。刚刚写了一个小应用程序来做你所描述的,不幸的是,你的预期行为没有发生。当我将主窗体拖到第二台显示器时,它是唯一可见的。尽管使用Delphi 6。 NVIDIA nView桌面管理器v105.31。 –

+0

谢谢。你只是拖动应用程序?您需要使用nView命令“将其发送到其他监视器”来解决问题。 – MarkF

回答

1

我有同样的问题。 Delphi应用程序停止响应没有任何明显的原因。从madExcept查看堆栈跟踪,我可以看到应用程序在nview.dll中冻结。我找到的唯一“解决方案”是寻找nV​​iew,并建议用户使用下面的代码关闭它:

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; 
+0

谢谢!我很想知道为什么它会导致问题。我一直希望有一些事情可以解决。 – MarkF

+0

也许是NVidia的一个错误报告? –

+0

Scott,同意100%。只是如果这只影响Delphi应用程序,那么我不确定他们是否会热衷于修复它。我希望在走这条路线之前获得更多信息。 – MarkF

相关问题