Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 12:51 | |
| Nouvelle version: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK
La nouvelle fonction ExecuteLNK(adr(lnk$)) de KGF.dll ou la procédure ExecuteLNK(lnk$) de KGF_SUB.bas exécute le programme associé à un fichier LNK comme si l'on avait double-cliqué sur le raccourci, ou lance le programme associé à un fichier dont le nom est passé en paramètre.
Cette fonction est principalement destinée à lancer des raccourcis placés sur le bureau, mais elle peut en fait être utilisée pour lancer n'importe quoi, pourvu que le chemin soit complet. Pas besoin de mettre le chemin en nom court.
Modules modifiés: KGF.dll, KGF_SUB.bas, demo_KGF_SUB.bas, KGF_SUB.chm | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 13:03 | |
| Argh, m'a curiosité me titille, tu bosses sur quoi en ce moment pour travailler sur les raccourcis du bureau ? Un lanceur d'appli, un bureau personnalisé, un environnement de dev ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 13:15 | |
| Ah, tu m'as percé à jour ! Je viens d'en terminer la première version ! C'est un programme qui permet de générer un source Panoramic qui implémente un menu présentant les icônes habituelles du bureau, dans un bandeau horizontal, avec un bord réduit. Un clic unique sur une des icônes lance le programme. La barre peut être réduite dans la barre des tâches et rappelée à nouveau. On peur en créer autant qu'on veut, et ils peuvent exécuter simultanément. Quand on place le curseur sur l'icône, le nom de l'icône du bureau s'affiche en "hint". Pour chaque menu, on génère: - un source .bas - un dossier du même nom + "_data" - dans ce dossier, il y a les icônes en format BMP (!), ainsi que deux fichiers texte, contenant pour le premier les noms des liens, et pour le second le texte à afficher en "hint" sur l'icône. Le programme a besoin de KGF.dll. Voici: - Code:
-
' creer_menu_pour_bureau.bas
labels() constantes() variables() form0() gui() initialisations()
end
sub labels() label click_lnk, listfic, lnksel, generer end_sub
sub constantes() dim bureau$ : bureau$ = "C:\Documents and settings\Klaus\bureau\" dim allusers$ : allusers$ = "C:\Documents and Settings\All Users\bureau\" dim ici$ : ici$ = dir_current$ dim icones$ : icones$ = ici$+"\"+"icones\" end_sub
sub variables() dim no%, taille%, f$, pic$, s$, d$, n%, i% dim no_fic%, no_ico%, no_hint%, no_save%, no_lnk%, no_liste% end_sub
sub form0() caption 0,"Génération d'un menu graphique" full_space 0 end_sub
sub GUI() no% = no% + 1 : dlist no% : no_fic% = no% no% = no% + 1 : dlist no% : no_ico% = no% no% = no% + 1 : dlist no% : no_hint% = no% no% = no% + 1 : save_dialog no% : no_save% = no% filter no_save%,"Source Panoramic|*.bas"
no% = no% + 1 : button no% : top no%,10 : left no%,10 caption no%,"Liste" : on_click no%,listfic no% = no% + 1 : button no% : top no%,10 : left no%,120 caption no%,"Générer" : on_click no%,generer
no% = no% + 1 : list no% : no_liste% = no% : on_click no%,lnksel top no%,80 : width no%,400 : height no%,550 no_lnk% = no% end_sub
sub initialisations() KGF_initialize("KGF.dll") end_sub
click_lnk: message "clic sur ["+item_read$(no_fic%,number_click-no_lnk%)+"]" return listfic: clear no_liste% dir_change allusers$ f$ = file_find_first$ while f$<>"_" item_add no_liste%,f$ f$ = file_find_next$ end_while dir_change bureau$ f$ = file_find_first$ while f$<>"_" item_add no_liste%,f$ f$ = file_find_next$ end_while file_find_close dir_change ici$ return lnksel: if dir_exists(icones$)=0 then dir_make icones$ if file_exists(bureau$+f$)=1 f$ = bureau$ + item_index$(no_liste%) else f$ = allusers$ + item_index$(no_liste%) end_if pic$ = file_extract_name$(f$) pic$ = icones$+left$(pic$,len(pic$)-4)+".ico" ExtractIconFromLNK(f$,pic$) LoadAnyImageFile(pic$) no% = no% + 1 : picture no% top no%,40 : left no%,10+count(no_fic%)*(ExtractIconFromLNK+10) width no%,ExtractIconFromLNK : height no%,ExtractIconFromLNK on_click no%,click_lnk clipboard_paste no% item_add no_fic%,f$ item_add no_ico%,pic$ f$ = file_extract_name$(f$) hint no%,f$ item_add no_hint%,f$ file_delete pic$ return generer: dir_dialog no_save%,ici$ f$ = file_name$(no_save%) if f$="_" then return if lower$(right$(f$,4))<>".bas" then f$ = f$ + ".bas" d$ = file_extract_name$(f$) d$ = left$(d$,len(d$)-4)+"_data\" file_open_write 1,f$ file_writeln 1,"label click" file_writeln 1,"dll_on "+chr$(34)+"KGF.dll"+chr$(34) file_writeln 1,"border_small 0" file_writeln 1,"caption 0,"+chr$(34)+"Menu de raccourcis"+chr$(34) file_writeln 1,"height 0,30+"+str$(ExtractIconFromLNK) file_writeln 1,"width 0,10+(10+"+str$(ExtractIconFromLNK)+")*"+str$(count(no_fic%)) file_writeln 1,"dlist 1001 : file_load 1001,"+chr$(34)+d$+"liens.txt"+chr$(34) file_writeln 1,"dlist 1002 : file_load 1002,"+chr$(34)+d$+"hints.txt"+chr$(34) file_writeln 1,"dim i%, s$" file_writeln 1,"for i%=1 to count(1001)" file_writeln 1," picture i% : left i%,(i%-1)*(10+"+str$(ExtractIconFromLNK)+")" file_writeln 1," width i%,"+str$(ExtractIconFromLNK) file_writeln 1," height i%,"+str$(ExtractIconFromLNK) file_writeln 1," file_load i%,"+chr$(34)+d$+"ico_"+chr$(34)+"+str$(i%)+"+chr$(34)+".bmp"+chr$(34) file_writeln 1," on_click i%,click" file_writeln 1," hint i%,item_read$(1002,i%)" file_writeln 1,"next i%" file_writeln 1,"end" file_writeln 1,"click:" file_writeln 1," s$ = item_read$(1001,number_click)" file_writeln 1," i% = dll_call1("+chr$(34)+"ExecuteLNK"+chr$(34)+",adr(s$))" file_writeln 1," return" file_close 1 d$ = left$(f$,len(f$)-4)+"_data\" if dir_exists(d$)=0 then dir_make d$ for i%=1 to count(no_fic%) file_save no_lnk%+i%,d$+"ico_"+str$(i%)+".bmp" next i% file_save no_fic%,d$+"liens.txt" file_save no_hint%,d$+"hints.txt" return #INCLUDE "KGF_SUB.bas"
EDIT Si l'on génère un tel programme en EXE, on peut créer un lien sur ce programme et inclure ce lien dans un autre menu généré de cette manière... On peut ainsi créer des menus graphiques hiérarchisés... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 17:19 | |
| Hum, ça m'a l'air super ça, je regarde avant d'aller me coucher ce soir | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 19:29 | |
| Et voilà une nouvelle version du programme de génération de menus. Un clic dans le menu qui s'affiche lors de la phase de création, provoque une question "Supprimer...". Une réponse positive enlève cette icône de la liste, et les icônes sur la droite sont décalées vers la gauche. Cette fonction manquait si l'on avait ajouté une icône par erreur. - Code:
-
' creer_menu_pour_bureau.bas
labels() constantes() variables() form0() gui() initialisations()
end
sub labels() label click_lnk, listfic, lnksel, generer end_sub
sub constantes() dim bureau$ : bureau$ = "C:\Documents and settings\Klaus\bureau\" dim allusers$ : allusers$ = "C:\Documents and Settings\All Users\bureau\" dim ici$ : ici$ = dir_current$ dim icones$ : icones$ = ici$+"\"+"icones\" end_sub
sub variables() dim no%, taille%, f$, pic$, s$, d$, n%, i%, k% dim no_fic%, no_ico%, no_hint%, no_save%, no_lnk%, no_liste% end_sub
sub form0() caption 0,"Génération d'un menu graphique" full_space 0 end_sub
sub GUI() no% = no% + 1 : dlist no% : no_fic% = no% no% = no% + 1 : dlist no% : no_ico% = no% no% = no% + 1 : dlist no% : no_hint% = no% no% = no% + 1 : save_dialog no% : no_save% = no% filter no_save%,"Source Panoramic|*.bas"
no% = no% + 1 : button no% : top no%,10 : left no%,10 caption no%,"Liste" : on_click no%,listfic no% = no% + 1 : button no% : top no%,10 : left no%,120 caption no%,"Générer" : on_click no%,generer
no% = no% + 1 : list no% : no_liste% = no% : on_click no%,lnksel top no%,80 : width no%,400 : height no%,550 no_lnk% = no% end_sub
sub initialisations() KGF_initialize("KGF.dll") end_sub
click_lnk: if message_confirmation_yes_no("Supprimer ["+item_read$(no_fic%,number_click-no_lnk%)+"]")=1 i% = number_click - no_lnk% item_delete no_fic%,i% item_delete no_hint%,i% if i%<=count(no_fic%) for k%=i% to count(no_fic%) clipboard_copy no_lnk% + k% + 1 clipboard_paste no_lnk% + k% next k% end_if delete no_lnk% + count(no_fic%)+1 end_if return listfic: clear no_liste% dir_change allusers$ f$ = file_find_first$ while f$<>"_" item_add no_liste%,f$ f$ = file_find_next$ end_while dir_change bureau$ f$ = file_find_first$ while f$<>"_" item_add no_liste%,f$ f$ = file_find_next$ end_while file_find_close dir_change ici$ return lnksel: inactive no_liste% if dir_exists(icones$)=0 then dir_make icones$ if file_exists(bureau$+f$)=1 f$ = bureau$ + item_index$(no_liste%) else f$ = allusers$ + item_index$(no_liste%) end_if pic$ = file_extract_name$(f$) pic$ = icones$+left$(pic$,len(pic$)-4)+".ico" ExtractIconFromLNK(f$,pic$) LoadAnyImageFile(pic$) no% = no% + 1 : picture no% top no%,40 : left no%,10+count(no_fic%)*(ExtractIconFromLNK+10) width no%,ExtractIconFromLNK : height no%,ExtractIconFromLNK on_click no%,click_lnk clipboard_paste no% item_add no_fic%,f$ item_add no_ico%,pic$ f$ = file_extract_name$(f$) hint no%,f$ item_add no_hint%,f$ file_delete pic$ pause 100 active no_liste% return generer: dir_dialog no_save%,ici$ f$ = file_name$(no_save%) if f$="_" then return if lower$(right$(f$,4))<>".bas" then f$ = f$ + ".bas" d$ = file_extract_name$(f$) d$ = left$(d$,len(d$)-4)+"_data\" file_open_write 1,f$ file_writeln 1,"label click" file_writeln 1,"dll_on "+chr$(34)+"KGF.dll"+chr$(34) file_writeln 1,"border_small 0" file_writeln 1,"caption 0,"+chr$(34)+"Menu de raccourcis"+chr$(34) file_writeln 1,"height 0,30+"+str$(ExtractIconFromLNK) file_writeln 1,"width 0,10+(10+"+str$(ExtractIconFromLNK)+")*"+str$(count(no_fic%)) file_writeln 1,"dlist 1001 : file_load 1001,"+chr$(34)+d$+"liens.txt"+chr$(34) file_writeln 1,"dlist 1002 : file_load 1002,"+chr$(34)+d$+"hints.txt"+chr$(34) file_writeln 1,"dim i%, s$" file_writeln 1,"for i%=1 to count(1001)" file_writeln 1," picture i% : left i%,(i%-1)*(10+"+str$(ExtractIconFromLNK)+")" file_writeln 1," width i%,"+str$(ExtractIconFromLNK) file_writeln 1," height i%,"+str$(ExtractIconFromLNK) file_writeln 1," file_load i%,"+chr$(34)+d$+"ico_"+chr$(34)+"+str$(i%)+"+chr$(34)+".bmp"+chr$(34) file_writeln 1," on_click i%,click" file_writeln 1," hint i%,item_read$(1002,i%)" file_writeln 1,"next i%" file_writeln 1,"end" file_writeln 1,"click:" file_writeln 1," s$ = item_read$(1001,number_click)" file_writeln 1," i% = dll_call1("+chr$(34)+"ExecuteLNK"+chr$(34)+",adr(s$))" file_writeln 1," return" file_close 1 d$ = left$(f$,len(f$)-4)+"_data\" if dir_exists(d$)=0 then dir_make d$ for i%=1 to count(no_fic%) file_save no_lnk%+i%,d$+"ico_"+str$(i%)+".bmp" next i% file_save no_fic%,d$+"liens.txt" file_save no_hint%,d$+"hints.txt" return #INCLUDE "KGF_SUB.bas"
| |
| | | Invité Invité
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 20:09 | |
| J'ai voulu essayer ce programme, car j'avais l'intention de faire quelque chose avec le bureau, pour enlever ensuite la majorité des icones de celui-ci. Donc j'ai voulu savoir si ton programme était similaire à mon idée. Mais: je reste bloqué ligne 80 avec : dir_change bureau$. Chez moi: le bureau est: dim bureau$ : bureau$ = "C:\Documents and Settings\xxxx\Bureau\". J'ai le message: répertoire inconnu ligne 80, alors que celui-ci est valable., et je le liste dans propriété. Je sais que d'autre sous W7, ont une autre syntaxe, mais moi, Documents and Settings fait bien partie du chemin. Je ne sais quel sera l'avis des autres sous W7.
Je viens de penser que je n'ai téléchargé la dernière version, mais je suis bloqué avant.
|
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 20:54 | |
| Dans mon source, il y a la procédure constantes() définie comme ceci: - Code:
-
sub constantes() dim bureau$ : bureau$ = "C:\Documents and settings\Klaus\bureau\" dim allusers$ : allusers$ = "C:\Documents and Settings\All Users\bureau\" dim ici$ : ici$ = dir_current$ dim icones$ : icones$ = ici$+"\"+"icones\" end_sub Les deux variables bureau$ et alluser$ doivent être adaptés pour correspondre à chaque installation. Je travaille sur une automatisation de cela, mais ce n'est pas prêt. Si le chemin que tu mets, est vraiment le bon, il ne peut s'agir que d'un problème de droit d'accès. Chez moi, pour établir le chemin, je faic clic droit/propriétés sur un fichier dans le répertoire, ou sur le nom "bureau" dans le répertoire portant le nom de l'utilisateur, le surligne le nom du chemin que je capte avec ctrl/C, puis je le copie dans la variable par ctrl/V, ceci pour éviter des fautes de frappe. J'ai notamment été embêté (et le mot est faible) par un caractère non affiché que j'avais réussi à saisir par mégarde, lors d'une faute de frappe. Je l'ai dit, je travaille sur une automatisation de la détermination de ces chemins. Et en plus, je travaille sur une mémorisation d'une copie de ces raccourcis dans le répertoire xxx_data créé lors de la génération. Ceci permettra de supprimer ces liens du bureau après la génération, tout en les gardant dans ce dossier, d'où on pourra les récupérer dans problème en cas de besoin. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 22:46 | |
| Voici une nouvelle version qui trouve automatiquement le chemin vers le bureau de l'utilisateur ET vers celui de "All Users" ! Cela devrait régler certains problèmes: - Code:
-
' creer_menu_pour_bureau.bas
labels() constantes() variables() form0() gui() initialisations()
end
sub labels() label click_lnk, listfic, lnksel, generer end_sub
sub constantes() ' dim bureau$ : bureau$ = "C:\Documents and settings\Klaus\bureau\" dim key_au$ : key_au$ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" dim value_au$ : value_au$ = "Common Desktop" dim key_u$ : key_u$ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" dim value_u$ : value_u$ = "Desktop" dim ici$ : ici$ = dir_current$ dim icones$ : icones$ = ici$+"\"+"icones\" end_sub
sub variables() dim no%, taille%, f$, pic$, s$, d$, n%, i%, k% dim no_fic%, no_ico%, no_hint%, no_save%, no_lnk%, no_liste% dim allusers$, bureau$ end_sub
sub form0() caption 0,"Génération d'un menu graphique" full_space 0 end_sub
sub GUI() no% = no% + 1 : dlist no% : no_fic% = no% no% = no% + 1 : dlist no% : no_ico% = no% no% = no% + 1 : dlist no% : no_hint% = no% no% = no% + 1 : save_dialog no% : no_save% = no% filter no_save%,"Source Panoramic|*.bas"
no% = no% + 1 : button no% : top no%,10 : left no%,10 caption no%,"Liste" : on_click no%,listfic no% = no% + 1 : button no% : top no%,10 : left no%,120 caption no%,"Générer" : on_click no%,generer
no% = no% + 1 : list no% : no_liste% = no% : on_click no%,lnksel top no%,80 : width no%,400 : height no%,550 no_lnk% = no% end_sub
sub initialisations() KGF_initialize("KGF.dll") ReadRegistryKey(3,key_u$,value_u$) bureau$ = ReadRegistryKey$ + "\" ReadRegistryKey(4,key_au$,value_au$) allusers$ = ReadRegistryKey$ + "\" end_sub
click_lnk: if message_confirmation_yes_no("Supprimer ["+item_read$(no_fic%,number_click-no_lnk%)+"]")=1 i% = number_click - no_lnk% item_delete no_fic%,i% item_delete no_hint%,i% if i%<=count(no_fic%) for k%=i% to count(no_fic%) clipboard_copy no_lnk% + k% + 1 clipboard_paste no_lnk% + k% next k% end_if delete no_lnk% + count(no_fic%)+1 end_if return listfic: clear no_liste% dir_change allusers$ f$ = file_find_first$ while f$<>"_" item_add no_liste%,f$ f$ = file_find_next$ end_while item_add no_liste%,"" dir_change bureau$ f$ = file_find_first$ while f$<>"_" item_add no_liste%,f$ f$ = file_find_next$ end_while file_find_close dir_change ici$ return lnksel: f$ = item_index$(no_liste%) if f$="" then return inactive no_liste% if dir_exists(icones$)=0 then dir_make icones$ if file_exists(bureau$+f$)=1 f$ = bureau$ + item_index$(no_liste%) else f$ = allusers$ + item_index$(no_liste%) end_if pic$ = file_extract_name$(f$) pic$ = icones$+left$(pic$,len(pic$)-4)+".ico" ExtractIconFromLNK(f$,pic$) LoadAnyImageFile(pic$) no% = no% + 1 : picture no% top no%,40 : left no%,10+count(no_fic%)*(ExtractIconFromLNK+10) width no%,ExtractIconFromLNK : height no%,ExtractIconFromLNK on_click no%,click_lnk clipboard_paste no% item_add no_fic%,f$ item_add no_ico%,pic$ f$ = file_extract_name$(f$) hint no%,f$ item_add no_hint%,f$ file_delete pic$ pause 100 active no_liste% return generer: dir_dialog no_save%,ici$ f$ = file_name$(no_save%) if f$="_" then return if lower$(right$(f$,4))<>".bas" then f$ = f$ + ".bas" d$ = file_extract_name$(f$) d$ = left$(d$,len(d$)-4)+"_data\" file_open_write 1,f$ file_writeln 1,"label click" file_writeln 1,"dll_on "+chr$(34)+"KGF.dll"+chr$(34) file_writeln 1,"border_small 0" file_writeln 1,"caption 0,"+chr$(34)+"Menu de raccourcis"+chr$(34) file_writeln 1,"height 0,30+"+str$(ExtractIconFromLNK) file_writeln 1,"width 0,10+(10+"+str$(ExtractIconFromLNK)+")*"+str$(count(no_fic%)) file_writeln 1,"dlist 1001 : file_load 1001,"+chr$(34)+d$+"liens.txt"+chr$(34) file_writeln 1,"dlist 1002 : file_load 1002,"+chr$(34)+d$+"hints.txt"+chr$(34) file_writeln 1,"dim i%, s$" file_writeln 1,"for i%=1 to count(1001)" file_writeln 1," picture i% : left i%,(i%-1)*(10+"+str$(ExtractIconFromLNK)+")" file_writeln 1," width i%,"+str$(ExtractIconFromLNK) file_writeln 1," height i%,"+str$(ExtractIconFromLNK) file_writeln 1," file_load i%,"+chr$(34)+d$+"ico_"+chr$(34)+"+str$(i%)+"+chr$(34)+".bmp"+chr$(34) file_writeln 1," on_click i%,click" file_writeln 1," hint i%,item_read$(1002,i%)" file_writeln 1,"next i%" file_writeln 1,"end" file_writeln 1,"click:" file_writeln 1," s$ = item_read$(1001,number_click)" file_writeln 1," i% = dll_call1("+chr$(34)+"ExecuteLNK"+chr$(34)+",adr(s$))" file_writeln 1," return" file_close 1 d$ = left$(f$,len(f$)-4)+"_data\" if dir_exists(d$)=0 then dir_make d$ for i%=1 to count(no_fic%) file_save no_lnk%+i%,d$+"ico_"+str$(i%)+".bmp" next i% file_save no_fic%,d$+"liens.txt" file_save no_hint%,d$+"hints.txt" return #INCLUDE "KGF_SUB.bas"
Pas de nouvelle version de KGF.dll nécessaire pour cela. J'utilise la fonction de lecture du registre que j'avais déjà implémentée. | |
| | | Invité Invité
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Ven 30 Nov 2012 - 23:59 | |
| Je viens de télécharger la dernière mouture, et essayé le programme. Je n'ai plus l'erreur signalé plus haut, vu que bureau$ n'a plus lieu. le clic sur List fonctionne, et en appuyant sur Générer, j'ai une erreur avec le message suivant: (52) Not correct string expression: .Line : 142. C'est la ligne: - Code:
-
file_writeln 1,"height 0,30+"+str$(ExtractIconFromLNK) |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 0:08 | |
| Recharge KGF.dll et KGF_SUB.bas... Je pense que c'est un problème de version. Et voici une nouvelle version du programme ! Ce programme sauvegarde maintenant TOUS les fichiers concernés (LNK, TXT, ...), enfin tout ce sur quoi on a cliqué, dans le dossier xxx_data\, avec le même nom. Et lorsqu'on clique sur une icône dans le menu généré, il va chercher son action à effectuer dans ce dossier et n'a plus besoin de la présence de ces icônes sur le bureau. On peut donc, après une génération réussie, supprimer ces liens du bureau, sachant que ces raccourcis (ou fichiers) sont toujours dans le dossier généré. - Code:
-
' creer_menu_pour_bureau.bas
labels() constantes() variables() form0() gui() initialisations()
end
sub labels() label click_lnk, listfic, lnksel, generer end_sub
sub constantes() ' dim bureau$ : bureau$ = "C:\Documents and settings\Klaus\bureau\" dim key_au$ : key_au$ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" dim value_au$ : value_au$ = "Common Desktop" dim key_u$ : key_u$ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" dim value_u$ : value_u$ = "Desktop" dim ici$ : ici$ = dir_current$ dim icones$ : icones$ = ici$+"\"+"icones\" end_sub
sub variables() dim no%, taille%, f$, pic$, s$, d$, n%, i%, k% dim no_fic%, no_ico%, no_hint%, no_save%, no_lnk%, no_liste% dim allusers$, bureau$ end_sub
sub form0() caption 0,"Génération d'un menu graphique" full_space 0 end_sub
sub GUI() no% = no% + 1 : dlist no% : no_fic% = no% no% = no% + 1 : dlist no% : no_ico% = no% no% = no% + 1 : dlist no% : no_hint% = no% no% = no% + 1 : save_dialog no% : no_save% = no% filter no_save%,"Source Panoramic|*.bas"
no% = no% + 1 : button no% : top no%,10 : left no%,10 caption no%,"Liste" : on_click no%,listfic no% = no% + 1 : button no% : top no%,10 : left no%,120 caption no%,"Générer" : on_click no%,generer
no% = no% + 1 : list no% : no_liste% = no% : on_click no%,lnksel top no%,80 : width no%,400 : height no%,550 no_lnk% = no% end_sub
sub initialisations() KGF_initialize("KGF.dll") ReadRegistryKey(3,key_u$,value_u$) bureau$ = ReadRegistryKey$ + "\" ReadRegistryKey(4,key_au$,value_au$) allusers$ = ReadRegistryKey$ + "\" end_sub
click_lnk: if message_confirmation_yes_no("Supprimer ["+item_read$(no_fic%,number_click-no_lnk%)+"]")=1 i% = number_click - no_lnk% item_delete no_fic%,i% item_delete no_hint%,i% if i%<=count(no_fic%) for k%=i% to count(no_fic%) clipboard_copy no_lnk% + k% + 1 clipboard_paste no_lnk% + k% next k% end_if delete no_lnk% + count(no_fic%)+1 end_if return listfic: clear no_liste% dir_change allusers$ f$ = file_find_first$ while f$<>"_" item_add no_liste%,f$ f$ = file_find_next$ end_while item_add no_liste%,"" dir_change bureau$ f$ = file_find_first$ while f$<>"_" item_add no_liste%,f$ f$ = file_find_next$ end_while file_find_close dir_change ici$ return lnksel: f$ = item_index$(no_liste%) if f$="" then return inactive no_liste% if dir_exists(icones$)=0 then dir_make icones$ if file_exists(bureau$+f$)=1 f$ = bureau$ + item_index$(no_liste%) else f$ = allusers$ + item_index$(no_liste%) end_if pic$ = file_extract_name$(f$) pic$ = icones$+left$(pic$,len(pic$)-4)+".ico" ExtractIconFromLNK(f$,pic$) LoadAnyImageFile(pic$) no% = no% + 1 : picture no% top no%,40 : left no%,10+count(no_fic%)*(ExtractIconFromLNK+10) width no%,ExtractIconFromLNK : height no%,ExtractIconFromLNK on_click no%,click_lnk clipboard_paste no% item_add no_fic%,f$ item_add no_ico%,pic$ f$ = file_extract_name$(f$) hint no%,f$ item_add no_hint%,f$ file_delete pic$ pause 100 active no_liste% return generer: dir_dialog no_save%,ici$ f$ = file_name$(no_save%) if f$="_" then return if lower$(right$(f$,4))<>".bas" then f$ = f$ + ".bas" d$ = file_extract_name$(f$) d$ = left$(d$,len(d$)-4)+"_data\" file_open_write 1,f$ file_writeln 1,"label click" file_writeln 1,"dll_on "+chr$(34)+"KGF.dll"+chr$(34) file_writeln 1,"border_small 0" file_writeln 1,"caption 0,"+chr$(34)+"Menu de raccourcis"+chr$(34) file_writeln 1,"height 0,30+"+str$(ExtractIconFromLNK) file_writeln 1,"width 0,10+(10+"+str$(ExtractIconFromLNK)+")*"+str$(count(no_fic%)) file_writeln 1,"dlist 1001 : file_load 1001,"+chr$(34)+d$+"liens.txt"+chr$(34) file_writeln 1,"dlist 1002 : file_load 1002,"+chr$(34)+d$+"hints.txt"+chr$(34) file_writeln 1,"dim i%, s$" file_writeln 1,"for i%=1 to count(1001)" file_writeln 1," picture i% : left i%,(i%-1)*(10+"+str$(ExtractIconFromLNK)+")" file_writeln 1," width i%,"+str$(ExtractIconFromLNK) file_writeln 1," height i%,"+str$(ExtractIconFromLNK) file_writeln 1," file_load i%,"+chr$(34)+d$+"ico_"+chr$(34)+"+str$(i%)+"+chr$(34)+".bmp"+chr$(34) file_writeln 1," on_click i%,click" file_writeln 1," hint i%,item_read$(1002,i%)" file_writeln 1,"next i%" file_writeln 1,"end" file_writeln 1,"click:" file_writeln 1," s$ = item_read$(1001,number_click)" file_writeln 1," s$ = "+chr$(34)+d$+chr$(34)+"+file_extract_name$(s$)" file_writeln 1,"message s$" file_writeln 1," i% = dll_call1("+chr$(34)+"ExecuteLNK"+chr$(34)+",adr(s$))" file_writeln 1," return" file_close 1 d$ = left$(f$,len(f$)-4)+"_data\" if dir_exists(d$)=0 then dir_make d$ file_save no_fic%,d$+"liens.txt" file_save no_hint%,d$+"hints.txt" for i%=1 to count(no_fic%) file_save no_lnk%+i%,d$+"ico_"+str$(i%)+".bmp" f$ = item_read$(no_fic%,i%) f$ = file_extract_name$(f$) if file_exists(bureau$+f$)=1 f$ = bureau$ + f$ else f$ = allusers$ + f$ end_if filebin_open_read 1,f$ k% = filebin_size(1) dim buffer%(k%+1) filebin_block_read 1,k%,buffer%(1) filebin_open_write 2,d$+file_extract_name$(f$) filebin_block_write 2,k%,buffer%(1) filebin_close 2 filebin_close 1 free buffer% next i% return #INCLUDE "KGF_SUB.bas"
| |
| | | Invité Invité
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 0:20 | |
| J'ai enregistré la dernière version, 5 mn avant de mettre le message. Mais je ne vois pas où KGF est appelé. En mettant le message juste avant: - Code:
-
message ExtractIconFromLNK j'obtiens la réponse: ExtractIconFromLNK, ce qui veut dire que cette variable n'est pas déclarée. Je devrais normalement avoir au moins 0. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 0:27 | |
| C'est parce que tu n'as pas une version à jour de KGF_SUB.bas. La version à jour a 56.770 octets et est datée du vendredi 30 novembre 2012 à 12:44:36. Dans ce fichier, entre les lignes 1336 et 1344, tu trouves ceci: - Code:
-
' ==== res% = dll_call2("ExtractIconFromLNK",adr(lnk$),adr(out$),adr(path$)) sub ExtractIconFromLNK(lnk$,out$) if variable("ExtractIconFromLNK")=0 then dim ExtractIconFromLNK if variable("ExtractIconFromLNK$")=0 then dim ExtractIconFromLNK$ ExtractIconFromLNK$ = string$(255," ") KGF_res% = dll_call3("ExtractIconFromLNK",adr(lnk$),adr(out$),adr(ExtractIconFromLNK$)) ExtractIconFromLNK = KGF_res% ExtractIconFromLNK$ = trim$(ExtractIconFromLNK$) end_sub et tu vois que ExtractIconFromLNK est parfaitement défini ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 0:33 | |
| | |
| | | Invité Invité
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 0:35 | |
| Voici l'écran: Le mode d'emploi est bien de lister en premier, puis de générer? |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 0:38 | |
| Merci, Jicehel ! C'est une bonne nouvelle, surtout parce qu'il y a une mention de Panoramic. Faudrait peut-être leur envoyer le lien vers le forum... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 0:55 | |
| Klaus est devenu EXTRA PANORAMIC ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 1:07 | |
| @Cosmos70: Désolé pour le mode d'emploi. Ce qu'il faut faire: 1. Bouton "Lister". Cela remplit la liste en bas avec TOUTES les icônes qui se trouvent sur le bureau. Tu trouveras d'abord les icônes provenant de \All Users\bureau\, puis une ligne blanche, puis les icônes provenant de \xxx\bureau\. 2. Sélectionner certaines icônes en cliquant sur la ligne correspondante dans la liste. L'icône s'affiche au-dessus. Répéter cette opération pour toutes les icônes qu'on peut inclure dans la barre de menus à générer. Si l'on s'est trompé, il suffit de cliquer sur l'icône affichée en haut et répondre positivement à la confirmation de suppression. 3. Lorsque l'ensemble des icônes souhaitées pour une barre donnée est affiché, alors on clique sur "Générer". Le programme demande alors le nom du menu à générer. Il faut le saisir sans extension, mais on peut choisir le dossier, voir même en créer un pour cela. Le programme place alors un fichier *.bas du même nom dans ce dossier, ainsi qu'un sous-dossier du même nom avec le suffixe "_data". Dans ce sous-dossier, on trouve liens.txt, hints.txt, les icônes en format BMP et les raccourcis voir les fichiers copiés à partir du bureau. 4. Générer l'exécutable à partir du module bas généré, et un a un joli menu graphique, façon mini-bureau. | |
| | | Invité Invité
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 1:10 | |
| Est-ce que cela marche chez toi?
Une fois listée, j'ai liqué sur un item pour voir, et j'obtiens un message d'erreur. Voici la partie concernée: j'ai mis un message pour lister ink$ et out$:
sub ExtractIconFromLNK(lnk$,out$) message lnk$+chr$(13)+out$ ' je reçois: ' C:\Users\Public\Desktop\Mozilla Firefox.Ink et ' C:\PANO\Basic_Panoramique\icones\Mozilla Firefox.ico puis: ' (29) Not correct arithmetic expression: Error in function. Line 1498 , soit la ligne suivante: if variable("ExtractIconFromLNK")=0 then dim ExtractIconFromLNK <<<== ligne concernée if variable("ExtractIconFromLNK$")=0 then dim ExtractIconFromLNK$
A noter que j'ai mis kgf_sub à la suite pour voir les numéros de ligne d'erreur. Je viens de lire ton message au moment d'envoyer, mais j'ai encore un problème: |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 1:25 | |
| J'ai regardé attentivement ce que tu as posté. - Code:
-
sub ExtractIconFromLNK(lnk$,out$) message lnk$+chr$(13)+out$ 1. tu as collé KGF_SUB.bas à la suite de ton source, à la place de la directive #INCLUDE. Bien. 2. tu as inséré une commande MESSAGE après la déclaration SUB. Bien. - Code:
-
je reçois: ' C:\Users\Public\Desktop\Mozilla Firefox.Ink et ' C:\PANO\Basic_Panoramique\icones\Mozilla Firefox.ico puis: 3. la première ligne donne le chemin complet et le nom de l'icône que tu veux traiter. Bien. 4. la seconde ligne donne le chemin et le nom d'un fichier temporaire dans lequel le programme va extraire l'icône, en format ICO. C'est correct. Ce répertoire \icones\ ne sert qu'à ça. Ce fichier sera ensuite chargée dans le presse-papier par LoadAnyImageFile(pic$), puis on crée le picture à l'écran, dans lequel on charge le presse-papier par clipboard_paste no%. Bien. - Code:
-
' (29) Not correct arithmetic expression: Error in function. Line 1498 , soit la ligne suivante: if variable("ExtractIconFromLNK")=0 then dim ExtractIconFromLNK <<<== ligne concernée 5. alors là, c'est le mystère total, car cette ligne fonctionne parfaitement chez moi. Elle n'a rien de particulier. Je l'ai isolé et place dans un programme à part: - Code:
-
if variable("ExtractIconFromLNK")=0 then dim ExtractIconFromLNK message str$(ExtractIconFromLNK) end
et ce programme affiche bien 0 ce qui est normal. Est-ce que quelqu'un a jeté un sort à ta machine ? | |
| | | Invité Invité
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 1:35 | |
| Je suis comme toi, je ne comprend pas trop bien. J'ai modifié la ligne concernée pour voir: - Code:
-
if variable("ExtractIconFromLNK")=0 then message "ok":stop:dim ExtractIconFromLNK Je reçois le message ok, et si je continu, je retrouve le message d'erreur. Je pense que le mieux sera que je redémarre ma machine, mais je verrais cela demain. Merci pour toute l'attention que tu portes. Je vais voir le petit bonhomme bleu avec des Zzz. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 1:37 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 1:42 | |
| Peut-être que tu as une espace en trop après THEN ! - Code:
-
if variable("ExtractIconFromLNK")=0 then dim ExtractIconFromLNK
Exécute cette ligne et tu auras une erreur ! Laisse une seule espace entre THEN et DIM, ça devient correct ! NB : on dit bien une espace et non un espace !
Dernière édition par papydall le Sam 1 Déc 2012 - 1:50, édité 1 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 1:45 | |
| En tout cas, chez moi, ça fonctionne bonne nuit les Panoramiciens | |
| | | Invité Invité
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 1:53 | |
| Un dernier pour la route (des songes). - Citation :
- Peut-être que tu as une espace en trop après THEN !
J'y ai pensé Papydall, et il n'y a qu'un espace, d'autant qu'au départ, c'est le code de Klaus. De plus cette erreur n’apparaît après le then, que si il n'y a qu'une seule commande. Si il y a plusieurs commandes après le then, il peut y avoir plusieurs espaces sans problème. Mais le code avec STOP, qui génère donc une commande supplémentaire, rend caduc cette erreur: stop et dim. Bonne nuit. |
| | | Invité Invité
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK Sam 1 Déc 2012 - 10:04 | |
| J'ai redémarré mon ordi, et ça fonctionne. Bravo! Comme on dit: mystère et boule de gomme quant aux problèmes rencontrés. |
| | | Contenu sponsorisé
| Sujet: Re: KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK | |
| |
| | | | KGF.DLL version V1.85 du 29/11/2012 : ajout ExecuteLNK | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |