/// <summary> /// 开始监控火狐浏览器 /// </summary> public List<WebSiteModel> MnitorFireFox() { try { string sUrl = 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[] { '"' }); } return urls; } catch { return null; } }
public static void Main(string[] args) { // 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("myapp", "mytopic")) { // 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); // Syncronous Request Operation Console.WriteLine("Request: " + client.Request("myitem", 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); // Asynchronous Request Operation client.BeginRequest("myitem", 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.ToString()); Console.WriteLine("Press ENTER to quit..."); Console.ReadLine(); } }
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); }
public PluginResult OnTriggered(PluginTriggerEventArgs e) { DdeClient dde = new DdeClient("IExplore", "WWW_GetWindowInfo"); dde.Connect(); string result = dde.Request("0xFFFFFFFF,sURL,sTitle", 1000); dde.Disconnect(); // Result string is in the format "uri", "title"\0 var parts = result.Trim('\0').Trim('"').Split(new string[] { "\",\"" }, StringSplitOptions.None); string url = parts[0].Replace("\\\"", "\""); string name = parts[1].Replace("\\\"", "\""); return PluginResult.FromUrl(url, name); }
// // usage: GetBrowserURL("opera") or GetBrowserURL("firefox") // public static 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; } }
public static string GetUrl(string browser) { try { DdeClient dde = new DdeClient(browser, "WWW_GetWindowInfo"); // Using DDE-lib to connect and get information from the firefox browser 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 { MessageBox.Show("Is your firefox open?", "Error"); // If firefox isnt open return null; } }
/// <summary> /// Gets the current status of the ChemStation app via DDE and maps it to our model object. /// </summary> /// <returns>The ORMed ChemStation Status.</returns> public ChemStationStatus GetCurrentStatus() { var status = new ChemStationStatus(); status.Time = DateTime.Now; var appName = string.Empty; try { appName = GetChemStationAppName(); } catch (ApplicationException e) { status.Status = e.Message; status.MethodName = string.Empty; status.SequenceName = string.Empty; return status; } using (DdeClient client = new DdeClient(appName, _DDETopicName)) { client.Connect(); foreach (var variable in _chemStationVariableNameToPropertyMap) { var rawVariable = client.Request(variable.Key, 60000); // Use reflection to map the raw variable just extracted from ChemStation to the model object. if (variable.Value.PropertyType == typeof(bool)) { var val = rawVariable[0] == '1' ? true : false; _chemStationVariableNameToPropertyMap[variable.Key].SetValue(status, val, null); } else { // String variables tend to come out of ChemStation with a bizarre amount of control characters followed by jibberish at the end. var val = rawVariable.Remove(rawVariable.IndexOf(rawVariable.Where(c => char.IsControl(c)).First())); _chemStationVariableNameToPropertyMap[variable.Key].SetValue(status, val, null); } } } return status; }
/** 新增項目(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 ) { ; //忽略該錯誤 } // Advise Loop dc.StartAdvise(item, 1, true, 60000); //Add a Row int idx = dgItemInfo.Rows.Add(dc.Service, dc.Topic, item, it.value); //保存 key 與 所在新增 Row ht_gdv.Add(key, dgItemInfo.Rows[idx]); } catch (Exception thrown) { MessageBox.Show("無法新增項目: \n" + thrown.Message); } }
/// <summary> /// This method may potentially be refactored into its own interface/class to deal with other versions of ChemStation. The /// version currently being used requires the DDE app name to be composed of 'hpcore' + the process number of the instance of /// ChemStation that is currently online (connected to an instrument). /// </summary> /// <returns>The DDE App name used to connect to ChemStation via DDE as a string.</returns> private string GetChemStationAppName() { var potentialChemStations = Process.GetProcesses().Where(x => x.ProcessName.ToUpper().Contains(_windowsAppName)); foreach (var chemStation in potentialChemStations) { using (DdeClient client = new DdeClient(_baseDDEAppName + chemStation.Id.ToString(), _DDETopicName)) { client.Connect(); var offline = client.Request("_OFFLINE", 60000)[0] == '1' ? true : false; if (!offline) return (_baseDDEAppName + chemStation.Id.ToString()); } } throw new ApplicationException("Unable to find an online ChemStation process."); }
public void Test_Request_Overload_2() { 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(); string data = client.Request(ItemName, Timeout); Assert.AreEqual(TestData, data); } } }
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); } } }
private string GetURL(DdeClient dde, string browser) { try { //connect to the browsers ConnectDde (); if (browser=="Firefox") if (Is_firefox_alive==false) return "{error#1}"; else if (browser=="Opera") if (Is_opera_alive==false) return "{error#1}"; //get the url string url=dde.Request ("URL", int.MaxValue); string[] text=url.Split (new string [] {"\",\"", "\""}, StringSplitOptions.RemoveEmptyEntries); return text[0]; } catch { if (browser=="Firefox") Is_firefox_alive=false; else if (browser=="Opera") Is_opera_alive=false; return "{error#2}"; } }
private void button1_Click(object sender, EventArgs e) {// requestArray "SN\"ISS\" AZ75.9 EL-49.8 DN130165152 UP121751728 RA10281.505 RR4.255 LO21.7041 LA3.9309 AL413.780 TU20121221221254 TL20121221161254\r\n\0" string DDEmsg = client.Request("TrackingDataEx", 5000); MessageBox.Show("Got request!" + DDEmsg); }
public async Task<object> GetInvoker(IDictionary<string, object> input) { var services = (IDictionary<string, object>)input["services"]; var callbacks = (IDictionary<string, object>)input["callbacks"]; var encoding = input.ContainsKey("encoding") ? Encoding.GetEncoding((string)input["encoding"]) : null; var decode = encoding == null ? (Func<object, string>)((s) => (string)s) : (s) => HttpUtility.UrlDecode((string)s, encoding); 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(decode(service), decode(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"] = args.Text; 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 = decode((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 >= 1) { 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(decode(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]).Select(decode); 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); 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]).Select(decode); 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]).Select(decode);; 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; }); }
public static string GetFirefoxUrl() { var dde = new DdeClient("Firefox", "WWW_GetWindowInfo"); dde.Connect(); string url = dde.Request("URL", int.MaxValue); dde.Disconnect(); return url; }