3

最近、顧客から私のアプリケーションと NVidia nView デスクトップ マネージャーの問題が報告されました。基本的に、nView は、アプリケーションをモニター間で移動するときに、非表示のセカンダリ フォームを「再表示」するようです。Delphi 2010 でテストしています。この問題は、IDE だけを使用して確認することもできます (ドッキングされていないウィンドウを表示し、閉じてから、Delphi IDE を別のモニターに送信することを選択します)。状態になり、閉じることができません。

再現するには:

. NVidia nView デスクトップ マネージャーでマルチモニター システムを使用します。
. 閉じたときに非表示になるセカンダリ フォームを使用して、Delphi アプリケーションを開始します。
. フォームを表示または ShowModal してから閉じます (フォームは少なくとも 1 回表示されている必要があります)。
. アプリケーションを別のモニターに送信することを選択します。(ホットキーまたはキャプション アイコン経由)
. アプリケーションが他のモニターに移動し、非表示のフォームが表示されます。

他の誰かがこの問題を見たことがありますか? 古いバージョンの nView で確認しましたが、最新バージョンを使用しているお客様は、メイン フォームを移動したり、サイズを変更したりするたびに問題が発生します。残念ながら、私のラップトップは最新バージョンに更新できないため、簡単にテストできません。

コメントや提案をありがとう!

-マーク

4

1 に答える 1

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;
于 2009-11-17T13:39:20.487 に答える