cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
Choose Language Hide Translation Bar
pniel
Level I

computer name

Hi jmpers,

I need to build an application in jmp for different users, meaning that different users will have different User Interface.. (it is the same application) I was wondering if is there a way to get user profile? Let say computer name, user name or server name from jmp ? Doing so I can decide which script to open

Tanks

pniel
2 ACCEPTED SOLUTIONS

Accepted Solutions
JohnPonte
Staff (Retired)

Re: computer name

Here is some JSL that I wrote for getting the username from the system. This worked in JMP 10, running on Windows 7.

dll = Load DLL( "mpr.dll" );

dll << DeclareFunction(

     "WNetGetUserA",

      Convention( STDCALL ),

      Alias ( "GetUserName" ),

      Arg( UInt8, "format", input ),

      Arg( AnsiString, "username", output ),

      Arg( UInt64, "length", update ),

      Returns( UInt32 )

);

username = "                                                  ";

unlen = length(username);

result = dll << GetUserName(0, username, unlen);

show(username);

dll << UnloadDLL();

First, you need to load the system DLL. I didn't have any luck with Advapi32.dll. But I found what I needed with mpr.dll. Notice I didn't need to specify a path to the DLL since it was on my system path.

dll = Load DLL("mpr.dll");

Next, you need to declare any method that you are going to call in the DLL. The method I want to use is actually called WNetGetUserA(), but by defining an alias, I can simply call it using GetUserName().

dll << DeclareFunction(

      "WNetGetUserA",

      Convention( STDCALL ),

      Alias ( "GetUserName" ),

      Arg( UInt8, "format", input ),

      Arg( AnsiString, "username", output ),

      Arg( UInt64, "length", update ),

      Returns( UInt32 )

);

Now I want to define the variables that I am going to pass in as arguments. I create a username and initialize it to blanks. Then I use the length() function in JMP to get the current length of the buffer I just created.

username = "                                                  " ;

unlen = length(username);

Now I can call the function. Notice the first argument is input only, so I just use a constant instead of defining a variable. Then the show() command shows my username after making the call.

result = dll << GetUserName(0, username, unlen);

show(username);

Finally, I am done so I clean up.

dll << UnloadDLL();

I hope this works for you. If you come up with a better way, please let us know.

By the way, using loadDLL only works on Windows. It isn't supported on the Mac. For that reason I do a check at the top of my script.

Names Default To Here( 1 );

If( Host is( Mac ),

     Print( "Sorry, this script is not supported on Mac." );

     Stop();

);

Enjoy,

JohnP

View solution in original post

bswedlove
Level IV

Re: computer name

This worked for me to get the current user name on Windows:

uname = Get Environment Variable( "USERNAME" );

View solution in original post

18 REPLIES 18
mattf
Level V

Re: computer name

Hi Pneil:

On Windose, from the start menu, run, cmd opens a DOS window. From the prompt type "set" for the list of active environmental variables.

Also - right-click on the My COmputer icon on the desktop - sleect Advanced tab environmental variables button near the bottom.

JMP 9 includes the handy function to retrieve any one of these from the environment:

cname = Get Environment Variable( "COMPUTERNAME" );

and one can branch accordingly base on the returned value from there.

Best regards,
-Matt
pniel
Level I

Re: computer name

hi,

i am using jmp 8 is there a similar function there that retrieve the computer nam

tanks
ENTHU
Level IV

Re: computer name

I need to get the computer user name and store it in a column of a datatable.I am using following script - 

 

uname = Get Environment Variable( "COMPUTERNAME" );
dt:user = uname;

where dt is the data table and user is the name of the column.

But I get the following error -

"Cannot set value for the column 'user' because the row number (-1) is not valid."

Can someone pls tell me what is wrong here?

txnelson
Super User

Re: computer name

You have to tell JMP which row in the data table for column User you want to save the value to.

uname = Get Environment Variable( "COMPUTERNAME" );
dt:user[1] = uname;

The above would save the value of "uname" to row 1 value for column "user"

Jim
ENTHU
Level IV

Re: computer name

It works.But what if I have 10 rows and want to have uname ina ll rows?

Do I use a for loop?

txnelson
Super User

Re: computer name

You can use a For() Loop, or you could do something like the below:

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Consumer Preferences.jmp" );

uname = Get Environment Variable( "COMPUTERNAME" );

dt << New Column( "User", character, set each value( uname ) );
Jim
ENTHU
Level IV

Re: computer name

Awesome! thanks
bswedlove
Level IV

Re: computer name

This worked for me to get the current user name on Windows:

uname = Get Environment Variable( "USERNAME" );
hogi
Level XII

Re: computer name

many thanks

Can someone mark @bswedlove 's reply as a solution.