使用C#可以与网页和本地桌面程序进行通信吗?

时间:2014-08-29 07:23:45

标签: c# wpf

我是C#和Microsoft Visual Studio的新手,所以,考虑到这一点,我正在自学并开始一个项目(借口我缺乏词汇量)。到目前为止我所拥有的WPF项目看起来不错但功能却很少。我设想的一般功能是:

  1. 主窗口有多个按钮,可导航到多个页面。 (已实现此目的)
  2. 在导航到的每个页面上,我想显示来自网站的信息。 (?)
  3. 使用网络信息,我想在桌面上控制另一个程序。 (?)
  4. 使用C#可以得分(2)和(3)吗?

    让我举例说明一下。一个人将信息(用户名)提交到网站。该网站与服务器联系并发回有关该人/用户名的数据。然后,该网站将该数据和用户名存储在用户可见的列表中。通过程序主窗口有五个不同的列表和五个可导航的xaml页面。我想在每个页面上显示每个列表。使用网站上现有的数据,现在我的程序,我想发送一个命令到桌面上运行的程序/脚本,让它执行一个动作(使用AutoHotKey和AutoScriptWriter在某处键入用户名,这实际上是更新一个特殊的记事本文件)。

    我正在寻找的答案不是"这就是你如何具体做你所要求的"而是#34;在C#中使用这些工具/功能并从那里开始#34;。如果我想从这个计划中得到什么,我有这些后续问题:

    1. 提交给该网站的信息将保持不变,通过该程序查看的网络信息是否会实时更新/刷新?
    2. 创建一个全新的网站来使用该程序比使用现有网站并从中抓取信息更有益吗?
    3. 程序是否可以通过Oracle VirtualBox与本地虚拟桌面上的其他程序通信?
    4. 如果有人在他们的计算机上使用过这个程序,他们可以通过互联网在我的电脑上命令程序/脚本吗?

2 个答案:

答案 0 :(得分:0)

快速回答您的各种问题:

  1. 不是问题......
  2. 网站只是位于网络服务器上定义的逻辑之上的用户界面 - 如果您可以与逻辑(即Web服务)交互而不是与原始UI层(HTML)交互,那么您应该这样做。您可以找到一个可以呈现HTML信息的控件,但这不太可能是您想要做的最佳方法。
  3. 是的,通过带有Windows Shell的COMInterop - 非常高级的主题,我希望您能够很好地理解Windows SDK,内存管理和非托管,不安全的基于指针的代码。
  4. 后续问题:

    1. 我不明白这个问题 - 您不断提交信息,或者您提交的信息总是一样的?当您想要刷新网页时,您需要触发Web信息的刷新(即请求特定页面)。
    2. 最有益的是根本不会使用用户界面(网页)并建立到逻辑层的链接而是直接通过Web服务请求数据 - 它可以让您在WPF应用程序中获得最大的控制权。
    3. 是的,但同样是非常先进的东西 - 它并不简单或容易,并且带来了许多挑战,例如VirtualBox的本地安全和自动化API。
    4. 令人怀疑,除非您将代码编写为支持互联网,这又是一个高级主题。

答案 1 :(得分:0)

如果我理解了您的情况,您可以使用WebClient类与您的Web服务器进行通信,并使用返回的字符串来生成内容。

WebClient web = new WebClient();
web.Headers.Add("HTTP Header", "Header Value");
web.Headers.Add("POST Data Header", "POST Data Value");
string response = web.DownloadString(new Uri("https://www.myserver.net/mypage"));
// Implement your processing on response variable here to generate and present data to the user.

您可以使用StandardOutput类的Process来获取本地计算机上任何程序的输出。

Process proc = new Process();
proc.StartInfo.FileName = @"C:\Path\to\my\executable.exe";
proc.Start();
proc.StartInfo.RedirectStandardOutput = true;
// Start the process...
proc.Start();
// Retrieve the output...
string output = proc.StandardOutput.ReadToEnd();