RACCOURCI RAPIDE (PROGRAMME DE RACCOURCIS PARAMÈTRABLES)

cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009 - 19 févr. 2007 à 20:57
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009 - 23 juin 2007 à 11:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41545-raccourci-rapide-programme-de-raccourcis-parametrables

cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
23 juin 2007 à 11:37
Bonjour à tous,
un petit message pour dire que Raccourci Rapide est desormé disponible en version compilé sur

http://bipbeep.ifrance.com/Files/6_raccourci_rapide.exe

Le logiciel dispose maintenant d'un systeme de mise à jour (mais comme le code n'est pas fini je ne le poste pas encore) donc vous pouvez telecharger Raccourci Rapide depuis le net et ensuite le mettre à jour regulierement !

Bonne journée à tous
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
23 mai 2007 à 18:54
bonjour,
Voila comme promis une maj de Raccourci Rapide comme d'abitude en cas de bugs/suggestions je suis disponible

je recommande de lire le fichier txt fournit avant d'utiliser cette version
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
7 avril 2007 à 13:52
par exemple tu n'as qu'à créer un raccourci sur un fichier BMP avec ton pgm, tu veras le résultat est très moyen....
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
6 avril 2007 à 18:04
OK, merci pour les codes du popup et du hook je vais etudier sa, mais pour les fonctions de recuperation de l'icone c'est un peu pre ce que j'ai fait mais ma fonction permet en plus d'ajouter des icones 'par defaut' aux autres item du popup.
En fait je charge toute les icones systeme dans un list d'image, puis je l'ajoute a ma list d'image qui contient egalement les image par defaut. Donc les items qui ont une icone gardent le meme numero pour leur icone et les item avec les popup programme le numero correspond a la somme d'une part du nombre d'image dans la list dite par defaut et d'aute part du resultat de la fonction geticonindex.

Donc apparament j'ai fait comme la fonction que tu me donne. D'ailleur elle fonctionne tres bien, donc je ne vois pas pourquoi tu me dis que cette fonction est plus propre?

Encore merci pour les fonction de hook car je dois dire que regardant la source, je me suit dit que j'en avai pour un moment pour extraire ce qui me faut or je n'ai pas de temps à moi pour le moment.
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
6 avril 2007 à 17:45
ah oui pour les icone tu auras besoin de ces deux fcts :
function GetIconIndex(Extension: string; Attribus: DWORD; var TypeFichier: string)
: Integer;
var
SHFileInfo: TSHFileInfo;
begin
if Extension[1] <> '.' then Extension := '.' + Extension; //Il faut le "." avant
{On récolte les info pour l'extension}
SHGetFileInfo(PChar(Extension), Attribus, SHFileInfo, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_TYPENAME);
TypeFichier := SHFileInfo.szTypeName; //Quel est le type de fichier
Result := SHFileInfo.iIcon; //index de l'icone dans l'image list du systeme
end;
////////////////////////////////////////////////////////////////////////////////
/////// RECUPERE L'ICONE ASSOCIEE A UN PGM ET LE MET DANS L'ICONE DU MENU //////
////////////////////////////////////////////////////////////////////////////////

function GetIconIndex2(Extension: string; Attribus: DWORD)
: Integer;
var
SHFileInfo: TSHFileInfo;
begin
SHGetFileInfo(PChar(Extension), Attribus, SHFileInfo, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_TYPENAME);
Result := SHFileInfo.iIcon; //index de l'icone dans l'image list du systeme
end;
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
6 avril 2007 à 17:42
je te met à disposition mon composant menu, étant donné que je l'ai recup sur ce site, plus mes modifications :
http://jace2005.free.fr/tesMenuxp.pas

il reste quelques petites choses à faire, notamment les bordures types XP, mais la il faut passer par du subclassing et ca dépasse a la fois mes besoins et mes compétences ;)

pour les icones j'utilises ce bout de code :
procedure getimagemenu(handle: thandle; menu: tmenuitem; cmda: string;
image1: timage; tt: timagelist; colorbande: tcolor);
var
h: hIcon;
ext, typefichier: string;
begin
// le paramètre zero permet de récupérer la première icone associé à l'exe , dll, ou raccourcis
H := ExtractIcon(handle, pchar(cmda), 0);
if h > 0 then
begin
TT.GetIcon(GetIconIndex2(pchar(cmda), 0), Image1.Picture.Icon.Create);
menu.Bitmap.ReleaseHandle;
menu.bitmap.Canvas.brush.Color := colorbande;
menu.Bitmap.Height := 17;
menu.Bitmap.Width := 17;
menu.Bitmap.Transparent := true;
menu.bitmap.Canvas.draw(0, 0, image1.Picture.Graphic);
end
else //il s'agit d'un fichier
begin
if trim(cmda) <> '' then
begin
if posex('http:\\', cmda, 1) > 0 then
menu.ImageIndex := 23
else
begin
if posex('.msc', cmda, 1) > 0 then
menu.ImageIndex := 24
else
ext := midstr(cmda, length(cmda) - 3, 4);
if posex('.', ext, 1) > 0 then
begin
TT.GetIcon(GetIconIndex(ext, 0, TypeFichier),
Image1.Picture.Icon.Create);
menu.Bitmap.ReleaseHandle;
menu.bitmap.Canvas.brush.Color := colorbande;
menu.Bitmap.Height := 17;
menu.Bitmap.Width := 17;
menu.Bitmap.Transparent := true;
menu.bitmap.Canvas.draw(0, 0, image1.Picture.Graphic);
end
else
begin
if DirectoryExists(trim(cmda)) then
menu.ImageIndex := 22
else
menu.ImageIndex := 24;
end;
end
end
else
menu.ImageIndex := 24;
end
end;


pour les hooks :

function MyHookProc(code: Integer; w: WPARAM; l: LPARAM): LRESULT; stdcall;
var
infos: PKBDLLHOOKSTRUCT;
i: integer;
raccourci: traccourci;
WIN_ACTIF, MAJ_ACTIF, CTRLALT_ACTIF, CTRLMAJ_ACTIF: boolean;
thekey: string;
begin // tout ca est en fait géré dans un thread
Result := 1; thekey := '';
infos := PKBDLLHOOKSTRUCT(L);
if not disable_rac then //si raccourci clavier actif
begin
if is_editing = false then
begin
if (Code = HC_ACTION) then
begin
CTRLMAJ_ACTIF := (GetAsyncKeyState(VK_CONTROL) <> 0) and (GetAsyncKeyState(vk_shift)
<> 0);
MAJ_ACTIF := GetAsyncKeyState(VK_SHIFT) <> 0;
CTRLALT_ACTIF := (GetAsyncKeyState(VK_CONTROL) <> 0) and (GetAsyncKeyState(VK_MENU)
<> 0);
WIN_ACTIF := (GetAsyncKeyState(VK_Lwin) <> 0) or (GetAsyncKeyState(VK_rwin) <> 0);
if (infos^.vkCode VK_F4) and (MAJ_ACTIF true) and (GetAsyncKeyState(vk_F4) <> 0)
then
begin // procedure de kill du process en foreground
if ProgEnCours(ExtractFileName(application.ExeName)) <> EnumProcess.num_proc then
if ProgEnCours('Explorer.exe') <> EnumProcess.num_proc then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
EnumProcess.num_proc), 0);
exit; //a teste
end;
end
else
begin
if CTRLALT_ACTIF then thekey := 'CTRL+ALT';
if MAJ_ACTIF then
thekey := 'MAJ'; // attention a l'ordre d'appel: peut etre gerer GETASYNC
if CTRLMAJ_ACTIF then thekey := 'CTRL+MAJ';
if WIN_ACTIF then thekey := 'WIN';
if MAJ_ACTIF or WIN_ACTIF or CTRLMAJ_ACTIF or CTRLALT_ACTIF then
begin
if infos^.flags = 0 then
begin
for i := 0 to listraccourci.Count - 1 do
begin // on ne break pas car offre possibilite multiraccourci
raccourci := traccourci.Create;
raccourci := traccourci(listraccourci.items[i]);
if (raccourci.num infos^.vkCode) and (raccourci.key thekey) then
begin
if raccourci.type_rac = 1 then //MODE TEXTE
begin
//if
// ProgEnCours(ExtractFileName(application.ExeName)) <> EnumProcess.num_proc
// then
// begin
//on doit relacher toute les clé pour faire les sendkeys
keybd_event(raccourci.num, VkKeyScan(char(raccourci.num)),
KEYEVENTF_KEYUP, 0);
raccourci.execute_cmd(EnumProcess.num_wnd, raccourci.num);
exit; // permet de ne pas ecrire sur une fentre edition lors de l'appel
// et evite d'appeler racourci de l'appli active
//end
end
else
begin //MODE RACCOURCI - PAS BESOIN DE CONNAITRE LA FENETRE FOREGROUND
raccourci.execute_cmd(0, 0);
exit; // permet de ne pas ecrire sur une fentre edition lors de l'appel
// et evite d'appeler racourci de l'appli active
end;
end;
end;
end;
end;
end;
end;
end;
end;
Result := CallNextHookEx(HookClavier, Code, w, l);
end;
////////////////////////////////////////////////////////////////////////////////
/////////////////////////// INSTALL LE HOOK DE L'APPLI ////////////////////////
////////////////////////////////////////////////////////////////////////////////

function InstallationDuHook: HHOOK;
const
WH_KEYBOARD_LL = 13;
begin
Result := SetWindowsHookEx(WH_KEYBOARD_LL, @MyHookProc, GetModuleHandle(nil), 0);
end;
////////////////////////////////////////////////////////////////////////////////
/////////////////////////// RETIRE LE HOOK DE L'APPLI /////////////////////////
////////////////////////////////////////////////////////////////////////////////

procedure RetraitDuHook(Hook: HHOOK);
begin
UnhookWindowsHookEx(Hook);
end;

qqs explication, je gère l'ensemble de mes raccourcis dans un listobject. j'ai créer un objet raccourci de ce genre
Traccourci = class(tobject)
public
num: byte;
key: string;
chemin: string;
libelle: string;
repertoire: string;
type_lancement: integer;
type_rac: integer;
params: string;
function execute_cmd(Myhwnd: cardinal; keyd: integer): integer;
end;

évidemment ca ne correspondra pas tout a fait a ton pgm mais te donnera qqs pistes intéressantes (n'oublie pas de regarder la source que je t'ai indiqué pour comprendre comment ca marche)...

tschusssss
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
6 avril 2007 à 16:27
Bon j'ai regardé les sources que tu m'as indiqué, seulement se sont des sources dont je me suis deja inspiré, je m'explique :

pour la source sur les icones, j'ai fait la meme chose seulement je me suis confronté a un probleme, en effet les icones des programmes sont transferer de la list systeme à une List d'image or mon popupmenu utilise sa propre list d'image pour les différentes icones comme les icones d'arret systeme par exemple.
Or si je 'charge' les icone du systeme dans la liste d'image du programme directement, je ne peut pas retrouvé le numero des icones des programmes. Donc en fait j'utilise une list d'image dite 'defaut' qui contient les icones par defaut du popup,une autre list d'image qui va contenir uniquement les icones systeme et une derniere list d'image qui elle contient les deux list d'images (par defaut et systeme). C'est la seule solution que j'ai trouvé, mais si tu vois une meilleur méthode je prend.

Pour l'autre programme, je connais ce composant, je vais regardé le code pour voir si je peux me passer de la dll (si qui m'arrangerai)

J'ai oublié de presicer pour la fonction de reorganisation, qu'elle est effectivement assez chiante à suivre surtout sans commentaire mais ces derniers ne seront pas oubliés lors de la prochaine MAJ (le principe est en fait assez simple, je reecrit tout la partie du fichier ini qui contient les noms des raccourcis en les classant suivant leur type)
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
6 avril 2007 à 16:08
Bonjour, merci pour ces remarques, je vais voir les deux sources que tu m'as indiqué, pour l'unité à rallonge, je suppose que tu parles de la fonction de réorganisation par type, je dois dire que je suis d'accord qu'elle est assez longue mais elle permet, en étaant appelé assez souvent, d'organisé les items du popup par type et de mettre les icones pour les programmes.

Pour ton probleme de scintillement je pense savoir d'où vient le probleme, a mon avis, c'est à cause du fait que l'application se met toujours au premier plan, or si tu as la bare de tache en dessou, il doit y avoir un conflit entre les deux d'où le scintillement, pour regler le probleme je ne vois come solution de mettre mon programme ailleur (fonction que j'ai programmé à ta demande d'ailleur :) )

Par contre je souhaiterai pour une prochaine MAJ avoir un popup plus simpas à l'instar de ton programme, j'ai déjà trouvé quelque sources pour m'aider mais si tu as des sugestions je suis preneur.
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
6 avril 2007 à 12:05
Bonjour tous le monde, voilà comme promis une mis à jour vient d'être postée, et une autre suivera après mes exam soit courant mai.

Cette MAJ enlève les bugs détectés par Jace, et rajoute d'autres options (attention toutes les possibilités de combinaison n'ayant pas été testés il peut y avoir des bugs), ainsi vous pouvez changer de place l'icone du logiciel (à gauche de l'ecran, à droite ou en haut), et j'ai intégré une fonction de copie de cd automatique (seulement si le ou les fichiers à copier sont des vidéos) (cette fonction est en cours de modification car elle utilise un timer qui scan le lecteur de cd, ce qui prend à mon avis plus de resource que l'utilisation du message windows DRIVECHANGE)

Dans la prochaine MAJ, vous trouverez une fonction de MAJ automatique par internet, un popup menu redessiné, une synchronisation automatique de vos dossiers et un logiciel de sécurité (peut être du genre dongle usb)

Je suis toujours disponible si vous avez des commentaires, que se soit sur le fond ou la forme.

Bonne Prog à tous
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
23 févr. 2007 à 17:45
jace2005.free.fr, c'est mieux
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
22 févr. 2007 à 20:16
ok je ne connaisais pas je vais voir l'adresse donnée (pour les hook,j'ai deja ce composant mais je prefere eviter pour le moment). au fait l'adresse de ton site ne fonctionne pas (en plus l'adresse serai plutot http://jace.free.fr et non http:\\jace.free.fr mais dans les deux cas sa ne marche pas)
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
22 févr. 2007 à 18:52
qd je parle de hotkey, il ne s'agit pas des hotkeys de l'appli mais des hotkeys windows. Va voir par exemple http://www.joejoesoft.com/vcms/119/ , il y a un exemple, evidfemment tu en trouveras des tonnes comme celui-la, mais la qualité du code est en général assez bonne.

sinon tu recherches sur msdn sur les hook clavier, ou sur le forum delphi un composant écrit par blue hippo qui utilise cette technique
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
22 févr. 2007 à 16:33
Jace : pour les hotkey j'ai deja essayé mais cela ne fonctionne plus dès que l'application n'a plus le focus (c'est a dire la plupart du temps)
Pour le bug, je vois d'où il vient, j'avais deja eu ce probleme mais je pensais qu'il etait reglé.
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
21 févr. 2007 à 21:38
ben tu crée un premier sous menu, tu fermes la fenetre d'édition, tu teste ta modif, puis tu refait la manip plusieurs fois, et tu verras le premier menu de raccourci apparait plusieurs fois.

Pour les raccoucis, il faut soit utiliser les hotkey( tu trouve facilement des exemples sur le net) soit un hook clavier, qui nécessite un peu de code mais que je prefere à la premiere solution.
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
21 févr. 2007 à 21:35
bon j'ai parlé trop vite, donc il y a bien un bug lors de l'ajout des raccourcis que je n'avias pas vu (merci jace), en effet si on ajout un raccourci vers une url avant d'avoir ajouter un raccourci vers un dossier puis vers un document, je bug survient. je vais voir ce que je peut faire.
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
21 févr. 2007 à 21:10
jace :autre chose, je vien de reglé le bug de modif de l'icone mais moi je n'ai pas de bug pour les raccourcis qui apparaissent plusieurs fois, tu peut m'ne dire plus
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
21 févr. 2007 à 20:53
Jace : ok je vais voir tout sa merci mais comme je l'ai dis j'ai beaucoup de travail d'où le fait que je poste ce programme alors qu'apparemment il y a quelque bug mais pour te repondre, je vien de voir qu'effectivement le changement d'icone ne fonctionne plus, mais pour le plantage sur des changement autorisé, c'est un oubli car ceul les fichiers ico sont autorisés. Je n'avais pas pensé a récuperer l'icone du raccourci, donc je vais voir de ce coté là ce que je peux faire. Pour le reste (icone de session, placement du programme) c'est un choix de programmation que j'ai fait. (meme si je vais voir pour l'option de deplacement du programme). En revanche je n'arrive pas a faire fonctionner les raccourci clavier car l'application n' a pas toujours le focus (meme si elle est toujour au premier plan) aurai tu une solution ?
Merci de ces suggestions, mais pour une mise a jour faudra attendre car je suis en premiere année de medecine et je n'ai pas vraiment de temps pour programmer
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
21 févr. 2007 à 19:22
j'ai oublié de dire qu'il existe un petit logiciel nommé clavier+ qui ait pas mal, mais écrit en C++, qui peut aussi te donner des idées.
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
21 févr. 2007 à 19:18
salut,

j'ai regardé très brievement ton pgm et mes remarques sont les suivantes :
- Qd tu dis pas de bugs, j'ai des doutes notamment qd tu changes d'icone, la fois d'après on revient sur l'icone par défaut. idem pour le choix des icones qui plante sur des types de fichier pourtant autorisé. Qd tu rajoutes un raccourci, puis tu testes , puis tu rajoutes un autre raccourci alors le premier raccourci apparait deux fois, puis trois, etc... ?????
- les icones sont pas top surtout celles genre fermé session,etc...
- tu récupere pas l'icone du pgm ou fichier en raccourci, ce qui le rend illisible ...
-le choix des menus me parait un peu statique , ainsi que la présentation, tu peux surement faire mieux ( menu nouveau raccourci+ menu editer raccourci,...)
- pourquoi bloquer l'icone a une certaine zone c'est un peu dommage je trouve , peut être rajouter une option sur le comportement de l'icone.
-pas de raccourci clavier, ce qui est franchement pratique

bon je suis peut etre un peu trop critique, mais c'est que j'ai écrit un pgm de ce type que tu trouveras sur http:\\jace.free.fr . je ne veux nullement dire que c'est un modèle à suivre mais peut etre trouveras tu un peu d'inspiration pour continuer ton boulot, qui est loin d'etre mauvais.

QQs remarques sur ton coding (que j'ai survolé) :
- nomme mieux tes unités, procédure et variable
- tu peux aussi segmenter ton code en unité , ca mange pas de pain, et au final c'est plus clair, de même qui'indenter ton code.
- pas de gestion des exceptions, c'est un peu dommage...

bon courage
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
20 févr. 2007 à 17:28
j'utilise delphi 7 personel mais pour dcpcrypt, utiliser le paquet : DCPdelphi6.dpk (par contre moi j'ai du par la suite copier tout les fichiers *.dcu du dossier dcpcrypt2 vers borland\delphi7\lib)
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
20 févr. 2007 à 17:05
merci aussi de préciser la version de delphi
avec dcpcrypt..
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
20 févr. 2007 à 14:30
Francky : ok y a pas de probleme, je vais refaire le programme avec un procedure de compression et non un composant de la jvcl

PS j'ai essayer de mettre les composants (dcpcrypt et jvcl) dans le zip mais j'ai eu unmessage d'erreur 'le fichier ne contient aucun document' quelqu'un peut me dire pourquoi?
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
20 févr. 2007 à 13:14
Neil :

Merci de penser aux copains qui n'ont pas l'ADSL pour downloader la JVCL. De ce fait on ne poste que des sources utilisant la VCL standard.

Peux tu faire une mise à jour stp ;).
cs_neil Messages postés 67 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 19 janvier 2009
19 févr. 2007 à 20:57
Juste pour information, les composants ne sont pas renomés pour la simple résond qu'ils ne sont pas nombreux et donc comprehensible (et aussi parce que c'est une mauvaise abitude à perdre !)
Pour les noms des form (form31 (la principale) et form3), leur nom vient simplement du fait que le programme fessait au depart parti d'un autre programme plus volumineux et que les forms ont gard leur nom d'origine. voilà .