|
結構古い話題で恐縮なのですが、今日別件の投稿で調べていて気づいたので
投稿となります。
「新たなマクロを文字列で実行する」がらみの機能で
「WM_REMOTE_EXECMACRO_MEMORY」を利用した「SendMessage」を利用して
マクロを文字列で新たに実行する、といったものがありますが、
(特殊な範囲は置いておくとしても)常識的な範囲の文字に対応出来ていないのではな
いかと思います。
(恐らくマルチバイトの範囲しか対応できていない)
以下実験のソース
//----------------------------------------------------------------
// Project1.dllのProject.cpp
//----------------------------------------------------------------
#include <windows.h>
#include <string>
#include <process.h>
using namespace std;
#define WM_REMOTE_EXECMACRO_MEMORY (WM_USER + 272)
#define MACRO_DLL extern "C" __declspec(dllexport)
using PFNGetCurrentWindowHandle = HWND(WINAPI *)(void);
unsigned __stdcall mythread(void *lpx)
{
int i;
for (i = 0; i < 10; i++) {
Sleep(2000);
HMODULE hHideExeHandle = NULL;
hHideExeHandle = LoadLibrary(L"hidemaru.exe");
PFNGetCurrentWindowHandle Hidemaru_GetCurrentWindowHandle = NULL;
HWND hwndHidemaru = NULL;
if (hHideExeHandle) {
Hidemaru_GetCurrentWindowHandle = (PFNGetCurrentWindowHandle)GetProcAddre
ss(hHideExeHandle, "Hidemaru_GetCurrentWindowHandle");
hwndHidemaru = Hidemaru_GetCurrentWindowHandle();
if (hwndHidemaru) {
OutputDebugString(L"OK");
}
}
else {
OutputDebugString(L"NO");
}
WCHAR wszReturn[255];
*(WORD*)wszReturn = _countof(wszReturn);
LRESULT lRet = SendMessageW(hwndHidemaru, WM_REMOTE_EXECMACRO_MEMORY, (WPA
RAM)wszReturn, (LPARAM)LR"(insert "♬";)");
OutputDebugString(L"NO");
}
return 0;
}
HANDLE hTh;
MACRO_DLL intptr_t abc(wchar_t *sz) {
UINT thID;
int i;
hTh = (HANDLE)_beginthreadex(NULL, 0, mythread, NULL, 0, &thID);
return 0;
}
//----------------------------------------------------------------
// 呼び出す側のマクロ a.mac
//----------------------------------------------------------------
#DLL = loaddll( currentmacrodirectory + @"\Project1.dll" );
#r = dllfuncw( #DLL, "abc");
|
|