探討如何使用 JavaScript 實作 DDE

PHPz
發布: 2023-04-25 11:24:11
原創
874 人瀏覽過

JavaScript 是一門通用腳本語言,主要用於在前端網頁中實現互動功能。然而,我們也可以使用它來實現各種各樣的操作,甚至是將其用來實現 DDE(Dynamic Data Exchange)。

DDE 是一種 Windows 應用程式間通訊(IPC)的方式。它可以允許兩個或多個程式之間共享資料。具體而言,它允許一個 Windows 應用程式將資料傳遞給另一個,通常是另一個正在運行的應用程式。

在本文中,我們將探討如何使用 JavaScript 實作 DDE。在開始之前,請確保您具有使用 JavaScript 和 Windows 的基本知識。

了解 DDE

在開始之前,讓我們先簡單地了解 DDE。 DDE 在 Windows 中是 IPC(Inter-Process Communication)技術。它允許應用程式發送和接收各種訊息和命令。正如我們前面提到的,它允許一個應用程式向另一個應用程式發送資料。這被稱為“發送方”應用程式和“接收方”應用程式。

要了解 DDE 的功能,您需要了解以下兩個概念:

  • DDE 用戶端(Client):它是我們傳送資料的應用程式。
  • DDE 服務端(Server):它是我們接收資料的應用程式。

當 DDE 用戶端向 DDE 服務端發送資料時,它首先將資料打包為一個 DDE 交易。這個DDE 事務包括以下內容:

  • 應用程式名稱
  • 主題名稱
  • 項目名稱
  • 操作類型(例如,開啟、關閉、發送等)
  • 狀態(成功或失敗)

DDE 用戶端將DDE 事務傳送到DDE 服務端。當 DDE 服務端收到交易時,它會解析事務,提取資料(如果需要)並向 DDE 用戶端發送回應。

現在,讓我們看看如何使用 JavaScript 實作 DDE。

實作 DDE 用戶端

在 JavaScript 中實作 DDE 用戶端需要使用 ActiveXObject 物件。此物件是 Microsoft 開發的「ActiveX 控制項」的一種,它提供了通用的 Windows 元件,使 Web 開發人員可以執行許多 Windows 操作。

接下來,我們將使用 ActiveXObject 物件來建立一個 DDE 用戶端。

以下是一個簡單的範例,示範如何使用JavaScript 建立一個DDE 用戶端:

function sendDDEMessage(appName, topicName, itemName, command) {
  var ddeClient = new ActiveXObject("DDE.DdeClient");
  ddeClient.Connect(appName, topicName);

  var ddeTransaction = ddeClient.BeginTransaction();
  var ddeData = ddeTransaction.AddItem(itemName);
  ddeTransaction.SetData(ddeData, command);
  ddeTransaction.SetFormats(ddeData, 1); // 1 = CF_TEXT
  ddeTransaction.CommitTransaction();
  
  ddeClient.Disconnect();
}
登入後複製

如上所示,sendDDEMessage 函數接受四個參數:

  • #appName:包含DDE 服務端的應用程式名稱。
  • topicName:包含 DDE 服務端上下文的名稱。
  • itemName:包含在 DDE 服務端應用程式中要存取的物件的名稱。
  • command:要傳送到 DDE 服務端的命令或訊息。

函數首先使用 new ActiveXObject("DDE.DdeClient") 建立一個 DDE 用戶端。接下來,它使用 Connect() 方法將客戶端連接到指定的應用程式和主題。

接下來,它會建立一個 DdeTransaction 實例,並使用 AddItem() 方法新增要存取的項目。然後,使用 SetData() 方法將要傳送的命令或訊息設定到 DdeData 實例中。最後,使用 SetFormats() 方法設定資料格式,這裡使用的是 1,表示 CF_TEXT 格式。

最後,函數使用 CommitTransaction() 方法提交事務,並使用 Disconnect() 方法斷開客戶端與 DDE 服務端的連線。

實作 DDE 服務端

雖然 DDE 服務端的實作比較複雜,但我們可以使用 JavaScript 和 ActiveXObject 物件來輕鬆地模擬它。

在本例中,我們將模擬一個具有以下功能的 DDE 服務端:

  • 它可以接收來自客戶端的命令,並將其保存在一個陣列中。
  • 當它接收到一個名為 “get_commands” 的命令時,它將使用 returnCommandList() 方法傳回一個包含先前收到的所有命令的字串。

以下是DDE 服務端的JavaScript 程式碼:

function DDEServer(appName, topicName) {
  var self = this;
  self.appName = appName;
  self.topicName = topicName;
  self.commandList = [];

  self.connect = function() {
    self.ddeServer = new ActiveXObject("DDE.DdeServer");
    self.ddeServer.Register(appName, topicName);
  };

  self.disconnect = function() {
    self.ddeServer.Unregister();
  };

  self.handleTransaction = function(ddeTransaction) {
    var command = ddeTransaction.GetData(ddeTransaction.FirstItem);
    self.commandList.push(command);
  };

  self.returnCommandList = function() {
    return self.commandList.join('\r\n');
  };
}
登入後複製

如上所示,DDEServer 建構子接受兩個參數:appNametopicName,這些參數是用於連接到DDE 服務端的應用程式和主題。

connect() 方法使用new ActiveXObject("DDE.DdeServer") 建立一個DDE 服務端,並使用Register() 方法在指定的應用程式和主題下註冊它。

disconnect() 方法使用 Unregister() 方法登出 DDE 服務端。

當 DDE 服務端收到交易時,handleTransaction() 方法被呼叫。它從事務中獲取數據,並將其添加到服務端的命令列表中。

最後,當服務端接收到名為「get_commands」的命令時,returnCommandList() 方法將使用join() 方法將命令清單中的所有命令連接到一個字串中,並將其傳回。

测试示例

现在我们已经开始实现 DDE 客户端和服务端,让我们来看看一些示例。为了测试客户端和服务端,我们将创建一个简单的 HTML 页面,该页面包含两个文本框和两个按钮。第一个文本框将用于输入命令,第二个文本框将用于显示服务器端的响应。

在按钮上单击时,客户端将尝试连接到服务器端,并将命令发送到它。一旦服务器端接收到命令,它将保存它,并返回一个包含所有已接收到的命令的字符串。

以下是示例代码:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>DDE Client Demo</title>
  </head>
  <body>
    <h1>DDE Client Demo</h1>
    <label for="command">Enter a command:</label>
    <input id="command" type="text">
    <button id="sendCommand">Send Command</button>
    <br>
    <label for="output">Output:</label>
    <textarea id="output"></textarea>
    <script>
      var ddeServer = new DDEServer("dde_demo", "demo_topic");
      ddeServer.connect();

      function sendCommand() {
        var command = document.getElementById("command").value;
        sendDDEMessage("dde_demo", "demo_topic", "command", command);
        var output = document.getElementById("output");
        output.value = sendDDEMessage("dde_demo", "demo_topic", "get_commands", "");
      }

      document.getElementById("sendCommand").addEventListener("click", sendCommand);
    </script>
  </body>
</html>
登入後複製

如上所示,我们使用了 var ddeServer = new DDEServer("dde_demo", "demo_topic") 创建了一个 DDE 服务端,并使用 ddeServer.connect() 连接到它。

我们还定义了 sendCommand() 函数,该函数将获取命令并使用 sendDDEMessage() 函数将其发送到 DDE 服务端。然后,它将获取 DDE 服务端的响应并将其设置为第二个文本框中的值。

最后,我们监听按钮上的单击事件,并在单击时调用 sendCommand() 函数。

结论

在本文中,我们了解了什么是 DDE 和如何使用 JavaScript 和 ActiveXObject 对象实现它。虽然这种方法不是最佳的,但它可以让我们学习如何在 JavaScript 中使用 ActiveXObject 对象和 Windows API,以及如何进行应用程序和操作系统级别的操作。

以上是探討如何使用 JavaScript 實作 DDE的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板