需解決問題:Dll HOOK(WH_KEYBOARD)。調用Synchronize同步線程。首先我可以確定EXE和DLL都是沒錯的。我也專門新建了個工程(應用程序)測試。代碼沒問題。下面是我的代碼:{ ************************* Dll Form ************************* }
var
  Form1: TForm1;
  Temp: TempThread;procedure TForm1.Button1Click(Sender: TObject);
begin
  Temp.Resume;
end;{ ************************* Dll Thread ************************* }
type
  TempThread = class(TThread)
  private
    sName: String;
    procedure PushName;
  protected
    procedure Execute; override;
  end;procedure TempThread.PushName;
begin
  sName := Form1.Edit1.Text;
  Form1.Caption := sName;
end;procedure TempThread.Execute;
begin
  Synchronize(PushName);
end;{ ************************* Dll HOOK ************************* }
var
  iHOOK: HHOOK = 0;
  procSaveExit: Pointer;function MyProc(eCode: Integer; wParam: wParam; lParam: lParam): lResult;
begin
  Result := 0;
  if eCode < 0 then
  begin
    Result := CallNextHookEx(iHOOK, eCode, wParam, lParam);
    Exit;
  end;
  if ((lParam and $80000000) = 0) and (wParam = VK_F12) then
  begin
    Result := 1;
    if not Assigned(Form1) then
    begin
      Form1 := TForm1.Create(Application);
      Temp := TempThread.Create(True);
    end
    else
      Form1.Visible := not Form1.Visible;
  end;
end;procedure BeginHK;
begin
  if iHOOK <> 0 then Exit;
  iHOOK := SetWindowsHookEx(WH_KEYBOARD, @MyProc, hInstance, 0);
end;function EndHK: Boolean; StdCall; Export;
begin
  if iHOOK <> 0 then
  begin
    UnhookWindowsHookEx(iHOOK);
    iHOOK := 0;
  end;
  Result := iHOOK = 0;
end;{ ************************* Exe Form ************************* }
var
  Form1: TForm1;
  procedure BeginHK; external 'dll.dll';
  function EndHK: Boolean; external 'dll.dll';implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
  BeginHK;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
  EndHK;
end;再說一次。單EXE測試是沒問題的。我想問的是為什麽HOOK就不行了。