• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Photoshop Event Manager: Listen for key pressed to execute script

Explorer ,
Apr 21, 2021 Apr 21, 2021

Copy link to clipboard

Copied

I am trying to write a script that lets me switch between the lasso tool and eyedropper by hitting the SHIFT key. This is my try so far (code taken from Adobe forums and modified, I myself have minimal programming experience):

 

#target photoshop
if(ScriptUI.environment.keyboardState['shiftKey']){
if (getTool() == 'lassoTool') {
    setTool('eyedropperTool');
    alert("Your message here...")

} else if (getTool() == 'eyedropperTool') {
    setTool('lassoTool');
}
}

function getTool(){  
    var ref = new ActionReference();   
    ref.putEnumerated( charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );   
    var cTool = typeIDToStringID(executeActionGet(ref).getEnumerationType(stringIDToTypeID('tool')));  
    return cTool;  
}

function setTool(tool) {
    var desc9 = new ActionDescriptor();
    var ref7 = new ActionReference();
    ref7.putClass( app.stringIDToTypeID(tool) );
    desc9.putReference( app.charIDToTypeID('null'), ref7 );
    executeAction( app.charIDToTypeID('slct'), desc9, DialogModes.NO );
}

 

I have added this script to the Photoshop Event Manager. I have set the Photoshop Event that triggers the script to "everything" in the dropdown menu. Unfortunately, the script only executes when I do a selection while pressing SHIFT. Instead, I would like the script to run every time I press shift. Is that possible?

 

Thanks!

TOPICS
Actions and scripting , Windows

Views

443

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe
Community Expert ,
Apr 21, 2021 Apr 21, 2021

Copy link to clipboard

Copied

You concept of changing Photoshop current active tool every time shift is press would render Photoshop  unusable shift is user for some many reasons. Switching always to the eyedropper or lasso with each shift press would change Photoshop operation.

JJMack

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 21, 2021 Apr 21, 2021

Copy link to clipboard

Copied

An event manager isn't needed to detect Held shift. Just run the script and hit Escape when you want to quit it:

function tool(v) {
	if (!v) return; (ref = new ActionReference()).putClass(sTT(v + 'Tool'))
	dsc.putReference(sTT('null'), ref), executeAction(sTT('select'), dsc)
}

sTT = stringIDToTypeID, dsc = new ActionDescriptor(), env = ScriptUI.environment
cTs = {lassoTool: 'eyedropper', eyedropperTool: 'lasso'}; sleep = true; while(sleep) {
	try{refresh()}catch(err){sleep = false} if (env.keyboardState.shiftKey) tool(cTs[currentTool])
}

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 21, 2021 Apr 21, 2021

Copy link to clipboard

Copied

I really like that approach!

Could I just nest the code I posted in the question in a while-Loop that exits once escape has been pressed? Like this:

while(!ESC) {
    if(ScriptUI.environment.keyboardState['shiftKey'] && ScriptUI.environment.keyboardState['q']){
        if (getTool() == 'lassoTool') {
            setTool('eyedropperTool');
    //alert("Your message here...")

    } else if (getTool() == 'eyedropperTool') {
    setTool('lassoTool');
    }
}

I am not sure how to check if the escape key has been pressed. Could you tell me? (I know it's in your script but I am not able to identify that part of the code).

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 21, 2021 Apr 21, 2021

Copy link to clipboard

Copied

LATEST

ESC is not included in script. It's Photoshop break functionality to the script that's looping.

 

Instead of shiftKey you can use keyName that should detect other keys. Check it yourself...

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines