Example #1
0
bool WdeUpdateDDEEditSession( void )
{
    WdeResInfo          *rinfo;
    WdeResDlgItem       *ditem;
    HDDEDATA            hdata;
    bool                ok;

    hdata = (HDDEDATA)NULL;
    ditem = WdeGetDlgItem();
    ok = (WdeClientConv != (HCONV)NULL && ditem != NULL);

    if( ok ) {
        hdata = WdeCreateResData( ditem );
        ok = (hdata != (HDDEDATA)NULL);
    }

    if( ok ) {
        ok = DdeClientTransaction( (LPBYTE)hdata, -1, WdeClientConv,
                                   hDataItem, WdeDataClipbdFormat,
                                   XTYP_POKE, TIME_OUT, NULL ) != 0;
    }

    if( hdata != (HDDEDATA)NULL ) {
        DdeFreeDataHandle( hdata );
    }

    if( ok ) {
        hdata = WdeCreateResNameData( ditem->dialog_name, ditem->is32bit );
        ok = (hdata != (HDDEDATA)NULL);
    }

    if( ok ) {
        ok = DdeClientTransaction( (LPBYTE)hdata, -1, WdeClientConv,
                                   hNameItem, WdeDataClipbdFormat,
                                   XTYP_POKE, TIME_OUT, NULL ) != 0;
    }

    if( hdata != (HDDEDATA)NULL ) {
        DdeFreeDataHandle( hdata );
    }

    if( ok ) {
        rinfo = WdeGetCurrentRes();
        WdeSetResModified( rinfo, FALSE );
    }

    return( ok );
}
word
pl_dde_execute(term_t handle, term_t command, term_t timeout)
{ int hdl;
  char *cmdstr;
  HDDEDATA Hvalue, data;
  DWORD result;
  long tmo;

  if ( !get_conv_handle(handle, &hdl) ||
       !PL_get_chars_ex(command, &cmdstr, CVT_ALL) ||
       !PL_get_long_ex(timeout, &tmo) )
    fail;

  if ( tmo <= 0 )
    tmo = TIMEOUT_VERY_LONG;

  if ( !(data = DdeCreateDataHandle(ddeInst, cmdstr, strlen(cmdstr)+1,
				    0, 0, CF_TEXT, 0)) )
    return dde_warning("dde_execute/3");

  Hvalue = DdeClientTransaction((LPBYTE) data, (DWORD) -1,
				conv_handle[hdl], 0L, 0,
				XTYP_EXECUTE, (DWORD) tmo, &result);
  if ( Hvalue )
    succeed;

  return dde_warning("execute");
}
Example #3
0
/*
 * IEUpdateDDEEditSession
 */
BOOL IEUpdateDDEEditSession( void )
{
    img_node            *node;
    HDDEDATA            hdata;
    BOOL                ok;

    hdata = (HDDEDATA)NULL;
    node = IEGetCurrentImageNode();
    ok = (IEClientConv != (HCONV)NULL && node != NULL && EditFormat != DDENone);

    if( ok ) {
        hdata = IECreateResData( node );
        ok = (hdata != (HDDEDATA)NULL);
    }

    if( ok ) {
        ok = DdeClientTransaction( (LPBYTE)hdata, -1, IEClientConv, hDataItem,
                                         IEClipFormats[EditFormat].format,
                                         XTYP_POKE, TIME_OUT, NULL ) != 0;
    }

    if( hdata != (HDDEDATA)NULL ) {
        DdeFreeDataHandle( hdata );
    }

    if( ok ) {
        SetIsSaved( node->hwnd, TRUE );
    }

    return( ok );

} /* IEUpdateDDEEditSession */
word
pl_dde_poke(term_t handle, term_t item, term_t data, term_t timeout)
{ int hdl;
  char *datastr;
  HDDEDATA Hvalue;
  HSZ Hitem;
  long tmo;

  if ( !get_conv_handle(handle, &hdl) ||
       !get_hsz(item, &Hitem) )
    fail;
  if ( !PL_get_chars(data, &datastr, CVT_ALL) )
    return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_text, data);
  if ( !PL_get_long(timeout, &tmo) )
    return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_integer, timeout);

  if ( tmo <= 0 )
    tmo = TIMEOUT_VERY_LONG;

  Hvalue = DdeClientTransaction(datastr, strlen(datastr)+1,
				conv_handle[hdl], Hitem, CF_TEXT,
				XTYP_POKE, (DWORD)tmo, NULL);

  if ( !Hvalue )
    return dde_warning("poke");

  succeed;
}
Example #5
0
bool WREPokeData( HCONV conv, void *data, int size, bool retry )
{
    DWORD       result;
    UINT        err;
    bool        timeout;
    bool        ret;
    UINT        tries;

    if( conv == (HCONV)NULL || data == NULL || size == 0 ) {
        return( FALSE );
    }

    if( retry ) {
        tries = 8;
    } else {
        tries = 0;
    }

    for( ;; ) {
        ret = ( DdeClientTransaction( (LPBYTE)data, size, conv, hDataItem, CF_TEXT, XTYP_POKE, LONG_TIME_OUT, &result ) != 0 );
        if( !ret && tries-- != 0 ) {
            err = DdeGetLastError( IdInst );
            timeout = ((err & DMLERR_POKEACKTIMEOUT) != 0);
            if( !timeout ) {
                break;
            }
        } else {
            break;
        }
    }

    return( ret );
}
Example #6
0
JNIEXPORT jint JNICALL Java_de_walware_ecommons_io_win_DDEClient_ddeExecute(
		JNIEnv* env, jclass obj, jstring server, jstring topic, jstring command)
{
	// Pull unicode strings from the java arguments
	const jchar *szServer = env->GetStringChars(server, 0);
	const jchar *szTopic =  env->GetStringChars(topic, 0);
	const jchar *szCommand = env->GetStringChars(command, 0);
	
	// Init the DDEM Library
	DWORD idInst = 0;
	UINT iReturn = DdeInitialize(&idInst, (PFNCALLBACK) DdeCallback,
			APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0 );
	if (iReturn != DMLERR_NO_ERROR)
	{
		return 1;
	}
	
	// Connect to the DDE server
	HSZ hszServer = DdeCreateStringHandle(idInst, (WCHAR*) szServer, 0);
	HSZ hszTopic = DdeCreateStringHandle(idInst, (WCHAR*) szTopic, 0);
	HCONV hConv = DdeConnect(idInst, hszServer, hszTopic, NULL);
	
	// Free up some resources
	DdeFreeStringHandle(idInst, hszServer);
	env->ReleaseStringChars(server, szServer);
	DdeFreeStringHandle(idInst, hszTopic);
	env->ReleaseStringChars(topic, szTopic);
	
	// Make sure we're connected
	if (hConv == NULL)
	{
		DdeUninitialize(idInst);
		env->ReleaseStringChars(command, szCommand);
		return 2;
	}
	
	// Prepare data for transaction
	HDDEDATA hData = DdeCreateDataHandle(idInst, (LPBYTE) szCommand,
			(lstrlen((WCHAR*) szCommand) + 1) * sizeof(WCHAR), 0L, 0L, CF_UNICODETEXT, 0);
	env->ReleaseStringChars(command, szCommand);
	
	// Data is OK?
	if (hData == NULL)
	{
		DdeDisconnect(hConv);
		DdeUninitialize(idInst);
		return 3;
	}
	else
	{
		DdeClientTransaction((LPBYTE) hData, 0xFFFFFFFF, hConv, 0L, 0,
				XTYP_EXECUTE, TIMEOUT_ASYNC, NULL);
	}
	
	// Clean up
	DdeDisconnect(hConv);
	DdeUninitialize(idInst);
	
	return 0;
}
Example #7
0
void SleepyApi::Impl::Pause(bool doPause)
{
	if (!m_conv)
		return;

	DdeClientTransaction((LPBYTE)(doPause?"pause 1":"pause 0"),7,m_conv,NULL,0,XTYP_EXECUTE,1000,NULL);
}
Example #8
0
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);
}
Example #9
0
BOOL CDDEConnection::StopAdvise(const CString& item)
{
    DWORD result;
    HSZ atom = DDEGetAtom(item);

    return (DdeClientTransaction(NULL, 0, hConv,
                                 atom, CF_TEXT, XTYP_ADVSTOP, 5000, &result) ? TRUE : FALSE);
}
Example #10
0
//------DDE経由で取得------------------------------------
bool GetUrlByDDE( CString browser, CString &URL )
{
    bool    ret    = false;
    DWORD   idInst = 0;
    UINT    result = DdeInitialize( &idInst, DdeCallback,
                                    APPCMD_CLIENTONLY, 0L );

    URL = _T("");
    if ( result == DMLERR_NO_ERROR ) {
        LPSTR   lpszApplication = browser.GetBuffer(0);
        LPSTR   lpszTopic       = "WWW_GetWindowInfo";
        HSZ     hszApplication  = DdeCreateStringHandle(
                                        idInst, lpszApplication, CP_WINANSI );
        HSZ     hszTopic        = DdeCreateStringHandle(
                                        idInst, lpszTopic, CP_WINANSI );
        HSZ     hszItem         = DdeCreateStringHandle(
                                        idInst, "-1", CP_WINANSI );

        if ( hszApplication && hszTopic && hszItem ) {
            HCONV hConv = DdeConnect(idInst, hszApplication, hszTopic, NULL);

            if ( hConv ) {
                HDDEDATA    hData   = DdeClientTransaction(
                                          NULL, 0, hConv, hszItem,
                                          CF_TEXT, XTYP_REQUEST, 1000, NULL );
                if ( hData ) {
                    char    *pStart = (char *)DdeAccessData( hData, NULL );

                    if ( pStart ) {
                        while ( *pStart++ != '"' )
                            ;
                        if ( *pStart ) {
                            char    *pEnd = pStart;
                            while ( *pEnd != '"' )
                                pEnd++;

                            *pEnd = NUL;
                            URL   = pStart;
                            ret   = true;
                        }
                    }
                }

                DdeDisconnect( hConv );
            }
        }

        if ( hszItem )
            DdeFreeStringHandle( idInst, hszItem );
        if ( hszTopic )
            DdeFreeStringHandle( idInst, hszTopic );
        if ( hszApplication )
            DdeFreeStringHandle( idInst, hszApplication );
        DdeUninitialize( idInst );
    }

    return ( ret );
}
Example #11
0
HDDEDATA DDEconversation::Execute(const char *cmd)
{
    DDEstring c(cmd);
    DWORD res = NULL;
    HDDEDATA hData = DdeClientTransaction(NULL, 0, hConv, c, CF_TEXT, XTYP_REQUEST, 30000, &res);
    if (hData == NULL)
        DdeGetLastError((DWORD)DDEbase::base);
    return hData;
}
Example #12
0
BOOL CDDEConnection::Poke(const CString& item, char *data, int size, int format)
{
    DWORD result;
    if (size < 0)
        size = strlen(data);

    size ++;

    HSZ item_atom = DDEGetAtom(item);
    return (DdeClientTransaction((LPBYTE)data, size, hConv,
                                 item_atom, format, XTYP_POKE, 5000, &result) ? TRUE : FALSE);
}
Example #13
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);
    }
}
Example #14
0
/*****************************************************************
 *            DdeClientTransaction  (DDEML.11)
 */
HDDEDATA WINAPI DdeClientTransaction16(LPVOID pData, DWORD cbData, HCONV hConv,
                                       HSZ hszItem, UINT16 wFmt, UINT16 wType,
                                       DWORD dwTimeout, LPDWORD pdwResult)
{
    if (cbData != (DWORD)-1)
    {
        /* pData is not a pointer if cbData is -1, so we linearize the address
         * here rather than in the calling code. */
        pData = MapSL((SEGPTR)pData);
    }
    return DdeClientTransaction(pData, cbData, hConv, hszItem,
                                wFmt, wType, dwTimeout, pdwResult);
}
/***************************************************************************
	DDE Exchange
****************************************************************************/
void	DDEIntegratorClient::SendDebugMessage( UINT nErrLevel, char* pszMessageText )
{
	if (m_hConv == NULL)
		return;

	static char	szBuffer[256];
	_itoa( nErrLevel, szBuffer, 10);
	strcat( szBuffer, ":");
	strcat( szBuffer, pszMessageText);

	DdeClientTransaction( (UCHAR*)szBuffer, strlen(szBuffer)+1,
												m_hConv, ghszDebugMessageItem,
												CF_TEXT, XTYP_POKE, DDE_IDECLIENT_TIMEOUT, NULL);
			
}
Example #16
0
File: ms1.cpp Project: nrnhines/nrn
static void take(HCONV hc, const char* name) {
	if ( hc != (HCONV)NULL ){
		DdeFreeStringHandle(idInst, hszItem);
		sprintf(szDDEData, "%s,,0xFFFFFFFF,0x0,,", name);
		hszItem = DdeCreateStringHandle ( idInst, (LPTSTR)szDDEData, CP_WINANSI );

		hData = DdeClientTransaction ( NULL, 0, hc,
				 hszItem, wFmt, XTYP_REQUEST, 1000, &dwResult );
		if (!hData) {
			MessageBox(NULL, szDDEData, "WWW_OpenURL failed", MB_OK);
		}
	}else{
		HandleOutput( "A connection to Netscape via DDE is not established." );
	}
}
Example #17
0
bool SleepyApi::Impl::IsPaused() const
{
	if (!m_conv)
		return false;

	HDDEDATA res=DdeClientTransaction(NULL,0,m_conv,m_paused,CF_TEXT,XTYP_REQUEST,1000,NULL);
	if (!res)
		return false;

	char help[10];
	DdeGetData(res,(LPBYTE)help,sizeof(help),0);
	DdeFreeDataHandle(res);

	return *help!='0';
}
Example #18
0
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_ADVSTART/*XTYP_REQUEST*/, TIMEOUT_ASYNC/*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);
    }
}
Example #19
0
JNIEXPORT jbyteArray JNICALL Java_com_google_code_jdde_ddeml_DdeAPI_ClientTransaction
  (JNIEnv *env, jclass cls, jint idInst, jbyteArray jpData, jint hConv, jstring jhszItem,
		  jint wFmt, jint wType, jint dwTimeout, jobject $dwResult)
{
	HSZ hszItem = UtilCreateStringHandle(env, idInst, jhszItem);
	HDDEDATA pData = NULL;
	DWORD dwResult = 0;

	if (jpData != NULL) {
		jsize cb = env->GetArrayLength(jpData);
		jbyte *pSrc = env->GetByteArrayElements(jpData, 0);
		pData = DdeCreateDataHandle(idInst, (LPBYTE) pSrc, cb, 0, hszItem, wFmt, 0);
		env->ReleaseByteArrayElements(jpData, pSrc, 0);
	}

	HDDEDATA hddeData = DdeClientTransaction(
			(LPBYTE) pData,
			0xFFFFFFFF,
			(HCONV) hConv,
			hszItem,
			wFmt,
			wType,
			dwTimeout,
			&dwResult
	);

	if (pData != NULL) {
		DdeFreeDataHandle(pData);
	}

	UtilFreeStringHandle(idInst, hszItem);

	if ($dwResult != NULL) {
		SetObjectInPointer(env, $dwResult, NewInteger(env, dwResult));
	}

	if (hddeData == NULL) {
		return NULL;
	}
	else if (wType == XTYP_REQUEST) {
		jbyteArray result = ExtractData(env, hddeData);
		DdeFreeDataHandle(hddeData);
		return result;
	}

	return env->NewByteArray(0);
}
Example #20
0
static int exec_dde_command (const char *buf, HCONV conversation,
			     DWORD session)
{
    HDDEDATA ret;
    int err;
    
    ret = DdeClientTransaction((LPBYTE) buf, strlen(buf) + 1,
			       conversation, 0, 0, XTYP_EXECUTE,
			       TRANSACTION_TIMEOUT, 0);

    /* MSDN: "The return value is zero for all unsuccessful
       transactions" 
    */
    err = (ret == 0);

    return err;
}
Example #21
0
void Senddde(char* tempstr)
{
  try
  {
    //Connect to the service and request the topic
    if ((hcnv = DdeConnect(idInst, hszService, hszTopic, NULL)) == 0)
    {
      ColorStop();
      return;
    }

    //Start a DDE transaction
    if (DdeClientTransaction((LPBYTE)tempstr, strlen(tempstr)+1,
          hcnv, hszItem, CF_TEXT, XTYP_POKE, 5000, &dwResult) == 0)
    {
      UINT result = DdeGetLastError(idInst);
      switch (result)
      {
        case DMLERR_ADVACKTIMEOUT:
        case DMLERR_BUSY:
        case DMLERR_DATAACKTIMEOUT:
        case DMLERR_DLL_NOT_INITIALIZED:
        case DMLERR_EXECACKTIMEOUT:
        case DMLERR_INVALIDPARAMETER:
        case DMLERR_MEMORY_ERROR:
        case DMLERR_NO_CONV_ESTABLISHED:
        case DMLERR_NO_ERROR:
        case DMLERR_NOTPROCESSED:
        case DMLERR_POKEACKTIMEOUT:
        case DMLERR_POSTMSG_FAILED:
        case DMLERR_REENTRANCY:
        case DMLERR_SERVER_DIED:
        case DMLERR_UNADVACKTIMEOUT:
        default:
          ColorStop();
      }
    }

    //Free DDE
    DdeDisconnect(hcnv);
  }
  catch(...)
  {
    ErrorHandler("Exception thrown in Senddde()!");
  }
}
//--------------------
//
BOOL	DDEIntegratorClient::CommandToServer( IDE_COMMAND iCommand, char* pszParams )
{
	char	szCommand[512];
	_itoa( (int)iCommand, szCommand, 10);
	strcat( szCommand, " ");
	if ( pszParams )
		strcat( szCommand, pszParams );

	HDDEDATA	hData = DdeCreateDataHandle( gDDEClientId, 
																				(UCHAR*)szCommand, strlen(szCommand)+1,
																				0L, ghszCommandItem, CF_TEXT, 0);
	if ( hData )
	HDDEDATA  hDataT= DdeClientTransaction( (UCHAR*)hData, (ULONG)-1L,
																					m_hConv, ghszCommandItem, CF_TEXT,
																					XTYP_POKE, DDE_IDECLIENT_TIMEOUT, NULL);
	return (BOOL)hData;
}
Example #23
0
 /***************************************************************************
 *                                                                          *
 *  FUNCTION   : ProcessTransaction()  taken from ddeml sample app          *
 *                                                                          *
 *  PURPOSE    : Processes synchronous transactions entirely and starts     *
 *               async transactions. Pass in the handle to the URL string.  *
 *                                                                          *
 *  RETURNS    : TRUE  - If successful.                                     *
 *               FALSE - otherwise.                                         *
 *                                                                          *
 ****************************************************************************/
URLProcessorRetCode CConv::ProcessTransaction(DWORD idInst,HSZ hszItem)
{
    HWND hwndInfoCtrl = 0;

    /*
     * Disable callbacks for this conversation now if the XOPT_DISABLEFIRST
     * option is set.  This tests disabling asynchronous transactions
     * before they are completed.
     */
    if (fsOptions & XOPT_DISABLEFIRST)
        DdeEnableCallback(idInst, hConv, EC_DISABLE);
    /*
     * Adjust the timeout for asynchronous transactions.
     */
    if (fsOptions & XOPT_ASYNC)
        ulTimeout = (DWORD)TIMEOUT_ASYNC;

    /*
     * start transaction with DDEML here
     */
    //note: for future use, pass in value for first parameter to retrieve data from transaction.
    
    // ** Future DDE may not support Result Parameter **
    ret = DdeClientTransaction(NULL, (DWORD)-1,hConv, hszItem, wFmt,wType,
            ulTimeout, (LPDWORD)&Result);
    //UINT Error = DdeGetLastError(idInst);
    if(!ret)
      return enURLErrorDdeProcessTrans;//use DdeGetLastError(idInst) to get more details.
    else if (fsOptions & XOPT_ASYNC) 
     {
        /*
         * asynchronous successful start - link transaction to window.
         */
        //DdeSetUserHandle(hConv, Result, (DWORD)hwndInfoCtrl);

        /*
         * Abandon started async transaction after initiated if
         * XOPT_ABANDONAFTERSTART is chosen.  This tests the mid-transaction
         * abandoning code.
         */
        if (fsOptions & XOPT_ABANDONAFTERSTART)
            DdeAbandonTransaction(idInst, hConv, Result);
      } 
    return enURLErrorNone;
} 
Example #24
0
BOOL CDDEConnection::Execute(char *data, int size, int format)
{
    DWORD result;
    if (size < 0)
        size = strlen(data);

    size ++;
    HDDEDATA rt = DdeClientTransaction((LPBYTE)data, size, hConv,
                                       NULL, format, XTYP_EXECUTE, 5000, &result);
    if (!rt)
    {
        /*if (bDisconnected)
        	return TRUE;*/
        printf("Warning: DDE result is 0x%x\n", DdeGetLastError(DDEIdInst));
        printf("Failed to exe cmd: %s\n", data);
    }
    return (rt ? TRUE : FALSE);
}
Example #25
0
void DDEExecute(const WCHAR* server, const WCHAR* topic, const WCHAR* command)
{
    unsigned long inst = 0;
    HSZ hszServer = NULL, hszTopic = NULL;
    HCONV hconv = NULL;
    HDDEDATA hddedata = NULL;

#ifdef _WIN64
    CrashIf(str::Len(command) >= (DWORD)-1);
    if (str::Len(command) >= (DWORD)-1)
        return;
#endif
    UINT result = DdeInitialize(&inst, &DdeCallback, APPCMD_CLIENTONLY, 0);
    if (result != DMLERR_NO_ERROR)
        goto Exit;
    hszServer = DdeCreateStringHandle(inst, server, CP_WINNEUTRAL);
    if (!hszServer)
        goto Exit;
    hszTopic = DdeCreateStringHandle(inst, topic, CP_WINNEUTRAL);
    if (!hszTopic)
        goto Exit;
    hconv = DdeConnect(inst, hszServer, hszTopic, 0);
    if (!hconv)
        goto Exit;
    DWORD cbLen = ((DWORD)str::Len(command) + 1) * sizeof(WCHAR);
    hddedata = DdeCreateDataHandle(inst, (BYTE*)command, cbLen, 0, 0, CF_UNICODETEXT, 0);
    if (!hddedata)
        goto Exit;

    HDDEDATA answer = DdeClientTransaction((BYTE*)hddedata, (DWORD)-1, hconv, 0, 0, XTYP_EXECUTE, 10000, 0);
    if (answer)
        DdeFreeDataHandle(answer);

Exit:
    if (hddedata)
        DdeFreeDataHandle(hddedata);
    if (hconv)
        DdeDisconnect(hconv);
    if (hszTopic)
        DdeFreeStringHandle(inst, hszTopic);
    if (hszServer)
        DdeFreeStringHandle(inst, hszServer);
    DdeUninitialize(inst);
}
word
pl_dde_request(term_t handle, term_t item,
	       term_t value, term_t timeout)
{ int hdl;
  int rval;
  int ddeErr;
  HSZ Hitem;
  DWORD result, valuelen;
  HDDEDATA Hvalue;
  long tmo;

  if ( !get_conv_handle(handle, &hdl) ||
       !get_hsz(item, &Hitem) )
    fail;
  if ( !PL_get_long(timeout, &tmo) )
    return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_integer, timeout);

  if ( tmo <= 0 )
    tmo = TIMEOUT_VERY_LONG;

  Hvalue = DdeClientTransaction(NULL, 0, conv_handle[hdl], Hitem, CF_TEXT,
				XTYP_REQUEST, (DWORD)tmo, &result);
  ddeErr = DdeGetLastError(ddeInst);
  DdeFreeStringHandle(ddeInst, Hitem);

  if ( Hvalue)
  { char * valuebuf;
    char * valuedata;
    valuedata = DdeAccessData(Hvalue, &valuelen);
    valuebuf = (char *)malloc((size_t)valuelen+1);
    strncpy(valuebuf, valuedata, valuelen+1);
    DdeUnaccessData(Hvalue);
    valuebuf[valuelen] = EOS;
    rval = PL_unify_string_chars(value, valuebuf);
    free(valuebuf);
    return rval;
  } else
  { const char * errmsg = dde_error_message(ddeErr);

    return PL_unify_term(value,
			 PL_FUNCTOR, FUNCTOR_error1, /* error(Message) */
			 PL_CHARS,   errmsg);
  }
}
Example #27
0
char doRequest( char *szCommand )
{
    HDDEDATA    hddeData;
    HSZ         hszCommand;
    BYTE        result;

    hszCommand = DdeCreateStringHandle( idInstance, szCommand, CP_WINANSI );
    hddeData = DdeClientTransaction( NULL, 0, hConv, hszCommand, CF_TEXT,
                                     XTYP_REQUEST, 500000, NULL );
    DdeFreeStringHandle( idInstance, hszCommand );

    if( hddeData != (HDDEDATA)NULL ) {
        DdeGetData( hddeData, &result, 1, 0 );
        DdeFreeDataHandle( hddeData );
        return( result );
    }
    return( 0 );

}
Example #28
0
bool DDEExecute(const WCHAR* server, const WCHAR* topic, const WCHAR* command)
{
    DWORD inst = 0;
    HSZ hszServer = NULL, hszTopic = NULL;
    HCONV hconv = NULL;
    bool ok = false;

    CrashIf(str::Len(command) >= INT_MAX - 1);
    if (str::Len(command) >= INT_MAX - 1)
        return false;

    UINT result = DdeInitialize(&inst, DdeCallback, APPCMD_CLIENTONLY, 0);
    if (result != DMLERR_NO_ERROR)
        return false;

    hszServer = DdeCreateStringHandle(inst, server, CP_WINNEUTRAL);
    if (!hszServer)
        goto Exit;
    hszTopic = DdeCreateStringHandle(inst, topic, CP_WINNEUTRAL);
    if (!hszTopic)
        goto Exit;
    hconv = DdeConnect(inst, hszServer, hszTopic, NULL);
    if (!hconv)
        goto Exit;

    DWORD cbLen = ((DWORD)str::Len(command) + 1) * sizeof(WCHAR);
    HDDEDATA answer = DdeClientTransaction((BYTE *)command, cbLen, hconv, 0, CF_UNICODETEXT, XTYP_EXECUTE, 10000, NULL);
    if (answer) {
        DdeFreeDataHandle(answer);
        ok = true;
    }

Exit:
    if (hconv)
        DdeDisconnect(hconv);
    if (hszTopic)
        DdeFreeStringHandle(inst, hszTopic);
    if (hszServer)
        DdeFreeStringHandle(inst, hszServer);
    DdeUninitialize(inst);

    return ok;
}
Example #29
0
char *CDDEConnection::Request(const CString& item, int *size, int format)
{
    DWORD result;
    HSZ atom = DDEGetAtom(item);

    HDDEDATA returned_data = DdeClientTransaction(NULL, 0, hConv,
                             atom, format, XTYP_REQUEST, 5000, &result);

    DWORD len = DdeGetData(returned_data, (LPBYTE)(buf_ptr), buf_size, 0);

    DdeFreeDataHandle(returned_data);

    if (size) *size = (int)len;
    if (len > 0)
    {
        return buf_ptr;
    }
    else return NULL;
}
Example #30
0
bool gcDDEConnection::poke(const char* item, const char* data)
{
    DWORD result;

    HSZ item_atom = GetDDEManager()->atomFromString(item);

	char fdata[255];

	Safe::snprintf(fdata, 255, "%s\r\n\0", data);
	size_t size = strlen(fdata);

	HDDEDATA res = DdeClientTransaction((LPBYTE)fdata, size, m_hConv, item_atom, CF_TEXT, XTYP_POKE, DDE_TIMEOUT, &result);
	bool ok =  res?true:false;
    if ( !ok )
    {
        printf("DDE poke request failed");
    }

    return ok;
}