|
ダブルクリックで選択範囲を維持できるかどうかはとりあえず置いておいて、マウス
カーソルの位置から行と桁のカーソル位置を得る方法が通常のマクロからもできたら
いいということで、今後検討しようと思います。
現状では、DLL側から呼ぶ用なので、わざわざこのためにDLLを作る必要があります。
例えば以下のようなC++で拡張子.cppのファイルを作成します。
#include <windows.h>
extern "C" __declspec( dllexport )
int MyDllFunc() {
HINSTANCE hinstExe = GetModuleHandle( NULL );
BOOL (WINAPI* pfnHidemaru_GetCursorPosUnicodeFromMousePos)( POINT* ppt,
int* pnLineNo, int* pnColumn );
*(FARPROC*)&pfnHidemaru_GetCursorPosUnicodeFromMousePos = GetProcAddress
( hinstExe, "Hidemaru_GetCursorPosUnicodeFromMousePos" );
if( pfnHidemaru_GetCursorPosUnicodeFromMousePos ) {
POINT pt;
GetCursorPos( &pt );
int nLineNo = 0;
int nColumn = 0;
if( pfnHidemaru_GetCursorPosUnicodeFromMousePos( &pt, &nLineNo, &nCo
lumn) ) {
return MAKELONG(nLineNo,nColumn);
}
}
return 0;
}
これをDLLとしてコンパイルできる環境が必要です。
最近だとVisual Studio Community 2019で、Win32プロジェクトでDLLで空の内容とし
て作成し、.cppファイルを追加してビルドします。
以前ちらっと見たあべのりさんの方法だと、わざわざプロジェクトを作成しなくても、
cl.exeで簡単にDLLを作成できるみたいです。
参考:https://www.maruo.co.jp/hidesoft/2/x38106_.html#38112
Visual Studioがインストールされている状態で、コマンドプロンプトで以下のよう
にすると32bit版のDLLができました。
cl /EHcs /LD test.cpp user32.lib
これを呼び出すマクロの例は以下のような感じになります。
マクロの例:
loaddll @"C:\Folder\test.dll";
#dw=dllfunc("MyDllFunc");
if(#dw==0){
message "カーソル位置なし";
} else {
message "行:"+str(#dw&0xffff)+"\n桁:"+str((#dw&0xffff0000)/0x00010000);
}
endmacro;
|
|