这是因为这个按钮的消息优先级是很低的,所以你得激活窗体让窗体得处理这个按键消息。
除非你把Done设为false,让系统一有空就立即处理消息
procedure TFm_Sendorder.AppIdle(Sender: TObject; var Done: Boolean);
begin
  done:=false; // 相对的这样你会发现一个CUP会满负荷
  if GetAsyncKeyState(VK_SNAPSHOT) <> 0 then
  begin
    //捕获截图代码
  end;
  sleep(1); // 这里延时1毫秒,可以降低cup占用
end;

解决方案 »

  1.   

    所以没有截到当时按PRINT键时的图片
      

  2.   

    4楼不是说得很清楚了么
    procedure TFm_Sendorder.aplctnvnts1Idle(Sender: TObject; var Done: Boolean);
    var
      bmp: TBitmap;
    begin
      Done := False;
      if GetAsyncKeyState(VK_SNAPSHOT) <> 0 then
      begin
        bmp := TBitmap.Create;
        bmp.Width := Screen.Width;
        bmp.Height := Screen.Height;
        OpenClipboard(GetWindow(0, 0));
        bmp.Handle := GetClipboardData(CF_BITMAP);
        CloseClipboard;
        bmp.SaveToFile('c:\' + FormatDateTime('YYYYMMDDmmss', Now) + '.bmp');
        bmp.Free;
      end;
      Sleep(1);
    end;