外部DLLを利用したユーザIDの取得

[OS]
[リリース]
[キーワード]

[質問]

Windows95 や WindowsNTでSASを使用している場合、ログオンしているユーザのIDを取得する方法はありますか。

[回答]

外部DLL呼び出しの機能(SAS 6.11)を使用して、Win32 API GetUserName関数によってユーザIDを取得することができます。
以下にプログラム例を示します。

filename SASCBTBL 'tmp.txt';
/* 属性テーブルの作成 */
data _null_;
  file sascbtbl;
  put 'routine GetUserNameA';
  put '  minarg=2';
  put '  maxarg=2';
  put '  stackpop=called';
  put '  module=advapi32';
  put '  returns=short;';
  put 'arg 1      update format=$cstr200.; ';
  put 'arg 2 num  input  format=pib4.; ';
run;

data _null_;
  length userid $20;

  /* OSの判定 */
  if "&sysscpl" ne 'WIN_95' and "&sysscpl" ne 'WIN_NT' then do;
     put 'Windows 95 or Windows NT環境でのみ動作します.';
     stop;
  end;

  /* ユーザIDの取得 */
  rc = modulen('GetUserNameA', userid, 20);
  if rc=0  then
     put '特定のユーザIDでログオンしていません.';
  else
     put userid=;
run;