Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>From MS Platform SDK: "A client can request a hot advise loop with a server by specifying the XTYP_ADVSTART transaction type in a call to DdeClientTransaction".</p> <pre><code>//#include "stdafx.h" #include "windows.h" #include "ddeml.h" #include "stdio.h" char szApp[] = "EXCEL"; char szTopic[] = "C:\\Test.xls"; char szCmd1[] = "[APP.MINIMIZE()]"; char szItem1[] = "R1C1"; char szDesc1[] = "A1 Contains: "; char szItem2[] = "R2C1"; char szDesc2[] = "A2 Contains: "; char szItem3[] = "R3C1"; char szData3[] = "Data from DDE Client"; HSZ hszApp, hszTopic; DWORD idInst=0; HDDEDATA CALLBACK DdeCallback( UINT uType, // Transaction type. UINT uFmt, // Clipboard data format. HCONV hconv, // Handle to the conversation. HSZ hsz1, // Handle to a string. HSZ hsz2, // Handle to a string. HDDEDATA hdata, // Handle to a global memory object. DWORD dwData1, // Transaction-specific data. DWORD dwData2) // Transaction-specific data. { if(uType==XTYP_ADVDATA &amp;&amp; uFmt==CF_TEXT) { HSZ hszItem1 = DdeCreateStringHandle(idInst, szItem1, 0); HSZ hszItem2 = DdeCreateStringHandle(idInst, szItem2, 0); char szResult[255]; if((!DdeCmpStringHandles(hsz1, hszTopic)) &amp;&amp; (!DdeCmpStringHandles(hsz2, hszItem1))) { DdeGetData(hdata, (unsigned char *)szResult, 255, 0); printf("%s - %s\n", szItem1,szResult); } else if((!DdeCmpStringHandles(hsz1, hszTopic)) &amp;&amp; (!DdeCmpStringHandles(hsz2, hszItem2))) { DdeGetData(hdata, (unsigned char *)szResult, 255, 0); printf("%s - %s\n", szItem2,szResult); } } return 0; } void DDEExecute(DWORD idInst, HCONV hConv, char* szCommand) { HDDEDATA hData = DdeCreateDataHandle(idInst, (LPBYTE)szCommand, lstrlen(szCommand)+1, 0, NULL, CF_TEXT, 0); if (hData==NULL) { printf("Command failed: %s\n", szCommand); } else { DdeClientTransaction((LPBYTE)hData, 0xFFFFFFFF, hConv, 0L, 0, XTYP_EXECUTE, TIMEOUT_ASYNC, NULL); } } void DDERequest(DWORD idInst, HCONV hConv, char* szItem, char* sDesc) { HSZ hszItem = DdeCreateStringHandle(idInst, szItem, 0); HDDEDATA hData = DdeClientTransaction(NULL,0,hConv,hszItem,CF_TEXT, XTYP_REQUEST,5000 , NULL); if (hData==NULL) { printf("Request failed: %s\n", szItem); } else { char szResult[255]; DdeGetData(hData, (unsigned char *)szResult, 255, 0); printf("%s%s\n", sDesc, szResult); } } void DDEPoke(DWORD idInst, HCONV hConv, char* szItem, char* szData) { HSZ hszItem = DdeCreateStringHandle(idInst, szItem, 0); DdeClientTransaction((LPBYTE)szData, (DWORD)(lstrlen(szData)+1), hConv, hszItem, CF_TEXT, XTYP_POKE, 3000, NULL); DdeFreeStringHandle(idInst, hszItem); } int main(int argc, char* argv[]) { char szCmd2[] = "[SELECT(\"R3C1\")][FONT.PROPERTIES(,\"Bold\")]";//[SAVE()][QUIT()]"; //DDE Initialization UINT iReturn; iReturn = DdeInitialize(&amp;idInst, (PFNCALLBACK)DdeCallback, APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0 ); if (iReturn!=DMLERR_NO_ERROR) { printf("DDE Initialization Failed: 0x%04x\n", iReturn); Sleep(1500); return 0; } //Start DDE Server and wait for it to become idle. HINSTANCE hRet = ShellExecute(0, "open", szTopic, 0, 0, SW_SHOWNORMAL); if ((int)hRet &lt; 33) { printf("Unable to Start DDE Server: 0x%04x\n", (UINT)hRet); Sleep(1500); DdeUninitialize(idInst); return 0; } Sleep(1000); //DDE Connect to Server using given AppName and topic. HCONV hConv; hszApp = DdeCreateStringHandle(idInst, szApp, 0); hszTopic = DdeCreateStringHandle(idInst, szTopic, 0); hConv = DdeConnect(idInst, hszApp, hszTopic, NULL); DdeFreeStringHandle(idInst, hszApp); DdeFreeStringHandle(idInst, hszTopic); if (hConv == NULL) { printf("DDE Connection Failed.\n"); Sleep(1500); DdeUninitialize(idInst); return 0; } //Execute commands/requests specific to the DDE Server. DDEExecute(idInst, hConv, szCmd1); DDERequest(idInst, hConv, szItem1, szDesc1); DDERequest(idInst, hConv, szItem2, szDesc2); DDEPoke(idInst, hConv, szItem3, szData3); DDEExecute(idInst, hConv, szCmd2); HSZ hszItem = DdeCreateStringHandle(idInst, szItem1, 0); DdeClientTransaction(NULL,0,hConv,hszItem,CF_TEXT, XTYP_ADVSTART,5000 , NULL); BOOL bRet; MSG msg; while( (bRet = GetMessage( &amp;msg, NULL, 0, 0 )) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&amp;msg); DispatchMessage(&amp;msg); } } //DDE Disconnect and Uninitialize. DdeDisconnect(hConv); DdeUninitialize(idInst); Sleep(3000); return 1; } </code></pre> <p>Hope this help</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload