%let fontname = Arial; %let fontsize = 15; options linesize=250; * Richard A. DeVenezia; * http://www.devenezia.com; * change the font of the next enhanced editor window that opens * by programmatically tweaking windows registry settings ; * use at your own risk; * these settings should normally be changed using the Appearance tab of * the Enhanced Editor Options dialog. * menu: Tools/Options/Enhanced Editor... * or * command: WNEXTEDIT; EDCMD customize *; filename SASCBTBL catalog 'WORK.WINAPI.WINAPI.SOURCE'; data _null_; file SASCBTBL; input ; put _infile_; cards4; routine RegOpenKeyExA module = advapi32 minarg = 5 maxarg = 5 stackpop = called returns = long ; arg 1 input num byvalue format = pib4.; * HKEY hKey, // handle of open key ; arg 2 input char byaddr format = $cstr200.; * LPCTSTR lpSubKey, // address of name of subkey to open; arg 3 input num byvalue format = pib4.; * DWORD ulOptions, // reserved ; arg 4 input num byvalue format = pib4.; * REGSAM samDesired, // security access mask ; arg 5 update num byaddr format = pib4.; * PHKEY phkResult // address of handle of open key ; routine RegCloseKey module = advapi32 minarg = 1 maxarg = 1 stackpop = called returns = long ; arg 1 input num byvalue format = pib4.; * HKEY hKey, // handle of key to close ; routine RegQueryValueExA module = advapi32 minarg = 6 maxarg = 6 stackpop = called returns = long ; arg 1 input num byvalue format = pib4.; * HKEY hKey, // handle of key to query ; arg 2 input char byaddr format = $cstr200.; * LPTSTR lpValueName, // address of name of value to query ; arg 3 input num byvalue format = pib4.; * LPDWORD lpReserved, // reserved ; arg 4 update num byaddr format = pib4.; * LPDWORD lpType, // address of buffer for value type ; arg 5 input num byvalue format = pib4.; * LPBYTE lpData, // address of data buffer *** must use addr(); arg 6 update num byaddr format = pib4.; * LPDWORD lpcbData // address of data buffer size ; routine RegSetValueExA module = advapi32 minarg = 6 maxarg = 6 stackpop = called returns = long ; arg 1 input num byvalue format = pib4.; * HKEY hKey, // handle of key to query ; arg 2 input char byaddr format = $cstr200.; * LPTSTR lpValueName, // address of name of value to set ; arg 3 input num byvalue format = pib4.; * LPDWORD lpReserved, // reserved ; arg 4 update num byvalue format = pib4.; * LPDWORD lpType, // address of buffer for value type ; arg 5 input num byvalue format = pib4.; * LPBYTE lpData, // address of value data *** must use addr(); arg 6 update num byvalue format = pib4.; * LPDWORD lpcbData // size of value data; ;;;; %let HKEY_CLASSES_ROOT = 80000000x; %let HKEY_CURRENT_USER = 80000001x; %let HKEY_LOCAL_MACHINE = 80000002x; %let HKEY_USERS = 80000003x; %let HKEY_PERFORMANCE_DATA = 80000004x; %let HKEY_CURRENT_CONFIG = 80000005x; %let HKEY_DYN_DATA = 80000006x; %let REG_SZ = 00000001x; %let REG_DWORD = 00000004x; %let KEY_QUERY_VALUE = 00000001x; %let KEY_SET_VALUE = 00000002x; %let ERROR_MORE_DATA = 234; data _null_; length cval $200; length valtype cvallen hkey 8; rc = ModuleN ( '*e' , 'RegOpenKeyExA' , &HKEY_LOCAL_MACHINE , 'SOFTWARE\SAS Institute Inc.\Common Data\Shared Files\Enhanced Editor' , 0 , &KEY_QUERY_VALUE , hkey ); put rc= hkey=; if rc ne 0 then stop; valtype = 0; cvallen = 200; rc = ModuleN ( '*e' , 'RegQueryValueExA' , hkey , 'Version' , 0 , valtype , addr(cval) , cvallen ); if rc = &ERROR_MORE_DATA then put 'WARNING: data requires ' cvallen 'bytes'; else cval = substr (cval,1,cvallen-1); put rc= valtype= hex8. cval= cvallen=; rc = ModuleN ( '*e' , 'RegCloseKey' , hkey ); put rc=; sasversion = cval; rc = ModuleN ( '*e' , 'RegOpenKeyExA' , &HKEY_CURRENT_USER , 'Software\SAS Institute Inc.\Enhanced Editor\'||trim(sasversion)||'\Editor Settings\.sas\Scheme' , 0 , bor (&KEY_QUERY_VALUE, &KEY_SET_VALUE) , hkey ); put rc= hkey=; valtype = 0; cvallen = 200; rc = ModuleN ( '*e' , 'RegQueryValueExA' , hkey , 'FontName' , 0 , valtype , addr(cval) , cvallen ); if rc = &ERROR_MORE_DATA then put 'WARNING: data requires ' cvallen 'bytes'; else cval = substr (cval,1,cvallen-1); fontname = cval; put rc= valtype= hex8. cval= cvallen=; cval = repeat ('00'x, 199); rc = ModuleN ( '*e' , 'RegQueryValueExA' , hkey , 'FontSize' , 0 , valtype , addr(cval) , cvallen ); if rc = &ERROR_MORE_DATA then put 'WARNING: data requires ' cvallen 'bytes'; else nval = inputn (cval, 'pib'|| trim(left(put(cvallen,2.))) || '.'); fontsize = nval; put rc= valtype= hex8. cval= $hex8. nval= cvallen=; put 'Changing ' fontname fontsize "to &fontname &fontsize"; cval = "&fontname" || '00'x; rc = ModuleN ( '*e' , 'RegSetValueExA' , hkey , 'FontName' , 0 , ®_SZ , addr(cval) , length(cval) ); put rc=; cval = put (&fontsize, pib4.); rc = ModuleN ( '*e' , 'RegSetValueExA' , hkey , 'FontSize' , 0 , ®_DWORD , addr(cval) , 4 ); rc = ModuleN ( '*e' , 'RegCloseKey' , hkey ); put rc=; run; dm 'whostedit; recall' whostedit;