3

情况:全局原子表中有一个字符串与我的应用程序相同。我的应用程序没有创建应用程序句柄,我得到一个无效的窗口句柄。

FMX.Platform.Win 中的代码

procedure TPlatformWin.CreateAppHandle;
var
  //...
begin
  //...
  AtomName := ModuleName;
  AppAtom := GlobalFindAtom(PChar(AtomName));
  if AppAtom > 0 then begin
    FApplicationHWND := 0; // FApplicationHWND = 0 and I get "invalid window handle" 
  end else begin
    // FApplicationHWND is created

我有一个旧应用程序,其中 exe 具有相同的名称。关闭后,它会在 globalatomtable 'COM' 中留下一个字符串。关闭这个旧应用程序后。我无法再打开新应用程序,因为它一直在 gloabal atom 表中找到这个“COM”,导致应用程序句柄和窗口句柄无效。

如果我将代码放在注释中,则应用程序将以有效的应用程序句柄完美启动。

//  AtomName := ModuleName;
//  AppAtom := GlobalFindAtom(PChar(AtomName));
//  if AppAtom > 0 then begin
//    FApplicationHWND := 0;
//  end else
4

0 回答 0