DdeInitiate¶
DdeInitiate leitet eine DDE-Konversation zwischen UniPlot (Client) und einer anderen Anwendung (Server) ein.
-
hConv = DdeInitiate(ssService, ssTopic)
Returnwert
hConv ist die Kanalnummer (Handle) mit der die weitere Konversation durchgeführt werden kann. Im Fehlerfall liefert DdeInitiate den Wert 0.
Parameter
-
ssService
ssService ist ein Service-Name. Normalerweise ist ssService der Name einer Exe-Datei ohne die Dateinamenserweiterung. Für UniPlot ist der Service-Name
"UniPlotSL"
.
-
ssTopic
ssTopic ist das Thema der Konversation. Bei den meisten Anwendungen sind Dokument-Namen zulässige Themen. Die meisten Anwendungen unterstützen außerdem das Thema
"System"
.
Kommentar
Mit der Funktion ObjShow kann eine Liste aller geöffneten DDE-Kanäle angezeigt werden.
Falls beim ersten Zugriff der Aufbau der DDE-Verbindung fehl schlägt, versucht die Funktion innerhalb von 500 ms die Verbindung herzustellen.
Beispiel
Die folgende DDE-Konversation startet Excel und fügt die Zahlen 1, 2, 3 und 4 in eine Excel-Tabelle ein.
Zunächst wird Excel mit der Funktion system gestartet. Die 0 des dritten Parameters bewirkt, daß die system Funktion sofort nach dem Aufruf zurückkehrt.
def FindApp(ssApp)
{
RegConnect("HKEY_LOCAL_MACHINE")
b = RegOpen("Software\Classes\" + ssApp + "\CLSID");
s = RegGetValue("");
RegOpen("Software\Classes\CLSID\" + s + "\LocalServer32")
return RegGetValue("");
}
s = FindApp("Excel.Application");
if (s == "") {
MessageBoxError("Excel not found");
return;
}
system(s, SW_SHOW, 0);
Der folgende Aufruf öffnet einen Kanal zum Thema "System"
.
hConv = DdeInitiate("Excel", "System");
DdeRequest erfragt die System-Themen.
ssTopics = DdeRequest(hConv, "Topics");
Der nächste Aufruf öffnet einen Kanal zum ersten Thema (das erste Excel-Tabellen Blatt).
hConvTable = DdeInitiate("Excel", strtok(ssTopics, "\t")[2]);
Die Funktion DdePoke schreibt die Zahlen 1,2,3,4 in das erste
Excel-Tabellen-Blatt. Z1S1:Z2S2
(Zeile/Spalte) ist der Zellbereich in der
deutschen Excel Version. In der englischen Version wird der Zellbereich durch
R1C1:R2C2
(Row/Column) festgelegt. Die Zahlen einer Zeile müssen durch
Tabulator-Zeichen ("\t"
) getrennt werden, die Zeilen werden durch die Zeichen
("\r\n"
) getrennt.
DdePoke(hConvTable, "Z1S1:Z2S2", "1\t2\r\n3\t4")
Nach Beendigung der Konversation werden die geöffneten Kanäle geschlossen. Es könnte auch DdeTerminateAll verwendet werden, um alle offenen Känale zu schließen.
DdeTerminate(hConvTable);
DdeTerminate(hConv);
Beispiel
// HKEY_CURRENT_USER\Software\Classes\CLSID\{F0C8D974-51B6-11D0-BE90-008048AA0191}\LocalServer32
def FindUniPlot()
{
RegConnect("HKEY_CURRENT_USER")
b = RegOpen("Software\\Classes\\UniPlot.Application\\CLSID");
s = RegGetValue("");
RegOpen("Software\\Classes\\CLSID\\" + s + "\\LocalServer32")
return RegGetValue("");
}
def FindApp(ssApp)
{
RegConnect("HKEY_LOCAL_MACHINE")
b = RegOpen("Software\\Classes\\" + ssApp + "\\CLSID");
s = RegGetValue("");
RegOpen("Software\\Classes\\CLSID\\" + s + "\\LocalServer32")
return RegGetValue("");
}
def test_DdeExecute()
{
s = FindApp("Excel.Application");
if (s == "") {
MessageBoxError("Excel not found");
return;
}
system(s, SW_HIDE, 0);
hConv = DdeInitiate("Excel", "System");
DdeExecute(hConv, "[OPEN(\"" + GetRootDirectory() + "samples\\map-data.xls\")]")
hconvTab = DdeInitiate("Excel", "map-data.xls");
ssData = DdeRequest(hconvTab, "z1s1:z16384s255");
ssData = strfindreplace(ssData, ",", ".");
DdeExecute(hConv, "[CLOSE()]");
DdeExecute(hConv, "[QUIT()]");
DdeTerminateAll();
hedit = EdCreate();
EdSetText(hedit, ssData);
}
test_DdeExecute();
Siehe auch
Überblick DDE, DdeTerminate, DdeTerminateAll, DdePoke, DdeExecute, DdeRequest
id-1361586