Alias finder

legarcon

Membre junior
28 Février 2004
19
1
Bonjour,
Ayant créé un "alias record" avec FSNewAlias et rempli et etc.., je voudrais le "transformer" en Alias du Finder, c'est à dire en fichier que je vois dans le finder.
Comment puis-je faire?
Merci
 

Didier Guillion

Membre d’élite
Club MacG
20 Juillet 2001
3 244
164
58
Toulouse
www.myriad-online.com
legarcon a dit:
Bonjour,
Ayant créé un "alias record" avec FSNewAlias et rempli et etc.., je voudrais le "transformer" en Alias du Finder, c'est à dire en fichier que je vois dans le finder.
Comment puis-je faire?
Merci

Perso (C+Carbon), je passe par un AppleScript :

/*********************************************************************
AppleScriptCreeAliasSurLeBureau
Possible extension, : avec changement de nom

make new alias file to \"%s\" at desktop with properties {name:"some name"}
********************************************************************/
void AppleScriptCreeAliasSurLeBureau(char * name)
{
PrintScript("tell application \"Finder\"");
PrintScript(" activate");
PrintScript(" make new alias file to \"%s\" at desktop",name);
PrintScript("end tell");
SendScript();
return ;
}


Cordialement
 

legarcon

Membre junior
28 Février 2004
19
1
Didier Guillion a dit:
Perso (C+Carbon), je passe par un AppleScript :

PrintScript("end tell");
SendScript();

Cordialement
Merci pour votre réponse, mais que sont ces fonctions PrintScript et SendScript que je ne trouve pas dans l'aide developer Apple?
Pour être plus complet dans ma demande, je dois dire que j'ai intérêt à utiliser des fonctions de la "CarbonLib" que je sais wrapper facilement dans un autre langage

Cordialement
 

Didier Guillion

Membre d’élite
Club MacG
20 Juillet 2001
3 244
164
58
Toulouse
www.myriad-online.com
legarcon a dit:
Merci pour votre réponse, mais que sont ces fonctions PrintScript et SendScript que je ne trouve pas dans l'aide developer Apple?
Pour être plus complet dans ma demande, je dois dire que j'ai intérêt à utiliser des fonctions de la "CarbonLib" que je sais wrapper facilement dans un autre langage

Cordialement

Voici :

Bloc de code:
/*********************************************************************
                        PrintScript
********************************************************************/
static void PrintScript(char * format,...)
{
va_list  argptr;
char chaine[512];

va_start( argptr, format );
vsprintf( chaine, format, argptr );
strcat(chaine,"\r");
if(script==NULL) script=NewHandle(0);
PtrAndHand(chaine,script,strlen(chaine));
return;
}


/*********************************************************************
                        SendScript
********************************************************************/
static Handle script;
static void SendScript(void)
{
OSErr 		anErr;
AEDesc		aScriptDesc = { typeNull, NULL };
AEDesc		resultText = { typeNull, NULL };
AEDesc 		messageDesc = { typeNull, NULL };
OSAID		aScriptID = kOSANullScript;
OSAID		aResultID = kOSANullScript;
ComponentDescription 	descr;
Component           	aComponent;
ComponentInstance	gScriptingComponent=NULL;

if(script)
	{
	if(gScriptingComponent==NULL)
		{
		descr.componentType         = kOSAComponentType;
		descr.componentSubType      = (OSType) 0;
		descr.componentManufacturer = (OSType) 0;
		descr.componentFlags        = kOSASupportsCompiling + 
				                   		kOSASupportsGetSource +
				                   			kOSASupportsAECoercion + 
												kOSASupportsAESending +
													kOSASupportsRecording +
														kOSASupportsConvenience +
															kOSASupportsEventHandling;
		descr.componentFlagsMask    = descr.componentFlags;

		aComponent = FindNextComponent( NULL, &descr );
		if(aComponent)
			gScriptingComponent=OpenComponent( aComponent );
		else
			Collapse("Warning : SendScript: Can't found AppleScrip component");
		}
	if(gScriptingComponent)
		{
		HLock(script);
		anErr = AECreateDesc( typeChar,*script,GetHandleSize(script), &aScriptDesc );
		HUnlock(script);
		if(anErr==noErr)
			{
			aScriptID = kOSANullScript;
			anErr = OSACompile( gScriptingComponent, &aScriptDesc,kOSAModeCompileIntoContext, &aScriptID );
			if(anErr==noErr)
				{
				anErr = OSAExecute( gScriptingComponent, aScriptID,kOSANullScript, kOSAModeNull, &aResultID );
				if(anErr && anErr!=errOSAScriptError)  Collapse("Warning : SendScript:OSAExecute: %d",anErr);
				OSADispose( gScriptingComponent, aResultID );
				}
			else Collapse("Warning : SendScript:OSACompile: %d",anErr);
			
			/* Erreur en cours ?*/
			
			if(anErr==errOSAScriptError)
				{
				char chaine[512];
				
				OSAScriptError( gScriptingComponent, kOSAErrorMessage, typeChar, &messageDesc);
				memset(chaine,0,sizeof(chaine));
//				BlockMoveData(*messageDesc.dataHandle,chaine,GetHandleSize(messageDesc.dataHandle));
				strcpy(chaine,"Apple script error");
				Collapse(chaine);
				AEDisposeDesc(&messageDesc);
				}
			OSADispose( gScriptingComponent, aScriptID );
			AEDisposeDesc(&aScriptDesc);
			}
		/* Fermeture du conponent */
		anErr=CloseComponent(gScriptingComponent);
		gScriptingComponent=NULL;
		}
	DisposeHandle(script);
	script=NULL;
	}
return ;
}
Je pense que tu devrait avoir a peut pres tout.
Ces deux fonctions te permettent de creer un script AppleScript d'apres un code Carbon, de le compiler et de le lancer en tache de fond.

"Collapse" est dans mon code l'affichage d'une erreur a l'utilisateur.
Cordialement
 

legarcon

Membre junior
28 Février 2004
19
1
Didier Guillion a dit:
Voici :

Je pense que tu devrait avoir a peut pres tout.
Ces deux fonctions te permettent de creer un script AppleScript d'apres un code Carbon, de le compiler et de le lancer en tache de fond.

"Collapse" est dans mon code l'affichage d'une erreur a l'utilisateur.
Cordialement
Merci beaucoup, je pense avoir ce qui me faut pour arriver à mes fins
Cordialement

Alain Legarçon