Delphi: Esecuzione del programma e la procedura / funzione interna chiamata da CMD o utilizzando doppio clic sul interno associato

StackOverflow https://stackoverflow.com/questions/1285204

Domanda

- Recentemente ho eseguito su alcuni problemi che determinano da quale programma è stato chiamato così, se in entrambi i parametri volte è lo stesso - come: / qualcosa / qualcosa. Mi associo icona con programma a runetime e posso usare cmd chiamarla, ma, ogni volta che doubleclikc il file associato (con l'icona), progamma si apre semplicemente, ma non le chiamate necessarie rotine perché io non sono necessarie grilletto / attributo / parametro che se l'esecuzione è stata fatta DoubleClick, not Run ...> appname.exe / qualcosa / qualcosa.

Può fare semplice esempio o scrivere in teoria tutti con funzioni esperienza necessaria, ecc.

Al momento, come si può intuire, io uso ParamStr / ParamCount / blablabla / FindCMDLineSwitch / e alcune altre funzioni ... ma ... ancora ...: (

È stato utile?

Soluzione

Puoi spiegare un po '?

I think si vuole essere in grado di fare azione # 1 se DoubleClick utente su un'icona di documento per la "mydocument.ext", e l'azione # 2 se lui tipi

appname.exe mydocument.exe

doubleclicking renderà il guscio eseguire il verbo "aperto", che ha un associato "stringa di comando" nel registro. La cosa migliore è quella di impostare questa stringa di comando a qualcosa come ...

MyProgram.exe "%1" /doubleclicked

... e poi verificare l'/ doubleclicked bandierina in fase di esecuzione. Ovviamente, non c'è modo che si può evitare che l'utente digitando il comando con l'opzione "/ doubleclicked", ma questo è il modo in cui le opere di shell.

Altri suggerimenti

Come suggerisce Roddy, un interruttore parametro è Credo che l'unica soluzione affidabile. Si noti, tuttavia, che se un utente crea il proprio collegamento (s) questo non può soddisfare le vostre esigenze.

vale a dire. se l'utente crea un collegamento che include alcuni "documento" nella riga di comando, vuoi che da trattare come una linea di comando o di un "doppio click". La mia ipotesi è che sia la seconda.

Se è la prima allora si può smettere di leggere qui. :)

Ma se è il secondo allora potrebbe essere necessario mettere un po 'di lavoro per (più) in modo affidabile ottenere il comportamento desiderato ....

Ciò comporterebbe utilizzando una riga di comando per indicare lancio riga di comando , piuttosto che un lancio doppio click, dal momento che ci sono diversi modi per "efficace" doppio clic, ma solo un modo per eseguire qualcosa dalla riga di comando - cioè, utilizzare la riga di comando! (Io considero Start Menu -.> Esegui ... per essere un lancio a riga di comando, tra l'altro YMMV)

Quindi, se si trattasse di me vorrei creare un lanciatore specifica riga di comando per l'applicazione. Il lanciatore riga di comando sarebbe in realtà un semplice pezzo di codice che prende la riga di comando è dato e semplicemente aggiunge un ulteriore parametro, prima di chiamare l'eseguibile applicazione reale:

per es.

myapp param1 param2

che chiede semplicemente ShellExecute in modo efficace:

myappgui param1 param2 / cmd

Io stesso non sarei troppo preoccupato di avere due file eseguibili in quanto l'utente è molto meno preoccupati con il nome effettivo del exe che rappresenta la vostra applicazione "reale" quando si richiama esso attraverso la GUI, perché, naturalmente, le invocazioni GUI che don' t coinvolgono sapendo, o che necessitano di conoscere, il nome. Il file di tipo associazioni e le scorciatoie ecc semplicemente tutti i punti direttamente al "vero" myappgui.exe , anziché miaapp.exe

E il vostro riferimento riga di comando semplicemente indirizza gli utenti a utilizzare miaapp.exe per richiamare la vostra applicazione dalla riga di comando.

Nella domanda, se trova la riga di comando allora sa quando è stato lanciato tramite l'applicazione launcher riga di comando, altrimenti deve essere stato un doppio clic su di lancio / GUI.

Per quanto riguarda la maggior parte degli utenti, questi ultimi non possono mai nemmeno bisogno di sapere che ci sono due exe di coinvolgere. In ogni caso, si deve accettare che se / quando un utente scopre la vostra tecnica - che mai si sceglie -. Possono falsificare essa fabbricando una riga di comando per ottenere tutto ciò finisce che desiderano

Se questo è importante per voi, la linea di approccio lanciatore di comando forse lo rende un po 'meno probabile che essi scoprire il meccanismo - sapendo che ci sono due file eseguibili non è sufficiente - avrebbero anche bisogno di sapere l'opzione della riga di comando che il vostro launcher riga di comando aggiunge - se hanno appena usato myappgui.exe direttamente dalla riga di comando, senza utilizzare il programma di avvio riga di comando miaapp.exe , allora è ancora in corso per rispondere come se fosse lanciato dalla GUI!

D'altra parte, utilizzando un interruttore per indicare un GUI lancio di salute necessita di mettere quell'interruttore richiesto sul "vista del pubblico".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top