Page 1 sur 1

Créer un raccourci

Publié : jeu. 29/janv./2004 10:51
par Le Soldat Inconnu
il faut la librairie callcom de ... mince je me rapelle plus de son nom Denis aide moi :mrgreen: :0:
enfin, ça marche pas sans

Code : Tout sélectionner

Procedure CreateLink(PATH$, LINK$, Argument$, DESCRIPTION$, WorkingDirectory$, ShowCommand.l, HotKey.l, IconFile$, IconIndexInFile.l)
  
  ; IShellLInk CONSTANTS for CallCOM
  #ShellLink_QueryInterface = 0
  #ShellLink_AddRef = 4
  #ShellLink_Release = 8
  #ShellLink_GetPath = 12
  #ShellLink_GetIDList = 16
  #ShellLink_SetIDList = 20
  #ShellLink_GetDescription = 24
  #ShellLink_SetDescription = 28
  #ShellLink_GetWorkingDirectory = 32
  #ShellLink_SetWorkingDirectory = 36
  #ShellLink_GetArguments = 40
  #ShellLink_SetArguments = 44
  #ShellLink_GetHotkey = 48
  #ShellLink_SetHotkey = 52
  #ShellLink_GetShowCmd = 56
  #ShellLink_SetShowCmd = 60
  #ShellLink_GetIconLocation = 64
  #ShellLink_SetIconLocation = 68
  #ShellLink_SetRelativePath = 72
  #ShellLink_Resolve = 76
  #ShellLink_SetPath = 80
  
  ; Interface IPersistFile : IPersist
  #PersistFile_Release = 8
  #PersistFile_IsDirty = 16
  #PersistFile_Load = 20
  #PersistFile_Save = 24
  #PersistFile_SaveCompleted = 28
  #PersistFile_GetCurFile = 32
  
  result = 0
  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_ShellLink, 0, 1, ?IID_IShellLink, @psl) = 0
    
    Set_ShellLink_preferences :
    
    ; The file TO which is linked ( = target for the Link )
    CallCOM(#ShellLink_SetPath, psl, PATH$)
    
    ; Arguments for the Target
    CallCOM(#ShellLink_SetArguments, psl, Argument$)
    
    ; Working Directory
    CallCOM(#ShellLink_SetWorkingDirectory, psl, WorkingDirectory$)
    
    ; Description ( also used as Tooltip for the Link )
    CallCOM(#ShellLink_SetDescription, psl, DESCRIPTION$)
    
    ; Show command:
    ; SW_SHOWNORMAL = Default
    ; SW_SHOWMAXIMIZED = aehmm... Maximized
    ; SW_SHOWMINIMIZED = play Unreal Tournament
    CallCOM(#ShellLink_SetShowCmd, psl, ShowCommand)
    
    ; Hotkey:
    ; The virtual key code is in the low-order byte,
    ; and the modifier flags are in the high-order byte.
    ; The modifier flags can be a combination of the following values:
    ; HOTKEYF_ALT = ALT key
    ; HOTKEYF_CONTROL = CTRL key
    ; HOTKEYF_EXT = Extended key
    ; HOTKEYF_SHIFT = SHIFT key
    CallCOM(#ShellLink_SetHotkey, psl, HotKey)
    
    ; Set Icon for the Link:
    ; There can be more than 1 icons in an icon resource file,
    ; so you have to specify the index.
    CallCOM(#ShellLink_SetIconLocation, psl, IconFile$, IconIndexInFile)
    
    ShellLink_SAVE :
    ; Query IShellLink For the IPersistFile interface For saving the
    ; shortcut in persistent storage.
    If CallCOM(#ShellLink_QueryInterface, psl, ?IID_IPersistFile, @ppf) = 0
      ; Ensure that the string is Unicode.
      mem.s = Space(1000) ; AllocateMemory(1,1000)
      MultiByteToWideChar_(#CP_ACP, 0, LINK$, -1, mem, 1000)
      ; Save the link by calling IPersistFile::Save.
      ; hres = ppf->Save(wsz, TRUE);
      hres = CallCOM(#PersistFile_SAVE, ppf, mem, #TRUE)
      result = 1
      CallCOM(#PersistFile_Release, ppf)
      ; FreeMemory_()
    EndIf
    CallCOM(#ShellLink_Release, psl)
  EndIf
  CoUninitialize_()
  ProcedureReturn result
  
  DataSection
  CLSID_ShellLink :
  Data.l $00021401
  Data.w $0000, $0000
  Data.b $C0, $00, $00, $00, $00, $00, $00, $46
  IID_IShellLink :
  Data.l $000214EE
  Data.w $0000, $0000
  Data.b $C0, $00, $00, $00, $00, $00, $00, $46
  IID_IPersistFile :
  Data.l $0000010b
  Data.w $0000, $0000
  Data.b $C0, $00, $00, $00, $00, $00, $00, $46
  EndDataSection
  
EndProcedure



; CreateLink(PATH$, LINK$, Argument$, DESCRIPTION$, WorkingDirectory$, ShowCommand.l, HotKey.l, IconFile$, IconIndexInFile.l)
;- PATH$ = Cible du raccourci ("c:\program files\PureBasic\purebasic.exe")
;- LINK$ = Nom et emplacement du raccourci ("c:\pb.lnk")
;- Argument$ = arguments
;- DESCRIPTION$ = Description et Tooltip ("Start PureBasic")
;- WorkingDirectory$ = Répertoire de travail ("c:\program files\PureBasic\")
;- ShowCommand.l = Type d'ouverture de la fenêtre #SW_SHOWNORMAL ou #SW_SHOWMAXIMIZED ou #SW_SHOWMINIMIZED
;- HotKey.l = Touche de raccourci, mettre 0 pour aucune touche de raccourci
;- IconFile$, IconIndexInFile.l = Adresse de l'icône + Index de l'icône ( "c:\program files\PureBasic\purebasic.exe" , 0 )

CreateLink("c:\program files\PureBasic\purebasic.exe", "c:\PB.lnk", "", "Pure FUN", "c:\program files\PureBasic\", #SW_SHOWNORMAL, 0, "c:\program files\PureBasic\purebasic.exe", 0)



Publié : jeu. 05/févr./2004 18:34
par Le Soldat Inconnu
ça y est je me rapelle, elle est de Danilo cette lib Callcom si je me trompe pas

Publié : jeu. 05/févr./2004 19:53
par Anonyme2
Le code est de Danilo, certainement un des meilleurs programmeurs du forum anglais.

Pour ceux qui suivent le forum anglais, il a une manière assez rude de dire les choses à certains codeurs...

Il donne toujours de très bons exemples de code Pb. Il a aussi écrit une très très bonne librairie.

Publié : jeu. 05/févr./2004 20:25
par Dr. Dri
...

Publié : jeu. 05/févr./2004 20:35
par comtois
regarde le post dans announcement ,au chapitre jaPBe et tu vas comprendre .

même si je ne suis pas sûr de toujours bien comprendre ( ben ouais je sais , je n'avais qu'à bosser à l'école !! et apprendre l'anglais , on me l'avait pourtant dit que je m'en mordrais les doigts plus tard ) , il m'a semblé assez rude avec GPI qui fait pourtant un travail remarquable avec son éditeur .Il ne prend pas de détours pour dire ce qu'il pense. ça tombe comme un couperet , mais bon , je ne connais pas le début de leur idylle , alors je n'en dirai pas plus :)

Souhaitons que ce n'était qu'un malentendu , ou que je n'ai encore une fois de plus rien compris au film ,et qu'on verra encore d'excellents exemples de code , et de nouvelles versions de jaPBe .

Publié : jeu. 05/févr./2004 20:42
par Anonyme2
Oui, il y a eu récement une remarque de Freak à GPI (justifié à mon avis) concernant du code de Freak utilisé par GPI (j'abrège) avec une discussion autour de cela (code réutilisé car mis à la disposition de tous) avec il me semble un message de COR et Danilo a posté un mel ou il explique sa façon de voir. D'ailleurs il y a un an ou deux il y avait déjà eu des 'mots' entre Danilo et un autre codeur.

Il a au moins le mérite de dire ce qu'il pense sans ambiguité.

C'est vrai qu'il répond bien et que l'on peut lui poser des questions, il répond.

Publié : sam. 07/févr./2004 16:41
par Le Soldat Inconnu
c'est fini de me pourrir mon poste avec vos anneries :mrgreen:

Publié : sam. 07/févr./2004 17:02
par Anonyme2
On est pas sur un forum de discussion ?

Ha bon, je vais voir ailleurs :jesors:

Publié : sam. 07/févr./2004 17:29
par Le Soldat Inconnu
ha enfin une décision raisonnable et réfléchie :lol:

Publié : lun. 09/févr./2004 3:58
par Chris
Une autre version, toujours de Danilo:

Code : Tout sélectionner

; 
; create shell links/shortcuts 
; translated from my old example that used CallCOM() 
; 
; by Danilo, 09.12.2003 
; 
; requires PB 3.81+ 
; 
Procedure CreateShellLink(PATH$, LINK$, Argument$, DESCRIPTION$, WorkingDirectory$, ShowCommand.l, HotKey.l, IconFile$, IconIndexInFile.l) 
   CoInitialize_(0) 
   If CoCreateInstance_(?CLSID_ShellLink,0,1,?IID_IShellLink,@psl.IShellLinkA) = 0 
      
   Set_ShellLink_preferences: 
      
      ; The file TO which is linked ( = target for the Link ) 
      ; 
      psl\SetPath(@PATH$) 
      
      ; Arguments for the Target 
      ; 
      psl\SetArguments(@Argument$) 
      
      ; Working Directory 
      ; 
      psl\SetWorkingDirectory(@WorkingDirectory$) 
      
      ; Description ( also used as Tooltip for the Link ) 
      ; 
      psl\SetDescription(@DESCRIPTION$) 
      
      ; Show command: 
      ;               SW_SHOWNORMAL    = Default 
      ;               SW_SHOWMAXIMIZED = aehmm... Maximized 
      ;               SW_SHOWMINIMIZED = play Unreal Tournament 
      psl\SetShowCmd(ShowCommand) 
      
      ; Hotkey: 
      ; The virtual key code is in the low-order byte, 
      ; and the modifier flags are in the high-order byte. 
      ; The modifier flags can be a combination of the following values: 
      ; 
      ;         HOTKEYF_ALT     = ALT key 
      ;         HOTKEYF_CONTROL = CTRL key 
      ;         HOTKEYF_EXT     = Extended key 
      ;         HOTKEYF_SHIFT   = SHIFT key 
      ; 
      psl\SetHotkey(HotKey) 
      
      ; Set Icon for the Link: 
      ; There can be more than 1 icons in an icon resource file, 
      ; so you have to specify the index. 
      ; 
      psl\SetIconLocation(@IconFile$, IconIndexInFile) 
      
      
   ShellLink_SAVE: 
      ; Query IShellLink For the IPersistFile interface For saving the 
      ; shortcut in persistent storage. 
      If psl\QueryInterface(?IID_IPersistFile,@ppf.IPersistFile) = 0 
        ; Ensure that the string is Unicode. 
        mem.s = Space(1000) ;AllocateMemory(1,1000) 
        MultiByteToWideChar_(#CP_ACP, 0, LINK$, -1, mem, 1000) 
        ;Save the link by calling IPersistFile::Save. 
        hres = ppf\Save(@mem,#TRUE) 
        result = 1 
        ppf\Release() 
      EndIf 
      psl\Release() 
   EndIf 
   CoUninitialize_() 
   ProcedureReturn result 
    
   DataSection 
     CLSID_ShellLink: 
       ; 00021401-0000-0000-C000-000000000046 
       Data.l $00021401 
       Data.w $0000,$0000 
       Data.b $C0,$00,$00,$00,$00,$00,$00,$46 
     IID_IShellLink: 
       ; DEFINE_SHLGUID(IID_IShellLinkA,         0x000214EEL, 0, 0); 
       ; C000-000000000046 
       Data.l $000214EE 
       Data.w $0000,$0000 
       Data.b $C0,$00,$00,$00,$00,$00,$00,$46 
     IID_IPersistFile: 
       ; 0000010b-0000-0000-C000-000000000046 
       Data.l $0000010b 
       Data.w $0000,$0000 
       Data.b $C0,$00,$00,$00,$00,$00,$00,$46 
   EndDataSection 

EndProcedure 


; CreateLink 
;             - TARGET$ for the Link ("c:\PureBasic\purebasic.exe") 
;             - LINK$ - name of the Link ("c:\pb.lnk") 
;             - Argument$ for the target  ("%1") 
;             - Description$ = Description and Tooltip ("Start PureBasic") 
;             - Working Directory ("c:\PureBasic\") 
;             - Show command: #SW_SHOWNORMAL or #SW_SHOWMAXIMIZED or #SW_SHOWMINIMIZED 
;             - HotKey - no need to use this :) 
;             - IconFile + Index ( "c:\PureBasic\purebasic.exe" , 1 ) 


If CreateShellLink("D:\BASIC\PureBasic\purebasic.exe","c:\PB.lnk","","Pure FUN","D:\BASIC\PureBasic\",#SW_SHOWMAXIMIZED,0,"%SystemRoot%\system32\SHELL32.dll",12) 
  beep_(800,100) 
EndIf 

WinDir$ = Space(100): GetSystemDirectory_(WinDir$,100) 
If CreateShellLink(WinDir$+"\calc.exe","c:\CALC.lnk","","Calculator","",0,0,"%SystemRoot%\system32\SHELL32.dll",23) 
  beep_(800,100) 
EndIf
Chris :)

Publié : lun. 09/févr./2004 8:28
par Le Soldat Inconnu
heu, c'est le même :roll:
c'est que moi, j'ai traduit en Fr la description, c'est tout

Publié : lun. 09/févr./2004 10:28
par Chris
Oh M..... !!! :oops:


:lol:

Chris :)

Publié : lun. 09/févr./2004 13:34
par Le Soldat Inconnu
Et, hop, on saute joyeusement à pied joint dedans :lol: