none
如何实现第三方程序的自动开启? RRS feed

  • 问题

  •     有一个第三方的winform程序简称A.exe,打开后需要按下<开启>按钮才能开始运行,现在希望在系统开机后直接运行,不知道能不能通过编程实现呢?
        1:由于是第三方程序,无法修改程序本身.
        2:程序是放在服务器上面的,希望达到的效果是每次重启后能自动运行这个程序,并且通过某种方式"按下"<开启>按钮.由于服务器上的应用是IIS等服务,不需要登陆就可以正常运行,所以希望在没有用户登陆的情况下实现想要的功能.
        3:A.exe目前设置了计划任务,可以在系统重启后打开界面,问题在于怎么样按下<开启>按钮??
    2009年12月6日 2:23

答案

全部回复

  • 你好!
         可以编写一个Windows服务,设置成“自动”启动,然后使用Process.Start方法来开启那个程序!
    周雪峰
    2009年12月6日 2:36
    版主
  • 你好:
        我的问题关键是打开A.exe之后还要按下<开启>按钮,程序才算真正运行...

    2009年12月6日 3:53
  • 那你可以这样:
    可以编写一个Windows服务,设置成“自动”启动,然后在Windows服务启动的时候显示一个窗体,在窗体中加个"开启“按钮,在按钮中使用Process.Start方法来开启那个程序!
    周雪峰
    2009年12月6日 5:12
    版主
  •      有点晕,可能我描述的太复杂了...
         是这样的,假设我要开启的程序是a.exe(第三方的程序,没法修改),它是一个winform程序,打开后需要按下<开启>按钮才算开始工作.
         然后假设我自己的服务是mySvc.exe,我可以把服务设置成自动启动,同时在mySvc.exe服务启动的时候用process.Start打开a.exe,问题是打开a.exe后仅仅显示a.exe的窗体,这时候我还需要按下a.exe主窗口的<开启>按钮,a.exe才正式运行,这最后一步该怎么做?
         楼上说的我迷糊了,呵呵

    2009年12月6日 7:35
  • 哦!这样啊!我理解你的意思是在服务中自动启动了a.exe后,还需要自动点那个”开启“按钮吧!
    如果这个”开启“按钮是默认按钮,可以直接通过发送Enter键来按这个按钮:
    SendKeys.Send("Enter")

    如果上面的方法不行,可以用mouse_event这个API来模拟鼠标点击,当然,要计算好坐标!

    周雪峰
    2009年12月6日 8:22
    版主
  •      SendKeys的方法我同事用vb脚本+计划任务的方法试过,登录状态下可以,但是未登录好像不行,具体我没去了解,第一印象可能是因为没有登录的原因,因为这一切都是要在服务器尚未登录而且处于锁定状态的时候进行的.找机会再试试.
        个人感觉mouse_event可能也存在这个问题,细节上还有很多问题,有机会得仔细研究下了.
        另外:个人想到的方式是直接打开a.exe二进制文件,不知道是否有某一段数据代表了按钮的状态,最好直接把这个按钮设置成打开就按下的状态,这个恐怕得需要汇编牛人了,呵呵.
    2009年12月6日 8:31
  • 你说的方式需要利用一些程序的漏洞才可以,所以简单的方法是反编译然后重写这个程序(当然,前提是这符合授权协议)!
    周雪峰
    2009年12月6日 8:43
    版主
  •    呵呵,就算符合授权协议我也不会-_-!~
    2009年12月6日 9:51
  • 用API Findwindow找到<开启>按钮,然后SendMessage发送Click消息


    http://feiyun0112.cnblogs.com/
    2009年12月8日 0:54
    版主