Как получать ссылку из адресной строки оперы в textBox - C#

Узнай цену своей работы

Формулировка задачи:

Как получать ссылку из адресной строки оперы в textBox? (для блокирования рекламы)

Решение задачи: «Как получать ссылку из адресной строки оперы в textBox»

textual
Листинг программы
//#define BINARY_DDE
 
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication29
{
    public partial class frmMain : Form
    {
        const uint DMLERR_NO_ERROR = 0;
 
        const uint CF_TEXT = 0x1;
        const uint XCLASS_DATA = 0x2000;
        const uint XTYP_REQUEST = 0x00B0 | XCLASS_DATA;
 
        [Flags]
        enum DdeFlags : uint
        {
            APPCLASS_STANDARD = 0x0,
            APPCMD_CLIENTONLY = 0x10,
            // more flags...
        }
 
        [DllImport( "user32.dll", SetLastError = true, CharSet = CharSet.Unicode )]
        static extern uint DdeInitialize (
            [In, Out] ref uint pidInst,
            [In]      IntPtr pfnCallback,   // zero, do not used now
            [In]      DdeFlags afCmd,
            [In]      uint ulRes            // reserved
            );
 
        [DllImport( "user32.dll", SetLastError = true, CharSet = CharSet.Unicode )]
        static extern IntPtr DdeCreateStringHandle (
            [In] uint idInst,
            [In] string psz,
            [In] int iCodePage
            );
 
        [DllImport( "user32.dll", SetLastError = true )]
        [return: MarshalAs( UnmanagedType.Bool )]
        static extern bool DdeFreeStringHandle (
            [In] uint idInst,
            [In] IntPtr hsz
            );
 
        [DllImport( "user32.dll", SetLastError = true )]
        static extern IntPtr DdeConnect (
            [In] uint idInst,
            [In] IntPtr hszService,
            [In] IntPtr hszTopic,
            [In, Optional] IntPtr pCC   // zero, do not used now
            );
 
        [DllImport( "user32.dll", SetLastError = true )]
        [return: MarshalAs( UnmanagedType.Bool )]
        static extern bool DdeDisconnect (
            [In] IntPtr hConv
            );
 
        [DllImport( "user32.dll", SetLastError = true )]
        static extern IntPtr DdeClientTransaction (
            [In, Optional] byte[] pData,
            [In] int cbData,
            [In] IntPtr hConv,
            [In, Optional] IntPtr hszItem,
            [In] uint wFmt,
            [In] uint wType,
            [In] int dwTimeout,
            [Out, Optional] IntPtr pdwResult    // zero, do not used now
            );
 
        [DllImport( "user32.dll", SetLastError = true )]
        static extern uint DdeGetData (
            [In]  IntPtr hData,
            [Out] byte[] pDst,
            [In]  int cbMax,
            [In]  int cbOff
            );
 
        [DllImport( "user32.dll", SetLastError = true, EntryPoint = "DdeGetData" )]
        static extern uint OperaDdeGetData (
            [In]  IntPtr hData,
            [Out] StringBuilder pDst,
            [In]  int cbMax,
            [In]  int cbOff
            );
 
        [DllImport( "user32.dll", SetLastError = true )]
        [return: MarshalAs( UnmanagedType.Bool )]
        static extern bool DdeUninitialize (
            [In] uint idInst
            );
 
        public frmMain ( )
        {
            InitializeComponent();
        }
 
        private void button1_Click ( object sender, EventArgs e )
        {
            uint   pidInst = 0;
            uint   dwError;
            IntPtr hszAppName,
                   hszTopic;
            IntPtr hConn;
 
            if ( (dwError = DdeInitialize(
                                ref pidInst, IntPtr.Zero,
                                DdeFlags.APPCLASS_STANDARD | DdeFlags.APPCMD_CLIENTONLY,
                                0 )) != DMLERR_NO_ERROR )
            {
                MessageBox.Show( "DdeInitializeW failed" );
                return;
            }
 
            hszAppName = DdeCreateStringHandle( pidInst, "Opera", 0 );
            hszTopic = DdeCreateStringHandle( pidInst, "WWW_GetWindowInfo", 0 );
            hConn = DdeConnect( pidInst, hszAppName, hszTopic, IntPtr.Zero );
            DdeFreeStringHandle( pidInst, hszAppName );
            DdeFreeStringHandle( pidInst, hszTopic );
 
            if ( hConn != IntPtr.Zero )
            {
                IntPtr hszItem;
                IntPtr hData;
 
                hszItem = DdeCreateStringHandle(
                            pidInst,
                            "0xFFFFFFFF", // current active tab in Opera
                            0
                            );
                hData = DdeClientTransaction(
                            null, 0, hConn, hszItem,
                            CF_TEXT, XTYP_REQUEST, 0,
                            IntPtr.Zero
                            );
 
                if ( hData != IntPtr.Zero )
                {
#if BINARY_DDE
                    var buffer = new byte[512];
                    if ( DdeGetData( hData, buffer, buffer.Length, 0 ) != 0 )
                        MessageBox.Show( Encoding.Default.GetString( buffer ) );
                    else
                        MessageBox.Show( "DdeGetData failed..." );
#else
                    var sb = new StringBuilder( 512 );
                    if ( OperaDdeGetData( hData, sb, sb.Capacity, 0 ) != 0 )
                        MessageBox.Show( sb.ToString() );
                    else
                        MessageBox.Show( "DdeGetData failed..." );
#endif
                }
 
                DdeFreeStringHandle( pidInst, hszItem );
                DdeDisconnect( hConn );
            }
 
            DdeUninitialize( pidInst );
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы