ほっとひといき給湯室 |
|
投稿日時: 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
|