51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
#include <windows.h>
|
|
#include "dde.h"
|
|
#include <strsafe.h>
|
|
|
|
HDDEDATA CALLBACK DdeGenericCallback(UINT uType, UINT uFmt,HCONV hconv, HSZ hsz1,
|
|
HSZ hsz2, HDDEDATA hdata, DWORD dwData1,
|
|
DWORD dwData2)
|
|
{
|
|
return ((HDDEDATA)0);
|
|
}
|
|
|
|
void DdeCom::sendCommand(wchar_t *application, wchar_t *command, DWORD minInterval)
|
|
{
|
|
static DWORD lastCmd=0, now;
|
|
HSZ string1,string2,string3;
|
|
wchar_t line[512];
|
|
HCONV ddeConv;
|
|
DWORD result;
|
|
|
|
now = GetTickCount();
|
|
if (now < lastCmd + minInterval)
|
|
return;
|
|
|
|
StringCchCopy(line, 512, command);
|
|
|
|
DWORD DDE=0;
|
|
|
|
if (DdeInitialize(&DDE, DdeGenericCallback, CBF_SKIP_ALLNOTIFICATIONS+ST_CLIENT,0) != DMLERR_NO_ERROR)
|
|
{
|
|
MessageBox(NULL,L"DDE INITIALIZE", L"Error", MB_OK);
|
|
|
|
return;
|
|
}
|
|
|
|
string1 = DdeCreateStringHandle(DDE, application, CP_WINANSI);
|
|
string2 = DdeCreateStringHandle(DDE, L"COMMAND", CP_WINANSI);
|
|
|
|
if ((ddeConv = DdeConnect(DDE, string1, string2, 0)) != 0)
|
|
{
|
|
string3 = DdeCreateStringHandle(DDE, L"None", CP_WINANSI);
|
|
DdeClientTransaction((LPBYTE)line, (wcslen(line)+1)*sizeof(line[0]), ddeConv, string3, CF_UNICODETEXT, XTYP_POKE, 1000, &result);
|
|
DdeFreeStringHandle(DDE, string3);
|
|
DdeDisconnect(ddeConv);
|
|
lastCmd = now;
|
|
}
|
|
|
|
DdeFreeStringHandle(DDE, string1);
|
|
DdeFreeStringHandle(DDE, string2);
|
|
DdeUninitialize(DDE);
|
|
}
|