安装流程:
运行e:\tm2006preview.exe --->下一步(快捷键Alt+N)-->我同意(快捷键Alt+I)-->下一步(快捷键Alt+N)-->安装(快捷键Alt+I)--等待几分钟--->完成(快捷键Alt+F)c#代码:
using System;
using System.IO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Threading;
using System.Runtime.InteropServices; 
using Microsoft.Win32;
using System.Diagnostics;System.Diagnostics.ProcessStartInfo  Info=  new  System.Diagnostics.ProcessStartInfo();
Info.FileName  = "e:\\tm2006preview.exe";    
System.Diagnostics.Process  Proc  ;
Proc  =  System.Diagnostics.Process.Start(Info);
SendKeys.Send("%(N)");   //这一步没有被执行。
SendKeys.Send("%(I)");
SendKeys.Send("%(N)");
SendKeys.Send("%(I)");
System.Threading.Thread.Sleep(10000);
SendKeys.Send("%(F)");
请问高手以上代码为什么不行?请指点,谢谢。

解决方案 »

  1.   

    Proc  =  System.Diagnostics.Process.Start(Info);//仅仅启动了一个程序恐怕不行。
      

  2.   

    楼主什么意思?
    要自己做安装程序?新建一个基于Installer的DLL,然后添加自定义安装
      

  3.   

    用apifindwindow然后sendmessage
      
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  4.   

    不是自己做安装程序,而是,运行人家做的win程序.tm2006preview.exe 是腾讯TM的安装程序。
      

  5.   

    用apifindwindow然后sendmessage你这个程序的
    SendKeys.Send("%(N)");   //这一步没有被执行。
    SendKeys.Send("%(I)");
    SendKeys.Send("%(N)");
    SendKeys.Send("%(I)");
    System.Threading.Thread.Sleep(10000);
    SendKeys.Send("%(F)");
    无效,正是因为你发送的消息是发送到本程序,而不是你用start打开的程序。
      

  6.   

    [DllImport("User32.dll",EntryPoint="FindWindow")]
    private static extern IntPtr FindWindow(string lpClassName,
    string lpWindowName); [DllImport("user32.dll",EntryPoint="FindWindowEx")]
    private static extern IntPtr FindWindowEx(IntPtr hwndParent,
    IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("User32.dll",EntryPoint="SendMessage")]
    private static extern int SendMessage(IntPtr hWnd,
    int Msg, IntPtr wParam, string lParam);  const int WM_GETTEXT = 0x000D;
    const int WM_SETTEXT = 0x000C;
    const int WM_CLICK = 0x00F5; 
    private void button1_Click(object sender, System.EventArgs e)
    {
    System.Diagnostics.ProcessStartInfo  Info=  new  System.Diagnostics.ProcessStartInfo();
    Info.FileName  = "e:\\TM2006Spring.exe";
    //            Info.WindowStyle=ProcessWindowStyle.Hidden; System.Diagnostics.Process  Proc  ;
    try
    {
    //
    //启动外部程序
    //
    Proc  =  System.Diagnostics.Process.Start(Info); //下面的这些参数都可以用Spy++查到
    string lpszParentClass = "#32770"; //整个窗口的类名
    string lpszParentWindow = "TM2006新春版 安装"; //窗口标题
    string lpszClass_Submit = "Button"; //需要查找的Button的类名
    string lpszName_Submit = "下一步(&N) >"; //需要查找的Button的标题
    IntPtr ParenthWnd = new IntPtr(0);
    IntPtr EdithWnd = new IntPtr(0); 
    ParenthWnd = FindWindow(lpszParentClass,lpszParentWindow); 
    if (!ParenthWnd.Equals(IntPtr.Zero))

    EdithWnd = FindWindowEx(ParenthWnd,
    EdithWnd,lpszClass_Submit,lpszName_Submit);
    if (!EdithWnd.Equals(IntPtr.Zero))
    {
    SendMessage(EdithWnd,WM_CLICK,(IntPtr)0,"");

    }  } }
    catch(System.ComponentModel.Win32Exception  e1)
    {
    // Console.WriteLine("系统找不到指定的程序文件。\r{0}",  e1);
    return;
    }
    }
    上面写的不能用,请高手指点。
      

  7.   

    SendMessage(EdithWnd,WM_CLICK,(IntPtr)0,"");  //这一步不能运行