剪贴板复制粘贴在Win Server 2008 / Vista 64bit上的服务中不起作用

时间:2010-02-03 13:49:39

标签: service 64-bit windows-server-2008 session clipboard

更新:此问题已得到解决。

你可以在这里阅读解决方案: Creating a process in a non-zero session from a service in windows-2008-server?

谢谢大家!


您好,

我正在尝试使用Clipboard API(在Delphi中)从Word文档中提取图像。 我的代码在Windows XP / 2003中正常工作,但在Windows 2008 64位中它不起作用。 在win 2008中我得到一个错误,说Clipboard.Formats是空的,不包含任何格式。

图像似乎被复制到剪贴板(我可以通过Word在剪贴板中看到它)但是当我试图询问剪贴板时他有什么格式它说它没有任何格式。

如何在win 2008 / Vista上以编程方式访问剪贴板? 根据我所知的2008年64位,这可能是一个安全问题......

这是代码段:

这就是我试图将图像复制到剪贴板的方式:

W.ActiveDocument.InlineShapes.Item(1).Select; // W is a word ole object
W.Selection.Copy;

这就是我尝试粘贴它的方法。

  Clipboard.Open;
      Write2DebugFile('FormatCount = ' + IntToStr(Clipboard.FormatCount)); // FormatCount=0 
      For JJ := 1 to Clipboard.FormatCount Do
          Write2DebugFile('#'+ IntToStr(JJ) + ':' + IntToStr(Clipboard.Formats[JJ]));
      If (Clipboard.HasFormat(CF_BITMAP)) or
        (Clipboard.HasFormat(CF_PICTURE)) or
        (Clipboard.HasFormat(CF_METAFILEPICT)) then    // all HasFormat calls returns false.
      Begin
       Jpeg := TJPEGImage.Create;
       Bitmap := TBitmap.Create;
       Bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
       Jpeg.Assign(Bitmap);
       Jpeg.SaveToFile(JpgFileN);
       try Jpeg.Free; except; end;
       ResizeImage(JpgFileN,750);
       Write2DebugFile('Saving ' + JpgFileN);
      End
      else  Write2DebugFile('Doesnt have the right format');

提前致谢, 伊泰

1 个答案:

答案 0 :(得分:2)

AFAIR,似乎M $不允许服务与Win2008中的桌面交互(需要使用剪贴板)。