我这两天一直在上网查资料,可是没有任何进展
没有一篇文章提到如何调用photoshop和acrobat处理文件,擦边的也只提了提SDK,可怜我现在都没有一点思路,下周一(4月4号)就要讨论了,我现在头发都快掉光了

解决方案 »

  1.   

    在几年前做过控制photoshop输出的程序,主要是通过模拟键盘和photoshop本身的宏功能,楼主好好研究一下,没什么难的。
      

  2.   

    宏功能可能又翻译为“批处理操作”,就是photoshop自带的记录操作和回放的功能。
      

  3.   

    是不是直接调用了photoshop7的DLL?没接口肯定做不到的
    如果你们买了正版的photoshop7,肯定会有技术支持的,可以问他们有什么接口。
    我们公司与正版的DELPHI6和8 ,不过BORLAN说中国不提供技术支持,真郁闷
      

  4.   

    DDGG(叮叮当当) :
    我也知道photoshop有个录制功能,可以将你的操作录制成一个宏然后重复运行,可是我没看到老外的程序有录制这一步,是拿过来直接跑的
    pl5th2001(白牙) :
    考虑过正版和盗版的区别,不过正版到底比盗版支持哪些你能告诉我吗?我怕就怕让老板买了正版还是没戏就糗大了,有谁用过adobe的正版吗?
      

  5.   

    他们首先人工操作photoshop给我看,在什么地方输入什么参数,最后生成什么结果,然后打开他们总部的程序,在界面上输入刚才的参数,设置好读取和输出路径,然后点了运行。
    程序自己打开了photoshop7.0,然后,以我刚才看见的但是快几十倍的流程处理一个个图片,最后关闭了photoshop。==============================================================
    这不是脱了裤子放屁——费两道手续吗?你们的客户真是吃饱了撑的反正到要设置,直接就用photoshop不就完了?
      

  6.   

    http://www.djpate.freeserve.co.uk/AutoPShp.htm
      

  7.   

    Automating Adobe Photoshop
    {work in progress}Contents
    Sources of information 
    Quick reference 
    How do I? Quick reference
    The Photoshop type library exposes the following interfaces (and their dispinterface equivalents):  IAction
      IActions
      IActionControl
      IActionDescriptor
      IActionList
      IActionReference
      IAutoPSDoc
      IPhotoshopApplicationAs you can see, Photoshop automation revolves around Actions. You can easily automate something by creating it as an Action in Photoshop, then playing it from Delphi using the IAction.Play or IPhotoshopApplication.PlayAction methods. IPhotoshopApplication - major methods and properties
        function Open(const fileName: WideString): IAutoPSDoc;
        function PlayAction(const fileName: WideString): WordBool;    procedure Quit;    function MakeControlObject: IActionControl;
        function MakeDescriptor: IActionDescriptor;
        function MakeList: IActionList;
        function MakeReference: IActionReference;
        property Actions: IActions read Get_Actions;
        property FullName: WideString read Get_FullName;
        property Visible: WordBool read Get_Visible write Set_Visible;IAction - methods and properties
        procedure Play; safecall;
        function Get_name: WideString;
        property name: WideString read Get_name;
    IActions - methods and properties
        function Get_count: Integer;
        function Get_Item(index: Integer): IAction;
        function Get__NewEnum: IUnknown;
        
        property count: Integer read Get_count;
        property Item[index: Integer]: IAction read Get_Item; default;
        property _NewEnum: IUnknown read Get__NewEnum;Back to top --------------------------------------------------------------------------------IActionControl - methods
        function Play(eventID: Integer; 
      const parameters: IActionDescriptor; 
      dialogOptions: Integer): IActionDescriptor;
        procedure GetActionProperty(const reference: IActionReference; 
                                    out propertyDesc: IActionDescriptor);
        procedure StringIDToTypeID(const stringID: WideString; out typeID: Integer);
        procedure TypeIDToStringID(typeID: Integer; out stringID: WideString);>>>>>How to start PhotoShop<<<<<
    uses ComObj, ActiveX, PhotoShopTypeLibrary_TLB;var
      PS: IPhotoShopApplication;
      AppWasRunning: boolean;
      Unknown: IUnknown;
    begin 
      AppWasRunning := False;
      Result := GetActiveObject(CLASS_PhotoshopApplication, nil, Unknown);
      if (Result = MK_E_UNAVAILABLE) then
        PS := CoPhotoshopApplication.Create
      else begin
        { make sure no other error occurred during GetActiveObject }
        OleCheck(Result);
        OleCheck(Unknown.QueryInterface(IPhotoShopApplication, PS));
        AppWasRunning := True;
      end;
      PS.Visible := True; Or, with late binding:  PS := CreateOleObject('Photoshop.Application');
      PS.Visible := True;Back to 'HowDoI' -------------------------------------------------------------------------------->>>>>How to close Photoshop<<<<<
    If PS is your Photoshop application variable: PS.Quit;
      

  8.   

    flyinwuhan(制怒·三思而后行):
    你给的链接打不开了
      

  9.   


    PhotoShop和Acrobat都有SDK的,Acrobat reader的好像是可以下载的,PS的需要花钱买。
      

  10.   

    http://www.aewnet.com/nntp/id-92148.html
    到这里看一下~~~~~
      

  11.   

    好像不需要SDK~楼主试了一下没有?不行大家一起想办法~~~``
      

  12.   

    楼上你给我发的短消息我看到了,不过我没有在component-Import ActiveX里找到photoshop选项,只有一个Acrobat Control for ActiveX(Version 1.3)
      

  13.   

    临下班之前再顶一下,明天后天培训来不了,希望朋友们帮帮忙别让贴子沉了
    但愿周一会得到一个惊喜……
    thanks all
      

  14.   

    估计需要调用大量api,去大富翁问问
      

  15.   

    临下班之前再顶一下,明天后天培训来不了,希望朋友们帮帮忙别让贴子沉了
    但愿周一会得到一个惊喜……
    thanks all
      

  16.   

    到下面adobe开发支持网站下载它的开发包sdk.
    http://partners.adobe.com/public/developer/photoshop/devcenter.html
      

  17.   

    photoshop本身的宏功能把它格式弄懂,要什么功能自己写宏吧。
      

  18.   

    没有装PHOTOSHOP。
    觉得使用这些接口不难的,主要是具体完成什么样的事。。
      

  19.   

    模拟鼠标动作和键盘动作。
    就是HOOK呀。
      

  20.   

    兄弟,我来帮助你,其实就是 FigoZhu(谢慕安) 说的话“模拟鼠标动作和键盘动作”,但不是用HOOK。
      你记录一下客户单个文件处理的全部键盘动作,包括 ALT / UPARROW / CTRL+A / ENTER , ETC , 然后用 Windows API 按消息序列发送出去,就是调用 Sendmessage 到 Photoshop 的窗口(可以预先按 Window Title 取到它的句柄,定向发送消息即可)。
      这样对于预先设定操作流程的外部程序全都可以强制驱动。
      建立一个数据记录要发射的键盘指令,捕获窗口句柄,然后建立循环并按顺序对窗口发送出去。核心程序很短,数10行不到,明白了么?我以前用它实现过别的功能,祝您好运!
      

  21.   

    ADOBE SDK 应该也可以的,找两个程序员同步开发吧,谁先完成就取谁的 ^&^
      

  22.   

    Allblus(爽),对鼠标的操作看你想实现什么,如果只是想取鼠标点击的坐标,用 HOOK 就可以了,网上有无数的样本代码可以实现他。
      如果想模拟鼠标操作动作,需要调用的 API 还是那个 Sendmessage ,只不过这次换成消息类型是 WM_LBUTTONDOWN ,后面的参数队列挂上坐标记录结构即可。
      所有基于 Windows 的的系统操作都是从消息循环响应着手的, Sendmessage 就是往 Windows 桌面的主消息循环泵里打入我们自定义的消息,如此而已。
      不过我估计楼主不是很需要追踪鼠标操作信息,看他那个说法也就是调用 Photoshop 转换一下图片格式而已,全键盘操作可以搞定的话,自然就不要考虑鼠标消息跟踪了。
      楼主实现以后要记得告诉一下大家啊,呵呵 ^&^
      

  23.   

    第一:楼主的心情和行为和我有同感。你的爱国主义精神我也不比你差一点先给你个up
    第二:david_zl(风中追风),意思我比较赞同。只是(Photoshop 转换一下图片格式而已,全键盘操作可以搞定的话,自然就不要考虑鼠标消息跟踪了。)我想可能也就这些吧,要是老外的东西是这样的话。我们可以进步点才得行哟,要只完成这样的功能,还要Photoshop 来做干啥子???????????????
      

  24.   

    呵呵,未必难的http://lysoft.7u7.net
      

  25.   

    建议楼主看看这个网页http://www.adobe.com/support/forums/main.html Adobe Photoshop Scripting Mac & Win 
     
     Adobe Photoshop Elements Mac & Win 
      

  26.   

    他们给你演示的程序打开了Photoshop,看来不是用的SDK,很可能是模拟键盘鼠标输入
    用SDK的话一般不用打开程序的界面
      

  27.   

    其实photoshop在很多年前就有了batch功能,
    做好一个action,点一下旁边的菜单,选batch,选个目录,
    目录下的文件就全部照action自动处理一遍了。
    演示给他们看,说是你做的就可以了,
    同时把他们总部的程序仍出窗外,
    告诉客户他们这样干已经是乡下人了。
    至于模拟键盘输入控制photoshop后台运行,
    也是n年前就有人做了,去搜索下吧,
    多上网搜索,什么年代了,
    不要随便对人说不可以,
    网络什么都能干。
      

  28.   

    俺到Adobe那里注册了,可是两天了还没有发来密码~~~严重挫败感~~~受歧视~~~
      

  29.   

    to:flyinwuhan(制怒·三思而后行)
    密码来了没用的,要下载的话需要他们的什么什么服务,从399$/y到999$/y不等。我昨天用edonkey下载了一个acrobat 7的SDK。还没安装,居然不支持2003,NND。
      

  30.   

    谢谢 TechnoFantasy
    原来注册了也不能下载啊~~~其实如果有SDK这个问题就非常简单了
    记得去年向MacroMedia要FlashPlayer的源代码,人家还很客气地回信说:“我们认为你不需要源代码......如果你坚持认为自己符合获取源代码的条件,请Mail to...”
    Adobe态度太差了,再说,SDK为什么还要收钱?小家子气~~~
      

  31.   

    :)
    我是没看到他们给你演示的程序是什么样子的,你的描述我也看的有些模糊。不过就像楼上那么多人说的,要么SDK,要么鼠标模拟。不过应该都不难!首先不要自己把自己吓倒了:)
      

  32.   

    我的想法:
      PS里面把动作录成action
      然后用Sendkey模拟键盘就搞定(这个函数能下载到),模拟过程中要屏蔽键盘输入..
      

  33.   

    我是楼主:
    感谢这么多朋友的支持和帮助,我感觉老外的程序和大家说的还不大一样:
    david_zl(风中追风):我现在找到一个方法能像老外的程序一样处理photoshop,就是事先将操作录制一个宏,然后通过我的程序调用photoshop(winexec),激活photoshop窗口为当前窗口后向它发模拟按键消息,但是老外的程序不是这样实现的,它是可以从后台运行的,就是说,你可以在跑老外程序的同时干其他工作而不必让photoshop窗口作为当前窗口!看来他们的确是通过和photoshop内部通信实现的了,我想明白的就是通过哪种方式、如何通信的,请高手指教!是不是像pl5th2001(白牙)说的需要买正版才能得到相关接口呢?有知道的请进来一下,多谢了!
      

  34.   

    回复人: yayx(yayx) ( ) 信誉:99  2005-04-03 10:59:00  得分: 0  
     
     
       我的想法:
      PS里面把动作录成action
      然后用Sendkey模拟键盘就搞定(这个函数能下载到),模拟过程中要屏蔽键盘输入..
    ---------------------------------------------------------------------------------
    我暂时就是这么实现的,但老外的不是 
     
      

  35.   

    hellolongbin(一个人),恭喜你基本实现了程序功能
      要实现后台运行效果,还有一种方法是使用 DDE 调用,但这需要知道 Photoshop DDE 通信参数接口
      非正版也会有接口的,不要害怕^&^
      

  36.   

    再发一遍:
    感谢这么多朋友的支持和帮助,我感觉老外的程序和大家说的还不大一样:
    我现在找到一个方法能像老外的程序一样处理photoshop,就是事先将操作录制一个宏,然后通过我的程序调用photoshop(winexec),激活photoshop窗口为当前窗口后向它发模拟按键消息,但是老外的程序不是这样实现的,它是可以从后台运行的,就是说,你可以在跑老外程序的同时干其他工作而不必让photoshop窗口作为当前窗口!看来他们的确是通过和photoshop内部通信实现的了,我想明白的就是通过哪种方式、如何通信的,请高手指教!是不是像pl5th2001(白牙)说的需要买正版才能得到相关接口呢?有知道的请进来一下,多谢了!
      

  37.   

    没做过,应该有接口的,ADO不可能就不提供2次开发1
      

  38.   

    hellolongbin(一个人) ,DDE 和Photoshop 通信我没做过,很抱歉没法演示给你。
      其它的例子你自己上网随意搜索,很多了。
      还是没明白你说的应用是什么,不过我想最正规的办法还是上他的网站Down一个SDK下来,随便做做,该实现的功能应该就有了。感觉以你现在的实力,走偏门去解剖人家的软件,速度会很慢的,祝你好运。 ^&^
      

  39.   

    我主要是不明白在他们的程序如何实现哪些功能的,到底是不是通过SDK还没有弄清楚,但显然不是像我做的那样录制宏然后模拟按键,我现在就是想先知道他们是通过哪种方式跟photoshop通信,有了方向之后再去钻研
    而且现在SDK好像都不是那么容易down的,呵呵
      

  40.   

    你装个MSDN,用 DDE 检索一下,N 多 API 说明;再去 google 一下,N 多代码。
    如果能下到 SDK ,不妨和大家共享一下,可以帮你再看看。 :)
      

  41.   

    很有可能没用ps的sdk,如果用ps的sdk的话,估计程序用不着再打开ps,就可以直接在程序里面执行图片的修改了。但是也有可能是ps的sdk支持类似于“存储过程”的一个东东,在外部程序提交进参数和文件后,自行运行。
      

  42.   


    我记得PS都是有Filter(滤镜)这么一说的吧?Filter有他的标准,我猜想应该是个标准的COM。
    可以QueryInterface到接口完成具体的功能。
      

  43.   

    我不懂Photoshop,不过,如果操作完全可以通过键盘操作来进行的话,就不需要pohotoshop作为激活窗口显示啊,只要把键盘消息post给他就可以了,你先这么做一个出来给用户看,松口气再仔细研究嘛。
      

  44.   

    CoolSlob() ( ) :QueryInterface怎么用?
      

  45.   

    COM对象自IUnknow接口起就实现了这个方法。首先要确定的是,PS的滤镜是不是COM
      

  46.   

    我安装的是PS7.0,
    刚刚查看了安装目录下的文件,Plug-in目录:
    *.8B_ 这样的文件,他们的文件头都有MZ this program cannot be run in DOS mode.
    初步断定他们应该是COM, 至于他们制订的什么标准就不得而知了:)
    楼主自己找,+U!
      

  47.   

    回复人: progray(千重劫) ( ) 信誉:92  2005-04-05 14:12:00  得分: 0  
     
     
       我不懂Photoshop,不过,如果操作完全可以通过键盘操作来进行的话,就不需要pohotoshop作为激活窗口显示啊,只要把键盘消息post给他就可以了,你先这么做一个出来给用户看,松口气再仔细研究嘛。
    -------------------------------------------------------
    有道理,多谢!  
     
      

  48.   

    如果想弄明白别人的程序具体做了什么事情,你可以用类似api spy的程序看看他都调用了什么系统函数就能明白。
    BTW:api spy类的程序能查看调用的所有的系统函数的参数值和函数的返回值,这些函数可以是系统DLL中定义的
      

  49.   

    程序已经差不多了,在优化的时候碰见两个小问题,请各位再帮下忙:
    http://community.csdn.net/Expert/topic/3913/3913625.xml?temp=1.710147E-02