本帖最后由 llsus 于 2012-08-13 16:37:30 编辑

解决方案 »

  1.   

    SendMessage 这个可以实现 系统API
    不过前提都是要有窗体
      

  2.   

    SendMessage 怎么实现?我WM_SETFOCUS 试过,失败了,可能用错了方法。应该用哪个消息?
    不能使用鼠标消息,因为程序A点击TabPage的标题,会执行事件,我不希望事件被执行,只想切换页面。
      

  3.   

    可以使用custom message, 自己定义事件,自己处理,这个事件id要定义大一点,不能跟系统事件重复。
      

  4.   

    http://www.cnblogs.com/kevinGao/archive/2011/10/30/2231524.html
    这里有个帖子
    然后你可以在需要切换tab页的界面调用切换页面事件模拟传入参数。定义一个变量或者判断sender参数是否为空    在事件里面判断然后判断是否执行该方法
      

  5.   

    Tab控件有标准的Windows消息可以操作
      

  6.   

    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Text;namespace Text
    {
        public class Program
        {
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            static extern UInt32 SendMessage(IntPtr hWnd, UInt32 Msg, UInt32 wParam, UInt32 lParam);        public const UInt32 TCM_FIRST = 0x1300;
            public const UInt32 TCM_GETIMAGELIST = (TCM_FIRST + 2);
            public const UInt32 TCM_SETIMAGELIST = (TCM_FIRST + 3);
            public const UInt32 TCM_GETITEMCOUNT = (TCM_FIRST + 4);
            public const UInt32 TCM_GETITEMA = (TCM_FIRST + 5);
            public const UInt32 TCM_GETITEMW = (TCM_FIRST + 60);
            public const UInt32 TCM_SETITEMA = (TCM_FIRST + 6);
            public const UInt32 TCM_SETITEMW = (TCM_FIRST + 61);
            public const UInt32 TCM_INSERTITEMA = (TCM_FIRST + 7);
            public const UInt32 TCM_INSERTITEMW = (TCM_FIRST + 62);
            public const UInt32 TCM_DELETEITEM = (TCM_FIRST + 8);
            public const UInt32 TCM_DELETEALLITEMS = (TCM_FIRST + 9);
            public const UInt32 TCM_GETITEMRECT = (TCM_FIRST + 10);
            public const UInt32 TCM_GETCURSEL = (TCM_FIRST + 11);
            public const UInt32 TCM_SETCURSEL = (TCM_FIRST + 12);
            public const UInt32 TCM_HITTEST = (TCM_FIRST + 13);
            public const UInt32 TCM_SETITEMEXTRA = (TCM_FIRST + 14);
            public const UInt32 TCM_ADJUSTRECT = (TCM_FIRST + 40);
            public const UInt32 TCM_SETITEMSIZE = (TCM_FIRST + 41);
            public const UInt32 TCM_REMOVEIMAGE = (TCM_FIRST + 42);
            public const UInt32 TCM_SETPADDING = (TCM_FIRST + 43);
            public const UInt32 TCM_GETROWCOUNT = (TCM_FIRST + 44);
            public const UInt32 TCM_GETCURFOCUS = (TCM_FIRST + 47);
            public const UInt32 TCM_SETCURFOCUS = (TCM_FIRST + 48);
            public const UInt32 TCM_SETMINTABWIDTH = (TCM_FIRST + 49);
            public const UInt32 TCM_DESELECTALL = (TCM_FIRST + 50);
            public const UInt32 TCM_HIGHLIGHTITEM = (TCM_FIRST + 51);
            public const UInt32 TCM_SETEXTENDEDSTYLE = (TCM_FIRST + 52); // optional wParam == mask
            public const UInt32 TCM_GETEXTENDEDSTYLE = (TCM_FIRST + 53);        static void Main(string[] args)
            {
                IntPtr h = new IntPtr(句柄自己取);
                UInt32 count = SendMessage(h, TCM_GETITEMCOUNT, 0, 0);
                Console.WriteLine("共有 " + count + " 个分页");            UInt32 index = SendMessage(h, TCM_GETCURSEL, 0, 0);
                Console.WriteLine("当前选中第 " + (index + 1) + " 页");            if (index == 0)
                {
                    index = count - 1;
                }
                else
                {
                    index = 0;
                }            SendMessage(h, TCM_SETCURSEL, index, 0);
                Console.WriteLine("已跳转到 " + (index + 1) + " 页");            Console.ReadKey();
            }
        }
    }非常简单
      

  7.   

    继续请教,遇到问题了
    上面例子中的句柄是TabControl的句柄,我不知道, 我只知道每个TabPage的句柄
      

  8.   

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);或者[DllImport("user32.dll", ExactSpelling=true, CharSet=CharSet.Auto)]
    public static extern IntPtr GetParent(IntPtr hWnd);TabPage的句柄怎么取出来的?难道不用先取出TabControl句柄才能取TabPage句柄?
      

  9.   

    这些问题我已经解决了,已经实现了跨进程选择TabControl的当前页,不过发送了TCM_SETCURSEL消息后,Tabcontrol的标题确实有变化,不过TabPage的内容并没有变,我再用ShowWindow显示一下对应的Tabpage试试看