我基本上想要的是启动AsyncCall并继续我的代码加载.我有接口部分,消耗大量的时间(600 + ms),我想在独立的线程中加载此代码.
我试图用AsyncCall这样的东西:
procedure Load;
begin
...
end;
initialization
AsyncCall(@Load, []); // or LocalAsyncCall(@Load)
Run Code Online (Sandbox Code Playgroud)
但是,此Load过程实际上是在主线程中启动,而不是在新创建的线程中启动.如何强制将Load程序加载到除以外的任何线程中MainThread?
我可以创建TThread和Execute这个,但我想强制AsyncCall或LocalAsyncCall或任何从AsyncCall库中进行工作.
谢谢你的帮助.
我有托盘应用程序.
Onj FormCloseQuery我检查程序是否应该转到托盘而不是关闭它我把它放在托盘中(CanClose:= False)
但是,如果Windows由于Windows关闭而尝试关闭我的应用程序,我希望不将我的应用程序移动到托盘中,而是关闭它.
Win7终止我的应用程序,但XP没有关闭,因为我的应用程序仍然在托盘中.
如何检测Windows是否处于某种"关闭"模式?
谢谢!
我不想关联扩展名但是文件夹.所以,当我点击桌面告诉操作系统使用我的应用程序,而不是资源管理器.
我试图用我的程序替换HKEY_CLASSES_ROOT\Folder\shell\open\command explorer.exe,但它不能正常工作因为我打开我的应用程序也控制面板和其他东西,这不是我想要的.
谢谢!
我在托盘栏上找到托盘图标(在px中)时遇到问题.
我可以找到托盘而不是图标.这是我正在使用的代码:
unit uTrayIconPosition;
interface
uses
Types;
function GetTrayIconPosition(const AWnd: THandle; const AButtonID: Integer; var APosition: TRect): Boolean;
implementation
uses
Windows, CommCtrl, Classes, SysUtils;
function EnumWindowsFunc(AHandle: THandle; AList: TStringList): Boolean; stdcall;
var
P: array [0..256] of Char;
S: string;
begin
if GetClassName(AHandle, P, SizeOf(P) - 1) <> 0 then
begin
S := P;
if S = AList[0] then
begin
AList[0] := IntToStr(AHandle);
Result := False;
end
else
Result := True;
end
else
Result := True;
end;
function FindClass(AName: string; AHandle: …Run Code Online (Sandbox Code Playgroud)