var
h,a,f: Cardinal;
begin
h := HInstance;
a := Application.Handle;
f := Self.Handle;
ShowMessage(IntToStr(h)); {4194304}
ShowMessage(IntToStr(a)); {13107942}
ShowMessage(IntToStr(f)); {4260652}
end;
通過測試看出: HInstance、Application.Handle、Self.Handle 不是一回事.
Self.Handle 是窗體的句柄;
Application.Handle 也是個窗口的句柄, 不過這個窗口很小, 在任務欄上;
HInstance 是程序實例的句柄; 同一個程序可能會有幾個副本同時允許, 每個副本當然會有不同的句柄.
-----------------------------------------------------
HInstance是你的EXE或者DLL加載內存的首地址,很多查找資源文件的函數都需要這個值
在Delphi中,可以通過訪問一個叫HInstance的全局變量來獲取本應用程序的實例句柄。
如果一個程序編譯成包,那麼HInstance並不代表應用程序的模塊句柄。此時要用MainInstance
來訪問宿主程序的模塊句柄,而HInstance代表代碼所在的模塊句柄。
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(getmodulehandle('本程序在磁盤上的全路徑名'));
Caption := Caption + '|' + IntToStr(HInstance);
end;