// This overload method is used to get Tab Item text. internal static unsafe string GetItemText(IntPtr hwnd, int index, NativeMethods.TCITEM item) { ProcessorTypes localBitness; ProcessorTypes remoteBitness; GetProcessTypes(hwnd, out localBitness, out remoteBitness); if (localBitness == remoteBitness) { return GetTextWithinStructure(hwnd, NativeMethods.TCM_GETITEMW, new IntPtr(index), new IntPtr(&item), Marshal.SizeOf(item.GetType()), new IntPtr(&item.pszText), item.cchTextMax); } else if (remoteBitness == ProcessorTypes.Processor32Bit) { TCITEM_32 item32 = new TCITEM_32(item); return GetTextWithinStructureRemoteBitness(hwnd, NativeMethods.TCM_GETITEMW, new IntPtr(index), new IntPtr(&item32), Marshal.SizeOf(item32.GetType()), new IntPtr(&item32.pszText), item32.cchTextMax, remoteBitness, false); } else if (remoteBitness == ProcessorTypes.Processor64Bit) { TCITEM_64 item64 = new TCITEM_64(item); return GetTextWithinStructure(hwnd, NativeMethods.TCM_GETITEMW, new IntPtr(index), new IntPtr(&item64), Marshal.SizeOf(item64.GetType()), new IntPtr(&item64.pszText), item64.cchTextMax); } return ""; }
//------------------------------------------------------ // // Tab Control Methods that support cross process / cross bitness // //------------------------------------------------------ #region Tab Contrl Methods // This overload method is used to get Tab Item data. internal static unsafe bool GetItem(IntPtr hwnd, int index, ref NativeMethods.TCITEM item) { ProcessorTypes localBitness; ProcessorTypes remoteBitness; GetProcessTypes(hwnd, out localBitness, out remoteBitness); if (localBitness == remoteBitness) { fixed (NativeMethods.TCITEM* pItem = &item) { return XSend(hwnd, NativeMethods.TCM_GETITEMW, new IntPtr(index), new IntPtr(pItem), Marshal.SizeOf(item.GetType())); } } else if (remoteBitness == ProcessorTypes.Processor32Bit) { TCITEM_32 item32 = new TCITEM_32(item); bool result = XSend(hwnd, NativeMethods.TCM_GETITEMW, new IntPtr(index), new IntPtr(&item32), Marshal.SizeOf(item32.GetType())); if (result) { item = (NativeMethods.TCITEM)item32; } return result; } else if (remoteBitness == ProcessorTypes.Processor64Bit) { TCITEM_64 item64 = new TCITEM_64(item); bool result = XSend(hwnd, NativeMethods.TCM_GETITEMW, new IntPtr(index), new IntPtr(&item64), Marshal.SizeOf(item64.GetType())); if (result) { item = (NativeMethods.TCITEM)item64; } return result; } return false; }