Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#] Open Adobe Bridge op bepaalde locatie

Pagina: 1
Acties:

  • Possstema
  • Registratie: Juli 2002
  • Laatst online: 10-11 10:49
Zo simpel als de titel lijkt, zo moeilijk vind ik het om te implementeren. Wat ik graag wil is vanuit een eigen C# applicatie Adobe Bridge openen in een speciale map.
Dit wou ik simpelweg doen door een System.Diagnostics.Process aan te maken en dan de locatie als parameter meegeven. Dit werkt helaas niet (dus ook niet als je bridge.exe maplocatie in cmd aanroept). Poging 2 was om de StartInfo.WorkingDirectory aan te passen, maar ook dit mocht niet baten.

Na echt een avond zoeken heb ik de volgende dingen bekeken/geprobeerd:
- Bridge SDK, alleen voor ontwikkelen plugins
- COM, alle CS3 applicaties hebben een COM-dll, behalve bridge :( !!
- De communicatie tussen alle CS applicaties gaat via het BridgeTalk protocol, maar hier is werkelijk niets over te vinden.

Nu kwam ik er net achter dat als je een map op het Bridge icoontje sleept hij hem wel opent! Wat is hier anders van dan aanroepen met een parameter?
Of weet iemand een andere manier hoe ik bridge kan vertellen waar hij naartoe moet navigeren. Want in princiepe heb ik het process beschikbaar, zou ik dan niet een soort call doen op dat process?

  • Possstema
  • Registratie: Juli 2002
  • Laatst online: 10-11 10:49
Goed, ik heb 'een' oplossing, maar die is niet ideaal. Ik heb me maar ff verdiept in de scripting, en nu blijkt dat je via de Adobe Extendscript Toolkit een script kan runnen, die vervolgens Bridge opstart. Vanuit daar kan je navigeren naar de gewenste locatie. Helaas kan je geen parameters meegeven met het script, dus ik schrijf eerst de locatie weg in een tijdelijk bestand, die ik vervolgens weer uitlees in Bridge. Zie hier de code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Bepaal locatie van tijdelijk bestand
string filePath = Environment.GetEnvironmentVariable("temp") + System.IO.Path.DirectorySeparatorChar + "CRIDestPath.temp";
// Open het om te (over)schrijven
FileStream fileStream = File.Open(filePath, FileMode.Create);

// Schrijf de locatie weg
StreamWriter streamWriter = new StreamWriter(fileStream);
streamWriter.WriteLine(destination);
streamWriter.Flush();
streamWriter.Close();

// Open het bestand (als het goed is met Adobe ExtendScript Toolkit)
Process process = new Process();
process.StartInfo.FileName = "OpenBridge.jsx";
process.Start();


Het benodigde ExtendScript ziet er zo uit:
JavaScript:
1
2
3
4
5
6
7
8
9
10
#target bridge

// Laad het bestand
var file = File(Folder.temp.fullName + '/CRIDestPath.temp');
// Maak het leesbaar
file.open('r');
// Haal de locatie op
var destination = file.readln();
// Geef de locatie door aan Bridge
app.document.thumbnail = new Thumbnail(destination );


Helaas krijg je dan de volgende melding:
Afbeeldingslocatie: http://jorritposthuma.nl/bridge.png

Dus, ik ben nog steeds op zoek naar de mooiere oplossing, al is dit wel een gave manier om met CS te communiceren. Een merge to HDR functie zal niet heel veel moeite zijn :).

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10 10:47
Je eerste methode met System.Diagnostics.Process is in principe prima. Het probleem wat je hebt is logisch, je moet eerst de locatie verkrijgen. Je hebt het nu via een script opgelost maar je zou ook het register kunnen gebruiken.
Als je eenmaal weet waar in het register Adobe Bridge zich registreert dan kun je dat adres gebruiken om de locatie van het programma op te halen.

Met betrekking tot je laatste probleem. Ik denk niet dat dat mogelijk is met Adobe Bridge. Zo'n controle zit er namelijk in om "foute" scripts tegen te gaan. Als ze inbouwen dat je een script kunt aanmerken als "safe" dan doen ze die functionaliteit teniet. Wellicht dat je met de SDK iets kan doen?

  • Possstema
  • Registratie: Juli 2002
  • Laatst online: 10-11 10:49
D-Raven schreef op maandag 27 oktober 2008 @ 09:30:
Je eerste methode met System.Diagnostics.Process is in principe prima. Het probleem wat je hebt is logisch, je moet eerst de locatie verkrijgen. Je hebt het nu via een script opgelost maar je zou ook het register kunnen gebruiken.
Als je eenmaal weet waar in het register Adobe Bridge zich registreert dan kun je dat adres gebruiken om de locatie van het programma op te halen.
Dat is niet helemaal wat ik bedoel, de locatie van Bridge kan ik idd wel uit het register halen (Installer gegevens), maar ik wil graag dat bridge (eigenlijk een soort verkenner) zelf een opgegeven locatie opent.
Met betrekking tot je laatste probleem. Ik denk niet dat dat mogelijk is met Adobe Bridge. Zo'n controle zit er namelijk in om "foute" scripts tegen te gaan. Als ze inbouwen dat je een script kunt aanmerken als "safe" dan doen ze die functionaliteit teniet. Wellicht dat je met de SDK iets kan doen?
Klopt, Adobe bepaalt adhv de map waarin het script staat of het een "safe" script is, zo maakt de toolkit Mijn documenten/Adobe Scripts aan, en voegt deze toe als veilig locatie.

  • Possstema
  • Registratie: Juli 2002
  • Laatst online: 10-11 10:49
Heeft iemand nog ideeen waarom explorer het wel lukt een specefieke map te openen in bridge en mij niet?