@Godlees, this post may help you if you have Python 3 installed. If not, I am going to try to adapt it to Python 2 so no DOS command is required. I prefer Python 3, but that may not be an option for all.
Prerequisite: User must have a Generic Credential installed for Box.com
TASK: Use a Generic Credential to log into Box.com at 'https://account.box.com/login/'. Populate the email and password fields, click submit.
(You will of course need to create your own appmask by creating and selecting UI Elements.)
SCREENSHOT OF FLOW:

Shots of flow, step by step, except for launching Chrome and navigating to 'https://account.box.com/login/':
Set Python path:

Set Python script path:

Run Python from the DOS prompt, storing its output into '%PythonOutput%'.

Split the output with custom delimiter ',' into CredList.

Set email to CredList[0]:

Set password to CredList[1]:

Fill in email field:

Click 'Next':

Fill in the password with CredList[1]:

Click 'Submit':

Here is the content of the Python script, only slightly modified from that of mrh1997's script.
#!python3
"""
Access windows credentials
"""
from typing import Tuple
import ctypes as CT
import ctypes.wintypes as WT
CRED_TYPE_GENERIC = 0x01
LPBYTE = CT.POINTER(WT.BYTE)
LPWSTR = WT.LPWSTR
LPCWSTR = WT.LPWSTR
class CREDENTIAL_ATTRIBUTE(CT.Structure):
_fields_ = [
('Keyword', LPWSTR),
('Flags', WT.DWORD),
('ValueSize', WT.DWORD),
('Value', LPBYTE)]
PCREDENTIAL_ATTRIBUTE = CT.POINTER(CREDENTIAL_ATTRIBUTE)
class CREDENTIAL(CT.Structure):
_fields_ = [
('Flags', WT.DWORD),
('Type', WT.DWORD),
('TargetName', LPWSTR),
('Comment', LPWSTR),
('LastWritten', WT.FILETIME),
('CredentialBlobSize', WT.DWORD),
('CredentialBlob', LPBYTE),
('Persist', WT.DWORD),
('AttributeCount', WT.DWORD),
('Attributes', PCREDENTIAL_ATTRIBUTE),
('TargetAlias', LPWSTR),
('UserName', LPWSTR)]
PCREDENTIAL = CT.POINTER(CREDENTIAL)
advapi32 = CT.WinDLL('Advapi32.dll')
advapi32.CredReadA.restype = WT.BOOL
advapi32.CredReadA.argtypes = [LPCWSTR, WT.DWORD, WT.DWORD, CT.POINTER(PCREDENTIAL)]
def GetGenericCredential(name:str) -> Tuple[str, str]:
"""
Returns a Tuple of Name and Password of a Generic Windows Credential
Uses bytes in Py3 and str in Py2 for url, name and password.
"""
cred_ptr = PCREDENTIAL()
if advapi32.CredReadW(name, CRED_TYPE_GENERIC, 0, CT.byref(cred_ptr)):
username = cred_ptr.contents.UserName
cred_blob = cred_ptr.contents.CredentialBlob
cred_blob_size = cred_ptr.contents.CredentialBlobSize
cred_str = CT.string_at(cred_blob, cred_blob_size)
password = cred_str.decode('utf-16le', errors='ignore')
advapi32.CredFree(cred_ptr)
return username, password
else:
raise IOError("Failure reading credential")
def main():
name, pwd = GetGenericCredential('https://account.box.com/login/')
print(name + ',' + pwd)
if __name__ == '__main__':
main()
For the curious, here is the content of my 'script.robin' (edited to remove my username):
IMPORT 'C:\\Users\\You\\AppData\\Local\\Microsoft\\Power Automate Desktop\\Console\\Workspace\\0f5103bd-6a64-4fab-8e98-1100ab7e4517\\controlRepo.appmask' AS appmask
IMPORT 'C:\\Users\\You\\AppData\\Local\\Microsoft\\Power Automate Desktop\\Console\\Workspace\\0f5103bd-6a64-4fab-8e98-1100ab7e4517\\imageRepo.imgrepo' AS imgrepo
WebAutomation.LaunchChrome Url: $'''https://account.box.com/login''' WindowState: WebAutomation.BrowserWindowState.Maximized ClearCache: False ClearCookies: False BrowserInstance=> Browser
SET pythonpath TO $'''\"C:\\Program Files\\Python37\\python.exe\"'''
SET pyscriptpath TO $'''C:\\Users\\HP6300\\Documents\\PAD\\wincred\\box.py'''
System.RunDOSCommand DOSCommandOrApplication: $'''%pythonpath% %pyscriptpath%''' StandardOutput=> PythonOutput StandardError=> PythonErrorOutput ExitCode=> PythonExitCode
Text.SplitWithDelimiter Text: PythonOutput CustomDelimiter: $''',''' IsRegEx: False Result=> CredList
SET email TO CredList[0]
SET password TO CredList[1]
WebAutomation.FormFilling.PopulateTextFieldCloseDialog BrowserInstance: Browser Control: appmask['Web Page \'https://account.box.com/login\'']['<input:text> \'login-email\''] Text: email EmulateTyping: True UnfocusAfterPopulate: False
WebAutomation.Click BrowserInstance: Browser Control: appmask['Web Page \'https://account.box.com/login\'']['<button> \'login-submit\'']
WebAutomation.FormFilling.PopulateTextField BrowserInstance: Browser Control: appmask['Web Page \'https://account.box.com/login?redirect_url=%2F\'']['<input:password> \'password-login\''] Text: password EmulateTyping: True UnfocusAfterPopulate: False
WebAutomation.Click BrowserInstance: Browser Control: appmask['Web Page \'https://account.box.com/login?redirect_url=%2F\'']['<button> \'login-submit-password\'']
Regards,
burque505