ほっとひといき給湯室 |
|
|
投稿日時: 12/01/14 11:52:11
投稿者: kumatti
|
|---|---|
|
・C++の関数定義(MSDN限定)から、引数を得る。
BOOL WINAPI DeviceIoControl( __in HANDLE hDevice, __in DWORD dwIoControlCode, __in_opt LPVOID lpInBuffer, __in DWORD nInBufferSize, __out_opt LPVOID lpOutBuffer, __in DWORD nOutBufferSize, __out_opt LPDWORD lpBytesReturned, __inout_opt LPOVERLAPPED lpOverlapped ); test.js var FilePath = "test.txtへのパス";
var stm = new ActiveXObject("ADODB.Stream");
stm.open();
stm.type = 2;//adTypeText
stm.charset = "shift-jis";
stm.LoadFromFile(FilePath);
var s = stm.readtext();
stm.Close();
WScript.Echo(s);//確認用
var arr = s.match(/\s[\w]+,?\r\n/g);
WScript.Echo(arr);//確認用
s = arr.join("");
s = s.replace(/[\n\r]/g,"");
WScript.Echo(s);//確認用
WScript.Quit();
実行結果 APIの引数 hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped |
|
|
|
投稿日時: 12/01/15 13:57:58
投稿者: kumatti
|
|---|---|
|
・VBAのDeclare文、自動作成(MSDN限定)
HWND WINAPI FindWindowEx( __in_opt HWND hwndParent, __in_opt HWND hwndChildAfter, __in_opt LPCTSTR lpszClass, __in_opt LPCTSTR lpszWindow ); api.js var FilePath = 'test.txtへのパス';
var s = '';
var ss = '';
var LibName = 'user32.dll';
var Unicode = 'W';
var stm = new ActiveXObject('ADODB.Stream');
stm.open();
stm.type = 2;//adTypeText
stm.charset = 'shift-jis';
stm.LoadFromFile(FilePath);
var s = stm.readtext();
stm.Close();
//関数名
s.match(/\s(\w+)\(\r\n/);
var funcName = RegExp.$1 + Unicode;
//WScript.Echo(funcName);//確認用
//戻り値の可否
if(/void/i.test(s))
ss= 'Declare Sub ' + funcName + ' Lib \"' + LibName + '\" (';
else
ss= 'Declare Function ' + funcName + '& ' + 'Lib \"' + LibName + '\" (';
//引数
var rng = new RegExp(/\s[\*|\*\*]?(\w+),?\r\n/g);
while(rng.exec(s)!= null ){
ss+= ' ByVal ' + RegExp.$1 + '&,';
}
ss+= ')';
ss = ss.replace(/,\)/g,'\)');
ss = ss.replace(/[\r\n]/g,'');
//結果
WScript.Echo(ss);
WScript.Quit();
--------------------------- Windows Script Host --------------------------- Declare Function FindWindowExW& Lib "user32.dll" ( ByVal hwndParent&, ByVal hwndChildAfter&, ByVal lpszClass&, ByVal lpszWindow&) --------------------------- OK --------------------------- # 疲れた(・∀・) |
|
|
|
投稿日時: 12/01/15 16:18:44
投稿者: YU-TANG
|
|---|---|
|
こんにちはー。
引用://戻り値の可否 if(/void/i.test(s)) ここ、 LPVOIDとかにも引っかかりそうな気がします。 それでは。 |
|
|
|
投稿日時: 12/01/16 08:09:50
投稿者: kumatti
|
|---|---|
|
・修正
//戻り値の可否 if(/^void/i.test(s)) > var rng = new RegExp(/\s[\*|\*\*]?(\w+),?\r\n/g); ↓ //引数 var rng = new RegExp(/\s(\*+)?(\w+),?\r\n/g); > ss+= ' ByVal ' + RegExp.$1 + '&,'; ss+= ' ByVal ' + RegExp.$2 + '&,'; YU-TANG さんの引用: LPVOIDとかにも引っかかりそうな気がします。 YU-TANGさん、ありがとうございました。 行頭にマッチ(引数の方にもマッチしてた)を忘れていたので、勘違いさせてしまった様です。失礼しました。 (PVOIDでもLPVOIDでもvoid*でも、戻り値を持つので大丈夫です) |
|
|
|
投稿日時: 12/01/16 17:07:22
投稿者: YU-TANG
|
|---|---|
|
こんにちは。
kumatti さんの引用: 最初に投稿されている test.txt (DeviceIoControl の定義文)の引数の方にある LPVOID を指したつもりでした。 ところで、自分ならどう組むかな、と思って、ちょっとやってみました。 var filePath = 'test.txtへのパス';
var s = new ActiveXObject("Scripting.FileSystemObject").OpenTextFile(filePath).ReadAll();
var libName = 'user32.dll';
var unicode = 'W';
//WScript.Echo(s);//確認用
// 戻り値の可否
var head = 'Declare '
+ (/^void winapi /i.test(s) ? 'Sub $1' + unicode : 'Function $1' + unicode + '&')
+ ' Lib "' + libName + '" ';
// 関数名
s = s.replace(/^.*\b(\w+)(?=\()/, head);
// 引数
s = s.replace(/^.*\b(\w+)(,?)$/gm, 'ByVal $1&$2');
// 整形
s = s.replace(/\r\n/g, " "); // 改行コードを削除
s = s.slice(0,-1); // 末尾の ; を削除
// 結果
WScript.Echo(s);
WScript.Quit();
なるほど。 自分は replace 脳ということが分かりました。w |
|
|
|
投稿日時: 12/01/18 10:01:22
投稿者: kumatti
|
|---|---|
|
YU-TANGさん、ありがとうございます。
s.match(/\s(\*+)?(\w+)\(\r\n/g); var funcName = RegExp.$2 + Unicode; > ss = ss.replace(/,\)/g,'\)'); 削除。 |
|
|
|
投稿日時: 12/01/25 10:16:56
投稿者: kumatti
|
|---|---|
|
・構造体のVBA用、変換
typedef struct _TASKDIALOGCONFIG {
UINT cbSize;
HWND hwndParent;
HINSTANCE hInstance;
TASKDIALOG_FLAGS dwFlags;
TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons;
PCWSTR pszWindowTitle;
union {
HICON hMainIcon;
PCWSTR pszMainIcon;
};
PCWSTR pszMainInstruction;
PCWSTR pszContent;
UINT cButtons;
const TASKDIALOG_BUTTON *pButtons;
int nDefaultButton;
UINT cRadioButtons;
const TASKDIALOG_BUTTON *pRadioButtons;
int nDefaultRadioButton;
PCWSTR pszVerificationText;
PCWSTR pszExpandedInformation;
PCWSTR pszExpandedControlText;
PCWSTR pszCollapsedControlText;
union {
HICON hFooterIcon;
PCWSTR pszFooterIcon;
};
PCWSTR pszFooter;
PFTASKDIALOGCALLBACK pfCallback;
LONG_PTR lpCallbackData;
UINT cxWidth;
} TASKDIALOGCONFIG;
var filePath = 'test1.txtへのパス';
var s = new ActiveXObject("Scripting.FileSystemObject").OpenTextFile(filePath).ReadAll();
//WScript.Echo(s);
// carriage return
s = s.replace(/\r/g,'');
// WScript.Echo(s);
// 構造体タグ名
s = s.replace(/typedef struct _?(\w+) {/g,'Type $1');
// WScript.Echo(s);
// }の置換
s = s.replace(/} \w+;/g,'End Type');
// 型
s = s.replace(/( \w+)? (\w+) /g,'');
// WScript.Echo(s);
// メンバ
s = s.replace(/(\*+)?(\w+);/g,'$2 As Long');
// WScript.Echo(s);
// 結果
WScript.Echo(s);
結果 ---------------------------
Windows Script Host
---------------------------
Type TASKDIALOGCONFIG
cbSize As Long
hwndParent As Long
hInstance As Long
dwFlags As Long
dwCommonButtons As Long
pszWindowTitle As Long
{
hMainIcon As Long
pszMainIcon As Long
};
pszMainInstruction As Long
pszContent As Long
cButtons As Long
pButtons As Long
nDefaultButton As Long
cRadioButtons As Long
pRadioButtons As Long
nDefaultRadioButton As Long
pszVerificationText As Long
pszExpandedInformation As Long
pszExpandedControlText As Long
pszCollapsedControlText As Long
{
hFooterIcon As Long
pszFooterIcon As Long
};
pszFooter As Long
pfCallback As Long
lpCallbackData As Long
cxWidth As Long
End Type
---------------------------
OK
---------------------------
TaskDialogIndirectは、ちょっとしたUserForm程度の表現力がありますね。 Task Dialogs http://msdn.microsoft.com/en-us/library/aa511299.aspx |
|
|
|
投稿日時: 12/02/17 11:30:31
投稿者: kumatti
|
|---|---|
|
> TaskDialogIndirect
|
|