private void Abfrage()
        {
            try
            {
                String Requeststring = t_url.Text + "?";
                foreach (DataRow i in Tabelle.Rows)
                {
                    String Kanal = i[0].ToString();
                    i["Value"] = KarlsClient.Request(Kanal, 1000).TrimEnd('\0');
                }

                //Save to file wenn angewählt
                String Antwortstring = "";

                if (cb_toFile.Checked == true)
                {
                    foreach (DataRow i in Tabelle.Rows)
                    {
                        Antwortstring = Antwortstring + i["Value"] + ";";
                    }
                    Antwortstring = Antwortstring.TrimEnd(';');
                    SW.WriteLine(Antwortstring.Replace('.', ',').Replace('\r', ' ').Replace('\n', ' '));
                }
            }
            catch (Exception e)
            {
                timer1.Stop();
                MessageBox.Show("Fehler bei der Abfrage!\nBitte stoppen, dann alle Kanäle kontrollieren und erneut auf Start klicken!\n", "Fehler bei der Abfrage");
            }
        }
Exemplo n.º 2
0
 private void button1_Click(object sender, EventArgs e)
 {
     try
     {
         btnRead.Text = client.Request(txtItem.Text, 1000);
         displayTextBox.Text = client.Request(txtItem.Text, 1000);
     }
     catch (Exception ex)
     {
         displayTextBox.Text = "Parse: " + ex.Message;
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// DDE Server에 Request
        /// </summary>
        /// <param name="ddeItem">Request Item</param>
        /// <returns>함수 실행 결과 (ProtocolResult 객체)</returns>
        public CommonStruct.ProtocolResult Request(string ddeItem)
        {
            CommonStruct.ProtocolResult result = new CommonStruct.ProtocolResult();
            string receiveValue = string.Empty;

            stopWatch.Start();

            try
            {
                receiveValue = ddeHandle.Request(ddeItem, 1);
                result.funcResult.isSuccess = true;
            }
            catch (Exception ex)
            {
                receiveValue = string.Empty;
                result.funcResult.isSuccess     = false;
                result.funcResult.funcException = ex;
            }

            stopWatch.Stop();

            result.funcResult.totalMilliseconds = stopWatch.ElapsedMilliseconds;
            result.receiveData = receiveValue;

            stopWatch.Reset();

            return(result);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 开始监控火狐浏览器
        /// </summary>
        public List <WebSiteModel> MnitorFireFox()
        {
            try
            {
                string    sUrl   = string.Empty;
                string    sTitle = string.Empty;
                DdeClient dde    = new DdeClient("Firefox", "WWW_GetWindowInfo");
                dde.Connect();
                // 取得 URL 資訊
                string sUrlInfo = dde.Request("URL", int.MaxValue);
                // DDE Client 進行連結
                dde.Disconnect();

                List <WebSiteModel> urls = new List <WebSiteModel>();

                // 取得的 sUrlInfo 內容為 "網址","標題",""
                // 取出網址部分
                if (sUrlInfo.Length > 0)
                {
                    //sUrlInfo.Split(',').ToList<>();
                    sUrl   = sUrlInfo.Split(',')[0].Trim(new char[] { '"' });
                    sTitle = sUrlInfo.Split(',')[1].ToString();
                    urls.Add(new WebSiteModel()
                    {
                        url = sUrl, title = sTitle
                    });
                }
                return(urls);
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 5
0
 public void Test_Request_Before_Connect()
 {
     using var server = new TestServer(ServiceName);
     server.Register();
     server.SetData(TopicName, ItemName, 1, Encoding.ASCII.GetBytes(TestData));
     using var client = new DdeClient(ServiceName, TopicName);
     Assert.Throws<InvalidOperationException>(() => client.Request(ItemName, 1, Timeout));
 }
Exemplo n.º 6
0
        public static void RunDdeClient()
        {
            // Wait for the user to press ENTER before proceding.
            Console.WriteLine("The Server sample must be running before the client can connect.");
            Console.WriteLine("Press ENTER to continue...");
            Console.ReadLine();
            try
            {
                // Create a client that connects to 'myapp|mytopic'.
                using (DdeClient client = new DdeClient("EXCEL", "[Book1.xlsx]2011-06-22"))
                {
                    //[stock.xls]Sheet1!'r2c2'
                    // Subscribe to the Disconnected event.  This event will notify the application when a conversation has been terminated.
                    client.Disconnected += OnDisconnected;

                    // Connect to the server.  It must be running or an exception will be thrown.
                    client.Connect();

                    // Synchronous Execute Operation
                    // client.Execute("mycommand", 60000);

                    // Synchronous Poke Operation
                    //client.Poke("myitem", DateTime.Now.ToString(), 60000);
                    //client.Poke("A3", DateTime.Now.ToString(), 60000);

                    // Syncronous Request Operation
                    //Console.WriteLine("Request: " + client.Request("myitem", 60000));
                    Console.WriteLine("Request: " + client.Request("'r1c1'", 60000));

                    // Asynchronous Execute Operation
                    //client.BeginExecute("mycommand", OnExecuteComplete, client);

                    // Asynchronous Poke Operation
                    //client.BeginPoke("myitem", Encoding.ASCII.GetBytes(DateTime.Now.ToString() + "\0"), 1, OnPokeComplete, client);
                    client.BeginPoke("A2", Encoding.ASCII.GetBytes(DateTime.Now.ToString() + "\0"), 1, OnPokeComplete, client);

                    // Asynchronous Request Operation
                    //client.BeginRequest("myitem", 1, OnRequestComplete, client);
                    client.BeginRequest("A4", 1, OnRequestComplete, client);

                    // Advise Loop
                    client.StartAdvise("myitem", 1, true, 60000);
                    client.Advise += OnAdvise;

                    // Wait for the user to press ENTER before proceding.
                    Console.WriteLine("Press ENTER to quit...");
                    Console.ReadLine();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.GetType().ToString());
                Console.WriteLine(e.Message);
                Console.WriteLine(e.InnerException);
                Console.WriteLine("Press ENTER to quit...");
                Console.ReadLine();
            }
        }
Exemplo n.º 7
0
 public void Test_Request_Overload_2()
 {
     using var server = new TestServer(ServiceName);
     server.Register();
     server.SetData(TopicName, ItemName, 1, Encoding.ASCII.GetBytes(TestData));
     using var client = new DdeClient(ServiceName, TopicName);
     client.Connect();
     var data = client.Request(ItemName, Timeout);
     Assert.AreEqual(TestData, data);
 }
Exemplo n.º 8
0
 public void Test_Request_After_Dispose()
 {
     using var server = new TestServer(ServiceName);
     server.Register();
     server.SetData(TopicName, ItemName, 1, Encoding.ASCII.GetBytes(TestData));
     using var client = new DdeClient(ServiceName, TopicName);
     client.Connect();
     client.Dispose();
     Assert.Throws<ObjectDisposedException>(() => client.Request(ItemName, 1, Timeout));
 }
Exemplo n.º 9
0
    public static string GetFirefoxURL()
    {
        DdeClient dde = new DdeClient("Firefox", "WWW_GetWindowInfo");

        dde.Connect();
        string url = dde.Request("URL", int.MaxValue);

        dde.Disconnect();
        return(url);
    }
Exemplo n.º 10
0
        internal string Request(string item)
        {
            string result = c.Request(item, 1000);

            // TOS sends all values with a null termination character which has to be removed.
            if (null != result)
            {
                result = result.Replace("\0", string.Empty);
            }
            return(result);
        }
Exemplo n.º 11
0
 public void Test_Request_Before_Connect()
 {
     using (TestServer server = new TestServer(ServiceName))
     {
         server.Register();
         server.SetData(TopicName, ItemName, 1, Encoding.ASCII.GetBytes(TestData));
         using (DdeClient client = new DdeClient(ServiceName, TopicName))
         {
             byte[] data = client.Request(ItemName, 1, Timeout);
         }
     }
 }
Exemplo n.º 12
0
 public void Test_Request_Overload_1()
 {
     using (TestServer server = new TestServer(ServiceName))
     {
         server.Register();
         server.SetData(TopicName, ItemName, 1, Encoding.ASCII.GetBytes(TestData));
         using (DdeClient client = new DdeClient(ServiceName, TopicName))
         {
             client.Connect();
             byte[] data = client.Request(ItemName, 1, Timeout);
             Assert.AreEqual(TestData, Encoding.ASCII.GetString(data));
         }
     }
 }
Exemplo n.º 13
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            CreateDatabase(txtCode.Text);

            Start();

            Byte[] b = client.Request("銘柄名称", 1, 6000);
            _name     = Encoding.Default.GetString(b);
            this.Text = _name;

            btnStart.Enabled = false;
            btnStop.Enabled  = true;
            timer1.Enabled   = true;
        }
Exemplo n.º 14
0
        public PluginResult OnTriggered(PluginTriggerEventArgs e)
        {
            DdeClient dde = new DdeClient("Opera", "WWW_GetWindowInfo");

            dde.Connect();
            string result = dde.Request("URL", 1000);

            dde.Disconnect();

            // Result string is in the format "url", "Opera - [title]", ...
            var    parts = result.Trim('"').Split(new string[] { "\",\"" }, StringSplitOptions.None);
            string url   = parts[0].Replace("\\\"", "\"");
            string name  = Regex.Match(parts[1], @"Opera - \[(.*?)\]").Groups[1].Value.Replace("\\\"", "\"");

            return(PluginResult.FromUrl(url, name));
        }
Exemplo n.º 15
0
        private static string GetURL(IntPtr intPtr, string programName, out string url)
        {
            string temp = null;

            if (programName.Equals("firefox"))
            {
                DdeClient dde = new DdeClient("Firefox", "WWW_GetWindowInfo");
                dde.Connect();
                string url1 = dde.Request("URL", int.MaxValue);
                dde.Disconnect();
                temp = url1;
            }

            url = temp;
            return(temp);
        }
Exemplo n.º 16
0
        public PluginResult OnTriggered(PluginTriggerEventArgs e)
        {
            DdeClient dde = new DdeClient("Firefox", "WWW_GetWindowInfo");

            dde.Connect();
            string result = dde.Request("URL", 1000);

            dde.Disconnect();

            // Result string is in the format "uri", "title", ...
            var    parts = result.Trim('"').Split(new string[] { "\",\"" }, StringSplitOptions.None);
            string url   = parts[0].Replace("\\\"", "\"");
            string name  = parts[1].Replace("\\\"", "\"");

            return(PluginResult.FromUrl(url, name));
        }
Exemplo n.º 17
0
 private string GetBrowserURL(string browser)
 {
     try
     {
         DdeClient dde = new DdeClient(browser, "WWW_GetWindowInfo");
         dde.Connect();
         string   url  = dde.Request("URL", int.MaxValue);
         string[] text = url.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
         dde.Disconnect();
         return(text[0].Substring(1));
     }
     catch
     {
         return(null);
     }
 }
Exemplo n.º 18
0
        public void getURLfirefox()
        {
            try
            {
                DdeClient dde = new DdeClient("firefox", "WWW_GetWindowInfo");
                dde.Connect();
                string   url  = dde.Request("URL", int.MaxValue);
                string[] urls = url.Split(new string[] { ",", "\"" }, StringSplitOptions.RemoveEmptyEntries);
                dde.Disconnect();

                listaStron.Add("[firefox]");
                listaStron.Add("URL: " + urls[0]);
                listaStron.Add("Title: " + urls[1]);
            }
            catch
            {
            }
        }
Exemplo n.º 19
0
 public decimal Request(string item)
 {
     try
     {
         if (client.IsConnected == true)
         {
             string result = client.Request(item, 60000);
             return(Convert.ToDecimal(result));
         }
         else
         {
             return(decimal.Zero);
         }
     }
     catch
     {
         return(decimal.Zero);
     }
 }
Exemplo n.º 20
0
        public void Advise(string TagName)
        {
            if (TagNames.Contains(TagName))
            {
                return;
            }

            //ToDo: hier Prüfen, ob TagName gültig ist.
            TagNames.Add(TagName);

            try
            {
                // Create a client that connects to 'myapp|mytopic'.
                using (DdeClient dde_client = new DdeClient(DdeServerName, DdeTopic))
                {
                    // Subscribe to the Disconnected event.  This event will notify the application when a conversation has been terminated.
                    dde_client.Disconnected += OnDisconnected;

                    // Connect to the server.  It must be running or an exception will be thrown.
                    dde_client.Connect();

                    //Lese den Wert initial von DDE Server:
                    string TagValue = dde_client.Request(TagName, 60000);
                    UdpSend(TagName, TagValue);

                    //Lese den Wert von DDE Server neu ein bei Wertänderung.
                    // Advise Loop.
                    dde_client.StartAdvise(TagName, 1, true, 60000);

                    dde_client.Advise += OnAdvise2;

                    while (TagNames.Contains(TagName))
                    {
                        System.Threading.Thread.Sleep(DdeLoopTime);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.GetType().ToString() + "\r\n" + e.Message + "\r\n" + e.StackTrace);
            }
        }
Exemplo n.º 21
0
        private static string Request(string topic, string item, DdeClient client)
        {
            string name = null;


            try
            {
                DateTime start = DateTime.Now;

                // 楽天RSSサービスに接続する
                if (client.IsConnected == false)
                {
                    client.Connect();
                }


                // リクエストを出して値を取得する
                // 第1引数は取得したいアイテム名
                // 第2引数は内部的にDdeClientTransaction()をコールしており
                // wFmtの[CF_TEXT(文字列)]と等価である1を指定する
                // 第3引数はタイムアウトする時間をミリ秒単位で指定する
                DateTime start2 = DateTime.Now;

                byte[] data = client.Request(item, 1, 500);



                name = Encoding.Default.GetString(data).Replace("\0", "");
            }
            catch (NDde.DdeException ddex)
            {
                throw ddex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(name);
        }
Exemplo n.º 22
0
        override public void add(BooleanItem bi)
        {
            Console.WriteLine("Füge hinzu:" + bi.ToString() + " connected=" + connected);
            pool.Add(bi);
            if (connected)
            {
                ps.StartAdvise("%qx" + bi.byteAdr + "." + bi.bitAdr, 1, true, true, 60000, this);
                //ps.BeginRequest("%qx" + bi.byteAdr + "." + bi.bitAdr, 1, OnRequestComplete, ps);

                String s = ps.Request("%qx" + bi.byteAdr + "." + bi.bitAdr, 60000);
                //Console.WriteLine("Request=" + s);

                //Console.WriteLine("%qx" + bi.byteAdr + "." + bi.bitAdr + "=" + s);
                if (s.StartsWith("1"))
                {
                    bi.setState(true);
                }
                else
                {
                    bi.setState(false);
                }

                //Console.WriteLine("state)" + bi.getState());
            }
            else
            {
                Console.WriteLine("** Achtung Eingang hinzugefügt aber noch nicht verbunden !");
            }


            if (listener != null)
            {
                listener.outputChanged(bi);
            }
            else
            {
                Console.WriteLine("** Achtung Listener ist NULL!");
            }
        }
Exemplo n.º 23
0
        override public Boolean connect()
        {
            try
            {
                Console.WriteLine("DDE try Connect");
                ps.Connect();
                ps.StartAdvise(outMarke, 1, true, false, 60000, this);

                /*
                 * ThreadStart del;
                 * del = new ThreadStart(run);
                 * runner = new Thread(del);
                 * runner.Start();
                 */
                inValue    = 0;
                outValue   = 0;
                ps.Advise += OnAdvise;
                String s = ps.Request(outMarke, 60000);
                inValue = Int32.Parse(s);
                Console.WriteLine("inValue festgelegt auf" + inValue);
                connected = true;
                if (listener != null)
                {
                    listener.stateChanged("Connected");
                }
                return(true);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Connect Failed");
                if (listener != null)
                {
                    listener.stateChanged("Connection failed");
                }
                connected = false;
                return(false);
            }
        }
Exemplo n.º 24
0
        /** 新增項目(Item), 並取得該項目的值(Value)
         *   1. 呼叫 DdeClient 的 "Request()" & "StartAdvise" 取得該 Item 的值
         *   2. 利用 service|topic!item 字串為 key
         *   2.1 ht_gdv(HashTable) -> (key, DataGridViewRow)
         *   3. 在 dgItemInfo(DataGridView)新增一列, 顯示項目相關資訊
         *
         *   <param name="dc">     "新增項目" 按鈕事件所在列對應的 DdeClient
         *   <param name="item"> "新增項目" 名稱(Name)
         */
        private void AddItem(DdeClient dc, string item)
        {
            try
            {
                string key = dc.Service + "|" + dc.Topic + "!" + item;

                Item it = new Item();
                it.item = item; it.value = "";

                try
                {
                    //Synchronous Request Operation, 用以取得第一次呼叫的值
                    //eLeader, 康和 並未支援同步呼叫; yeswin/hts 則有支援
                    byte[] data     = dc.Request(item, 1, 60000);
                    int    codepage = Encoding.Default.CodePage; //取得編碼的 codpage. 中文 Default: 950
                    string value    = Encoding.GetEncoding(codepage).GetString(data, 0, data.Length);
                    //it.value = Encoding.ASCII.GetString(data);
                    it.value = value;
                }
                catch (Exception)
                {
                    ;  //忽略該錯誤
                }

                //Add a Row
                int idx = dgItemInfo.Rows.Add(dc.Service, dc.Topic, item, it.value);
                //保存 key 與 所在新增 Row
                ht_gdv.Add(key, dgItemInfo.Rows[idx]);

                // Advise Loop
                dc.StartAdvise(item, 1, true, 60000);
            }
            catch (Exception thrown)
            {
                MessageBox.Show("無法新增項目: \n" + thrown.Message);
            }
        }
Exemplo n.º 25
0
        /// <summary>
        /// Возвращет название активной вкладки браузера
        /// </summary>
        /// <param name="browser">название браузера</param>
        /// <param name="ptr"></param>
        /// <returns>Название вкладки</returns>
        public static string GetBrowserURL(string browser, IntPtr ptr = new IntPtr())
        {
            if (browser == "firefox")
            {
                try
                {
                    DdeClient dde = new DdeClient(browser, "WWW_GetWindowInfo");
                    dde.Connect();
                    string   url  = dde.Request("URL", int.MaxValue);
                    string[] text = url.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
                    dde.Disconnect();
                    return(text[0].Substring(1));
                }
                catch
                {
                    return(null);
                }
            }
            else if (browser == "chrome")
            {
                {
                    string ret = "";

                    AutomationElement elm       = AutomationElement.FromHandle(ptr);
                    AutomationElement elmUrlBar = null;
                    try
                    {
                        var elm1 = elm.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Google Chrome"));
                        if (elm1 == null)
                        {
                            return(null);
                        }
                        var elm2 = TreeWalker.RawViewWalker.GetLastChild(elm1);   // I don't know a Condition for this for finding
                        var elm3 = elm2.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, ""));
                        var elm4 = TreeWalker.RawViewWalker.GetNextSibling(elm3); // I don't know a Condition for this for finding
                        var elm5 = elm4.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ToolBar));
                        var elm6 = elm5.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, ""));
                        elmUrlBar = elm6.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit));
                    }
                    catch
                    {
                        return(null);
                    }
                    AutomationPattern[] patterns = elmUrlBar.GetSupportedPatterns();
                    if (patterns.Length == 1)
                    {
                        try
                        {
                            ret = ((ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0])).Current.Value;
                            //return ret;
                        }
                        catch { }
                        if (ret != "")
                        {
                            if (Regex.IsMatch(ret, @"^(https:\/\/)?[a-zA-Z0-9\-\.]+(\.[a-zA-Z]{2,4}).*$"))
                            {
                                if (!ret.StartsWith("http"))
                                {
                                    ret = "http://" + ret;
                                }
                                return(ret);
                            }
                        }
                    }
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 26
0
        public async Task <object> GetInvoker(IDictionary <string, object> input)
        {
            var services  = (IDictionary <string, object>)input["services"];
            var callbacks = (IDictionary <string, object>)input["callbacks"];

            var clients = new List <DdeClient>();

            foreach (string service in services.Keys)
            {
                var topics = (IDictionary <string, object>)services[service];
                foreach (string topic in topics.Keys)
                {
                    DdeClient client = new DdeClient(service, topic);
                    clients.Add(client);
                }
            }

            var onDisconnected = (Func <object, Task <object> >)callbacks["OnDisconnected"];

            foreach (DdeClient client in clients)
            {
                client.Disconnected += async(object sender, DdeDisconnectedEventArgs args) =>
                {
                    var obj = new Dictionary <string, object>();
                    obj["service"]           = client.Service;
                    obj["topic"]             = client.Topic;
                    obj["isDisposed"]        = args.IsServerInitiated;
                    obj["isServerInitiated"] = args.IsServerInitiated;
                    await Task.Run(async() => await onDisconnected(obj));
                };
            }

            var onAdvise = (Func <object, Task <object> >)callbacks["OnAdvise"];

            foreach (DdeClient client in clients)
            {
                client.Advise += async(object sender, DdeAdviseEventArgs args) =>
                {
                    var obj = new Dictionary <string, object>();
                    obj["service"] = client.Service;
                    obj["topic"]   = client.Topic;
                    obj["item"]    = args.Item;
                    obj["text"]    = Encoding.Default.GetString(args.Data).Trim('\0', ' ').ToString();
                    await Task.Run(async() => await onAdvise(obj));
                };
            }

            return((Func <object, Task <object> >)(async(i) =>
            {
                var opts = (IDictionary <string, object>)i;
                var method = (string)opts["method"];
                var command = opts.ContainsKey("command") ? (string)opts["command"] : null;
                var data = opts.ContainsKey("data") ? (string)opts["data"] : null;
                var format = opts.ContainsKey("format") ? (int)opts["format"] : 1;
                var timeout = opts.ContainsKey("timeout") ? (int)opts["timeout"] : 10000;
                var hot = opts.ContainsKey("hot") ? (bool)opts["hot"] : true;
                var callback = opts.ContainsKey("callback")
                    ? (Func <object, Task <object> >)opts["callback"] : (o) => null;

                var results = new List <IDictionary <string, object> >();

/*
 *                              string item = null;
 *                              if (opts.ContainsKey("item"))
 *                              {
 *                                      item = (string)opts["item"];
 *                              }
 *
 *              if (clients.Count == 1 && item != null) // a single client and only one 'item' is supplied.
 *              {
 *                  var client = clients.First();
 *                                      ((IDictionary<string, object>)services[client.Service])[client.Topic] = new[] { item };
 *
 *                  byte[] result = null;
 *
 *                  switch (method)
 *                  {
 *                      case "Request":
 *                          result = client.Request(item, format, timeout);
 *                          return Encoding.Default.GetString(result);
 *                      case "BeginExecute":
 *                          await Task.Run(() =>
 *                          {
 *                              var tcs = new TaskCompletionSource<bool>();
 *                              AsyncCallback cb = (ar) => { tcs.SetResult(true); };
 *                              client.BeginExecute(command, cb, client);
 *                              var r = tcs.Task.Result;
 *                          });
 *                          break;
 *                      case "BeginPoke":
 *                          await Task.Run(() =>
 *                          {
 *                              var tcs = new TaskCompletionSource<bool>();
 *                              AsyncCallback cb = (ar) => { tcs.SetResult(true); };
 *                              var bytes = Encoding.Default.GetBytes((string)opts["data"] + "\0");
 *                              client.BeginPoke(item, bytes, format, cb, client);
 *                              var r = tcs.Task.Result;
 *                          });
 *                          break;
 *                      case "BeginRequest":
 *                          await Task.Run(() =>
 *                          {
 *                              var tcs = new TaskCompletionSource<byte[]>();
 *                              AsyncCallback cb = (ar) =>
 *                              {
 *                                  tcs.SetResult(client.EndRequest(ar));
 *                              };
 *                              client.BeginRequest(item, format, cb, client);
 *                              result = tcs.Task.Result;
 *                          });
 *                          return Encoding.Default.GetString(result);
 *                      case "BeginStartAdvise":
 *                          await Task.Run(() =>
 *                          {
 *                              var tcs = new TaskCompletionSource<bool>();
 *                              AsyncCallback cb = (ar) => { tcs.SetResult(true); };
 *                              client.BeginStartAdvise(item, format, hot, cb, client);
 *                              var r = tcs.Task.Result;
 *                          });
 *                          break;
 *                      case "BeginStopAdvise":
 *                          await Task.Run(() =>
 *                          {
 *                              var tcs = new TaskCompletionSource<bool>();
 *                              AsyncCallback cb = (ar) => { tcs.SetResult(true); };
 *                              client.BeginStopAdvise(item, cb, client);
 *                              var r = tcs.Task.Result;
 *                          });
 *                          break;
 *                      case "Service":
 *                          return client.Service;
 *                      case "Topic":
 *                          return client.Topic;
 *                      case "Handle":
 *                          return client.Handle;
 *                      case "IsConnected":
 *                          return client.IsConnected;
 *                      case "IsPaused":
 *                          return client.IsPaused;
 *                  }
 *              } */

                if (clients.Count != 0)
                {
                    switch (method)
                    {
                    case "Connect":
                        clients.ForEach((c) => c.Connect());
                        break;

                    case "Disconnect":
                        clients.ForEach((c) => c.Disconnect());
                        break;

                    case "Pause":
                        clients.ForEach((c) => c.Pause());
                        break;

                    case "Resume":
                        clients.ForEach((c) => c.Resume());
                        break;

                    case "Execute":
                        clients.ForEach((c) => c.Execute(command, timeout));
                        break;

                    case "Poke":
                        foreach (DdeClient client in clients)
                        {
                            var topics = (IDictionary <string, object>)services[client.Service];
                            var items = (object[])topics[client.Topic];
                            foreach (string item_ in items)
                            {
                                client.Poke(item_, data, timeout);
                            }
                        }
                        break;

                    case "Request":
                        foreach (DdeClient client in clients)
                        {
                            var topics = (IDictionary <string, object>)services[client.Service];
                            // var items = (object[])topics[client.Topic];
                            var items = (object[])opts["item"];
                            foreach (string item_ in items)
                            {
                                var result = client.Request(item_, format, timeout);
                                var obj = new Dictionary <string, object>();
                                obj["service"] = client.Service;
                                obj["topic"] = client.Topic;
                                obj["item"] = item_;
                                obj["result"] = Encoding.Default.GetString(result).Trim('\0', ' ').ToString();
                                results.Add(obj);
                            }
                        }
                        return results.ToArray();

                    case "StartAdvise":
                        foreach (DdeClient client in clients)
                        {
                            var topics = (IDictionary <string, object>)services[client.Service];
                            var items = (object[])topics[client.Topic];
                            foreach (string item_ in items)
                            {
                                client.StartAdvise(item_, format, hot, timeout);
                            }
                        }
                        break;

                    case "StopAdvise":
                        foreach (DdeClient client in clients)
                        {
                            var topics = (IDictionary <string, object>)services[client.Service];
                            var items = (object[])topics[client.Topic];
                            foreach (string item_ in items)
                            {
                                client.StopAdvise(item_, timeout);
                            }
                        }
                        break;

                    case "Dispose":
                        clients.ForEach((c) => c.Dispose());
                        break;

                    case "Service":
                        return clients.Select((c) => c.Service).ToArray();

                    case "Topic":
                        return clients.Select((c) => c.Topic).Distinct().ToArray();

                    case "Handle":
                        return clients.Select((c) => c.Handle).ToArray();

                    case "IsConnected":
                        return clients.All((c) => c.IsConnected);

                    case "IsPaused":
                        return clients.All((c) => c.IsPaused);
                    }
                }

                return null;
            }));
        }
Exemplo n.º 27
0
        /// <summary>
        /// Get URL's from Browsers
        /// </summary>

        #region URL's from Chrome

        public static string GetURL(string Browser)
        {
            string ret = "";

            Process[] procs = Process.GetProcessesByName(Browser);

            foreach (Process proc in procs)
            {
                if (proc.MainWindowHandle == IntPtr.Zero)
                {
                    continue;
                }

                AutomationElement elmChrome       = AutomationElement.FromHandle(proc.MainWindowHandle);
                AutomationElement elmUrlBarChrome = null;

                // Google Chrome

                if (Browser == Settings.GoogleChrome_Browser)
                {
                    try
                    {
                        var elm1 = elmChrome.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Google Chrome"));
                        if (elm1 == null)
                        {
                            continue;
                        }
                        var elm2 = TreeWalker.RawViewWalker.GetLastChild(elm1);
                        var elm3 = elm2.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, ""));
                        var elm4 = TreeWalker.RawViewWalker.GetNextSibling(elm3);
                        var elm5 = elm4.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ToolBar));
                        var elm6 = elm5.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, ""));
                        elmUrlBarChrome = elm6.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit));
                    }
                    catch { continue; }

                    if (elmUrlBarChrome == null)
                    {
                        continue;
                    }
                    if ((bool)elmUrlBarChrome.GetCurrentPropertyValue(AutomationElement.HasKeyboardFocusProperty))
                    {
                        continue;
                    }

                    AutomationPattern[] patterns = elmUrlBarChrome.GetSupportedPatterns();

                    if (patterns.Length == 1)
                    {
                        try
                        {
                            ret = ((ValuePattern)elmUrlBarChrome.GetCurrentPattern(patterns[0])).Current.Value;
                            return(ret);
                        }
                        catch { }

                        if (ret != "")
                        {
                            if (Regex.IsMatch(ret, @"^(https:\/\/)?[a-zA-Z0-9\-\.]+(\.[a-zA-Z]{2,4}).*$"))
                            {
                                if (!ret.StartsWith("http"))
                                {
                                    ret = "http://" + ret;
                                }
                                return(ret);
                            }
                        }
                        continue;
                    }
                    return(ret);
                }

                // Mozilla Firefox

                if (Browser == Settings.MozillaFirefox_Browser)
                {
                    try
                    {
                        DdeClient dde = new DdeClient("firefox", "WWW_GetWindowInfo");
                        dde.Connect();
                        string   url  = dde.Request("URL", int.MaxValue);
                        string[] text = url.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
                        dde.Disconnect();
                        ret = text[0].Substring(1);

                        return(ret);
                    }
                    catch { }
                }
            }

            return(ret);

            #endregion
        }