Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Errore del context menu di windows
Forum - Visual Basic 6 - Errore del context menu di windows

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ottobits (Normal User)
Newbie


Messaggi: 12
Iscritto: 02/02/2009

Segnala al moderatore
Postato alle 12:05
Lunedì, 02/02/2009
Salve a tutti,
qualcuno mi sa spiegare per quale motivo un argomento passato ad un programma tramite contestuale, a volte causa il RUN dell'argomento?
Mi spiego. Ho il mio prog.exe che accetta i nomi dei files passati come argomento tramite la chiave di registro:
shell/command "c:\mioprog\prog.exe" "%1"
A volte succede che il contenuto della variabile %1 viene lanciato da windows.
Esempio (puramente indicativo):
shell/command "c:\mioprog\prog.exe" "%1"
%1 contiene winamp.exe perchè è stato selezionato dalla voce context menu di prog.exe. In pratica la stringa composta dal context è:
"c:\mioprog\prog.exe" "c:\winamp.exe"
A volte parte anche winamp.exe, ed è assurdo che cio avvenga, in quanto il programma main è prog.exe, mentra winamp.exe è solo un argomento all'interno della variabile %1. Perchè a volte winamp.exe (o qualsiasi altro file...) viene lanciato da windoze?
Ringrazio anticipatamente coloro che sapranno spiegarmi ed ovviare a questo problema.
Ciao! :)

Ultima modifica effettuata da ottobits il 02/02/2009 alle 12:08
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 17:01
Lunedì, 02/02/2009
ehm...non ti ho capito bene...
shell/command ??? (mai visto xD)

PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 17:19
Lunedì, 02/02/2009
ma il tuo scopo quale è? perchè passi come parametro diun programma, un altro programma?
Comunque se prog.exe è un programma fatto da te, posta il codice. Comunque spiega quello che vuoi fare.

se non erro shell/command "c:\mioprog\prog.exe" "%1" io l'ho utilizzata per associare un estensione di un file, ad un mio programma, in questo modo un file con estensione .asd per esempio associato al mio programma, apre il mio programma quando tendo di aprire questo file.

Ultima modifica effettuata da Overflow il 02/02/2009 alle 17:23
PM Quote
Avatar
ottobits (Normal User)
Newbie


Messaggi: 12
Iscritto: 02/02/2009

Segnala al moderatore
Postato alle 18:43
Lunedì, 02/02/2009
Ciao e grazie per le risposte!

il programma fa una operazione sul file che viene passato come parametro, ovverosia, lo critta o compatta:
mioprog.exe "%1"
apre "%1" in modo binary ed esegue la crittazione/compressione (get#, put#) appoggiandosi a una cartella temporanea. Quindi non è lui a lanciare "%1". Sta di fatto che a volte l'argomento "%1" fallisce, il mioprog.exe si apre, ma "%1" è stato intercettato da windows che esce fuori con l'avviso che si sta tentando di aprire (RUN) una applicazione potenzialmente dannosa. Ma io non gli ho dato il Run, l'ho semplicemente passato come argomento al mio programma via context menu!
E' una baco di windows? Succede anche per un'altro piccolo applicativo (non fatto da me) che ho installato nel context menu (calcola il crc32 del file che gli passi via "%1". Anche lui soffre di questo problema e a volte windows tenta di lanciare il programma che è solo passato come argomento. Ma non succede solo per gli eseguibili, puo accadere anche per files diversi come mpg. In questo caso (a volte) parte windows media player :-o

E' probabile che il problema sia insito nella chiave di registro del context menu che ho fatto, cosi com'è per l'altro programma che calcola il crc. Infatti selezionando un file con tasto destro e andando poi si (per esempio) winrar add file (o winzip), winrar.exe prende anche lui "%1" ma windows non si intromette mai nell'operazione. Da questo deduco che il problema sia da imputarsi a come viene costruita la estensione nel context menu.
Non so, è una ipotesi...

Edit: Non fare più post di seguito...il pulsante edit è fatto apposta :k:

Ultima modifica effettuata da GrG il 02/02/2009 alle 19:47
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 19:23
Lunedì, 02/02/2009
Non si e' ancora capito quale sia il codice del tuo programma ... mostralo chiaramente.

PM Quote
Avatar
ottobits (Normal User)
Newbie


Messaggi: 12
Iscritto: 02/02/2009

Segnala al moderatore
Postato alle 20:14
Lunedì, 02/02/2009
Ok, scusate se ho fatto due post di seguito, ma mi concederete un On Error dat che sono nuovo qui :)
Il codice è troppo complesso per essere postato, però questo è un esempio altrettanto valido, in cui si puo incorrere nel RUN non voluto da parte di windows:

Private Sub Form_Load()
    Dim cLine As String, b As Byte
    cLine = Command$
    ' tolgo gli apici " che arrivano dalla context
    cLine = (Mid$(cLine, 2, Len(cLine) - 2))
    ' cline è il nome completo del file con la path
    Open cLine For Binary As 1
    Do
        Get #1, , b
        ' elabora b
    Loop Until Loc(1) = LOF(1)
    Close 1
end
End Sub

Compilare con nome Mioprog.exe e metterlo in una cartella in C:\Mioprog

Chiave di registro:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\MioProg fai quello che devi]

[HKEY_CLASSES_ROOT\*\shell\MioProg fai quello che devi\command]
@="\"C:\\Mioprog\\Mioprog.exe\"\"%1\""

Ora il programma è comandabile dalla context menu; basta selezionare il file col tasto destro e selezionare "MioProg fai quello che devi".
Selezionando piu files, si incorre nell'errore che ho menzionato sopra, cioè Windows può uscire fuori con una richiesta di Run del file contenuto nella variabile %1, che invece deve essere normalmente passata a Mioprog.exe, che la riceverà su Command$ e poi filtrata su cLine.

Ultima modifica effettuata da ottobits il 02/02/2009 alle 20:17
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:28
Lunedì, 02/02/2009
Ok ... ora dacci anche un suggerimento concreto su come replicare il problema perche' ho compilato il codice e ho fatto tutto quanto ma non si e' mai presentato il problema ... magari ci dai un suggerimento preciso e cosi' si nota l'errore ...

P.S. Un programma non si termina MAI con End, per tutta una serie di motivi che sarebbe troppo lungo da elencare ... anche nel tuo caso, elimina la End e inserisci al suo posto una

Unload Me

PM Quote
Avatar
ottobits (Normal User)
Newbie


Messaggi: 12
Iscritto: 02/02/2009

Segnala al moderatore
Postato alle 20:39
Lunedì, 02/02/2009
Si, era solo un esempio fatto al volo... Cmq se hai inserito anche la chiave di registro dovresti avere la voce nel menu contestuale. Vai in una cartella dove hai dei files non lockati da altri processi (preferibilmente dei files che usi per fare dei test...), li selezioni tutti e col tasto destro li dai in pasto al programma compilato. Si avviano diversi processi (ovviamente) e vedrai che prima o poi salta fuori una richiesta di run di un applicativo passato come argomento (un file che hai in quella cartella) oppure parte media player se per esempio è un file mpeg. So che è un po complesso da spiegare, ma il problema si presenta, non tanto sul mio sistema dove ho il sistema di sviluppo, ma in quelli dove vado ad eseguire una nuova installazione del programma.

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:31
Lunedì, 02/02/2009
Testo quotato

Postato originariamente da ottobits:

... Vai in una cartella ...



L'ho fatto ... mai capitato quanto dici ...

Ho provato con tanti tipi di file ...

...

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo