Page 1 sur 1

fenêtre cible->positionXY icone->Nom icone

Publié : lun. 06/juil./2009 20:26
par Fortix
Bonsoir :D

j'ai un code intéressant concernant le positionnement des icones:

Code : Tout sélectionner

EnableExplicit 

Global hProcess.l,ItemCount.l 

Macro XMakeLong(a,b) 
    (a | b <<16) 
EndMacro 


Procedure GetSysLVHwnd() 
    Protected h.l 
    
    ;h=FindWindow_("shell_traywnd","")
    h=FindWindow_("Progman",0) 
    h=FindWindowEx_(h,0,"SHELLDLL_defVIEW",0)
    
    ProcedureReturn FindWindowEx_(h,0,"SysListView32",0) 
EndProcedure 


Procedure IsWindowsNT()
    Protected OS.OSVERSIONINFO 
  
    OS\dwOSVersionInfoSize=SizeOf(OSVERSIONINFO) 
    GetVersionEx_(OS) 
  
    If OS\dwPlatformId=2 
        ProcedureReturn 1 
    Else 
        ProcedureReturn 0 
    EndIf 
    
EndProcedure 

Procedure GetMemSharedNT(pid,memSize)
    hProcess=OpenProcess_(#PROCESS_VM_OPERATION | #PROCESS_VM_READ | #PROCESS_VM_WRITE,0,pid) 
  
    ProcedureReturn VirtualAllocEx_(hProcess,0,memSize,#MEM_RESERVE | #MEM_COMMIT,#PAGE_READWRITE) 
EndProcedure 


Procedure FreeMemSharedNT(hP,MemAddress,memSize)
    VirtualFreeEx_(hP,MemAddress,memSize,#MEM_RELEASE) 
    CloseHandle_(hP) 
    
EndProcedure 


Procedure SaveIconPositions() 
    Protected h,dwSize,lpSysShared,pid,lwritten,i,gh 
  
    h=GetSysLVHwnd() 
    GetWindowThreadProcessId_(h,@pid) 
    ItemCount=SendMessage_(h,#LVM_GETITEMCOUNT,0,0);:Debug ItemCount
;     #LVM_GETITEMTEXT
    h=GetSysLVHwnd() 
  
    Global Dim ptOriginal.POINT(ItemCount) 
    dwSize=SizeOf(POINT) 
  
    If IsWindowsNT() 
        lpSysShared=GetMemSharedNT(pid,dwSize) 
        WriteProcessMemory_(hProcess,lpSysShared,ptOriginal(0),dwSize,@lwritten) 
    
        For i=0 To ItemCount - 1 
            SendMessage_(h,#LVM_GETITEMPOSITION,i,lpSysShared) 
            ReadProcessMemory_(hProcess,lpSysShared,ptOriginal(i),dwSize,@lwritten) 
            ;Debug Hex(ptOriginal(i)\X)+","+Hex(ptOriginal(i)\Y)
            Debug Str(ptOriginal(i)\X)+","+Str(ptOriginal(i)\Y) 
            
            SendMessage_(h,#LVM_GETITEMTEXT,i,lpSysShared) 
            gh=ReadProcessMemory_(hProcess,lpSysShared,ptOriginal(i),dwSize,@lwritten)
            Debug gh
        Next i 
        
        FreeMemSharedNT(hProcess,lpSysShared,dwSize) 
    EndIf
    
EndProcedure 


Procedure RestoreIconPositions() 
    Protected  h,i 
  
    h=GetSysLVHwnd() 
  
    For i=0 To ItemCount-1 
        SendMessage_(h,#LVM_SETITEMPOSITION,i,XMakeLong(ptOriginal(i)\x,ptOriginal(i)\y)) 
    Next 
    
EndProcedure 

SaveIconPositions()
RestoreIconPositions()
mais le problème c'est que je n'arrive pas à cible telle fenêtre et je n'arrive pas non plus a récupérer les noms des icones enfin listé avec leur positions X Y,

donc si quelqu'un aurais la soluce sa serait trop bien :lol:

enfait, il ma semblé que @Dobro cherchait un moyen pour récuperer les positions XY des icones de son bureau, ou peut être que jme trrompe de personne :D

en touts cas merci à vous tous :D