woodstock Posted February 21, 2008 Share Posted February 21, 2008 (edited) Hello Possybility to search program to uninstall by keyword on multiple criteria. Hope it will be usefull for some of you. NB: interface in french (and in script comments)... This is my first contribution on this forum, cannot post in "sample script" forum expandcollapse popup#cs ---------------------------------------------------------------------------- AutoIt Version: 3.1.1.0 Author: Fabrice LANG Script Function: Recherche des produits installés sur le poste.... #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here Opt("TrayIconHide",1) Global const $max_retour=255 Global const $NbrClef = 11 Dim $Install_Clef [$NbrClef] = ["","Publisher","DisplayName","DisplayVersion","VersionMajor","VersionMinor", _ "InstallLocation","InstallDate","UninstallString","LocalPackage","WindowsInstaller"] Global const $idx_pos_DisplayName=2 Dim $Install_Val [$max_retour][$NbrClef] Dim $Install_TreeView [$max_retour][$NbrClef] Global $Install_Nbr #include <GUIConstants.au3> ; == GUI generated with Koda == $LaBojte = GUICreate("Recherche d'installation", 528, 487, 247, 122) $i_Chercher = GUICtrlCreateInput("AutoIt", 16, 8, 409, 21) $b_Chercher = GUICtrlCreateButton("Chercher", 432, 8, 89, 21, 0) $tv_Liste = GUICtrlCreateTreeView(8, 58, 513, 393, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS,$TVS_TRACKSELECT,$TVS_FULLROWSELECT), $WS_EX_CLIENTEDGE) $b_Action = GUICtrlCreateButton("Action", 336, 456, 89, 25, 0) $b_Quitter = GUICtrlCreateButton("Quitter", 432, 456, 89, 25, 0) GUICtrlCreateLabel("Under GPL Licence", 3, 456, 320, 25, BitOR($SS_CENTER,$SS_CENTERIMAGE)) $c_DisplayName = GUICtrlCreateCheckbox("DisplayName", 24, 34, 81, 17) $c_Publisher = GUICtrlCreateCheckbox("Publisher", 128, 34, 65, 17) $c_AutreClef = GUICtrlCreateCheckbox("Autre :", 224, 34, 48, 17) $Cmb_AutreClef = GUICtrlCreateCombo("", 275, 32, 246, 21) $tmp=$Install_Clef [1] For $cpt1 = 2 to $NbrClef-1 $tmp = $tmp & "|" &$Install_Clef [$cpt1] Next GUICtrlSetData(-1, $tmp, $Install_Clef [1]) GUICtrlSetState($b_Action, $GUI_DISABLE) ;GUICtrlSetState($c_AutreClef, $GUI_CHECKED) GUICtrlSetState($c_DisplayName, $GUI_CHECKED) GUISetState(@SW_SHOW) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Or $msg = $b_Quitter ExitLoop Case $msg = $b_Chercher RempliTreeView() Case $msg = $b_Action Action() Case Else $item = GUICtrlRead($tv_Liste) ; Get the controlID of the current selected treeview item If $item <> 0 Then $text = GUICtrlRead($item, 1) ; Get the text of the treeview item If StringInStr( $text,"UninstallString") Or StringInStr( $text,"LocalPackage") Then If GUICtrlRead($b_Action)<>"Desinstaller" Then GUICtrlSetData($b_Action,"Desinstaller") GUICtrlSetState($b_Action, $GUI_ENABLE) EndIf ElseIf StringInStr( $text,"InstallLocation") Then If GUICtrlRead($b_Action)<>"Explorer" Then GUICtrlSetData($b_Action,"Explorer") GUICtrlSetState($b_Action, $GUI_ENABLE) EndIf ElseIf GUICtrlRead($b_Action)<>"Action" Then GUICtrlSetData($b_Action,"Action") GUICtrlSetState($b_Action, $GUI_DISABLE) EndIf EndIf ;;;;;;; EndSelect WEnd Exit Func Action() Select Case GUICtrlRead($b_Action) == "Desinstaller" $text=GUICtrlRead(GUICtrlRead($tv_Liste),1) $text=StringMid( $text, StringInStr($text,"=")+1) Opt("RunErrorsFatal", 0);1=fatal, 0=silent set @error Run( $text ) If @error Then MsgBox(16,"Erreur d'execution !","Une erreur fatale est rencontrée au lancement de la commande :" & @CRLF & @CRLF & "=> " & $text ) EndIf Opt("RunErrorsFatal", 1) Case GUICtrlRead($b_Action) == "Explorer" $text=GUICtrlRead(GUICtrlRead($tv_Liste),1) $text=StringMid( $text, StringInStr($text,"=")+1) If FileExists( $text ) Then Run("explorer.exe " & $text) Else MsgBox(16,"Erreur !","Le répertoire indiqué n'existe pas :" & @CRLF & @CRLF & "=> " & $text ) EndIf Case Else EndSelect EndFunc Func RempliTreeView() Delete_TreeView() If GUICtrlRead($c_DisplayName ) = $GUI_CHECKED Then Recherche_registre( "DisplayName",GUICtrlRead($i_Chercher ) ) Recherche_registre( "DisplayName",GUICtrlRead($i_Chercher ),"Uninstall" ) EndIf If GUICtrlRead($c_Publisher ) = $GUI_CHECKED Then Recherche_registre( "Publisher",GUICtrlRead($i_Chercher ) ) Recherche_registre( "Publisher",GUICtrlRead($i_Chercher ),"Uninstall" ) EndIf If GUICtrlRead($c_AutreClef ) = $GUI_CHECKED Then Recherche_registre( GUICtrlRead($cmb_AutreClef),GUICtrlRead($i_Chercher ) ) Recherche_registre( GUICtrlRead($cmb_AutreClef),GUICtrlRead($i_Chercher ),"Uninstall" ) EndIf If $Install_Nbr >0 Then For $cpt1 = 0 to $Install_Nbr-1 $Install_TreeView[$cpt1][0] = GUICtrlCreateTreeViewitem($Install_Val[$cpt1][0]& " ["& $Install_Val[$cpt1][2] &"]", $tv_Liste) For $cpt2 = 1 to $NbrClef-1 If $Install_Val[$cpt1][$cpt2] <> "" Then $Install_TreeView[$cpt1][$cpt2] = GUICtrlCreateTreeViewitem($Install_Clef [$cpt2] & "=" & $Install_Val[$cpt1][$cpt2], $Install_TreeView[$cpt1][0]) EndIf Next Next EndIf EndFunc Func Delete_TreeView() GUICtrlDelete ($tv_Liste) For $cpt1 = 0 to $Install_Nbr-1 For $cpt2 = 1 to $NbrClef-1 If $Install_Val[$cpt1][$cpt2] <> "" Then $Install_Val[$cpt1][$cpt2]="" EndIf Next $Install_Val[$cpt1][0]="" Next $Install_Nbr = 0 $tv_Liste = GUICtrlCreateTreeView(8, 58, 513, 393, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS,$TVS_TRACKSELECT,$TVS_FULLROWSELECT), $WS_EX_CLIENTEDGE) EndFunc Func TabToString() Local $Msg="" For $cpt1 = 0 to $Install_Nbr-1 $Msg=$Msg & "[" & $Install_Val[$cpt1][0] & "]" For $cpt2 = 1 to $NbrClef-1 If $Install_Val[$cpt1][$cpt2] <> "" Then $Msg= $Msg & @CRLF & $Install_Clef [$cpt2] & "=" & $Install_Val[$cpt1][$cpt2] EndIf Next $Msg=$Msg & @CRLF & @CRLF Next Return $Msg EndFunc Func Controle_Deja_Trouve( $a_chercher ) Local $Msg="" For $cpt1 = 0 to $Install_Nbr-1 ;- Généralement, la valeur se retouve en [8]... on essaie de gagner du temps si existe. If StringInStr( $Install_Val[$cpt1][8], $a_chercher ) <> 0 Then Return True For $cpt2 = 0 to $NbrClef-1 If StringInStr( $Install_Val[$cpt1][$cpt2], $a_chercher ) <> 0 Then Return True EndIf Next Next Return False EndFunc ;~ Recherche à partir de la base de registres des programmes installés. ;- =================================================================== ;- $Quoi : quelle clef doit-on controler ? ;- $Valeur : quelle valeur recherche-t'on ? (doit être au moins une sous-chaine) ;- $Ou : à partir d'où doit-on rechercher ? Par défaut, les produits installés par l'administrateur. ;~ ;~ Exemples d'utilisation : ;- ======================= ;~ Recherche_registre( "DisplayName","antivirus" ) ;~ Recherche_registre( "DisplayName","liveupdate","Uninstall" ) ;- Func Recherche_registre( const $Quoi , const $Valeur, $Ou = "S-1-5-18" ) Local $i=0 Local $fini=0 Local $DisplayName="" Local $SousClef="\" Select Case $Ou = "Uninstall" ; Information d'installation à rechercher dans la partie... UnInstall ! $Ou = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" Case Else ; Information d'installation à rechercher dans la partie des produits installés. $Ou = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\" & $Ou & "\Products\" $SousClef = "\InstallProperties" EndSelect Do $i = $i + 1 Local $var = RegEnumKey($Ou, $i) If @error Or $Install_Nbr >= $max_retour Then $fini=True If $Install_Nbr >= $max_retour Then MsgBox( 64,"Nombre maximal de recherche atteint","Il y a trop de correspondance... Seules les " & $max_retour & " premières sont présentées.") EndIf Else $Product = RegRead($Ou & $var & $SousClef, $Quoi) If StringInStr( $Product , $Valeur ) Then If Controle_Deja_Trouve( $var ) = False Then $Install_Val[$Install_Nbr][0] = $var $Install_Clef[0] = $Quoi For $cpt1 = 1 to ( $NbrClef - 1 ) $Install_Val[$Install_Nbr][$cpt1] = RegRead($Ou & $var & $SousClef, $Install_Clef[$cpt1] ) Next $Install_Nbr = $Install_Nbr + 1 EndIf EndIf EndIf Until $fini Return $Install_Nbr EndFunc Edited February 25, 2008 by SmOke_N Authors request Link to comment Share on other sites More sharing options...
Squirrely1 Posted February 22, 2008 Share Posted February 22, 2008 (edited) I didn't try your script, but you probably need an avatar for your account here at the AutoIt forums: - "Woodstock" from the Peanuts cartoons. Or the gif: You would start out in "My Controls" at the top of this webpage, then go to "Change my avatar." Edited February 22, 2008 by Squirrely1 Das Häschen benutzt Radar Link to comment Share on other sites More sharing options...
woodstock Posted February 22, 2008 Author Share Posted February 22, 2008 (edited) I didn't try your script, but you probably need an avatar for your account here at the AutoIt forums: - "Woodstock" from the Peanuts cartoons. Or the gif: You would start out in "My Controls" at the top of this webpage, then go to "Change my avatar." Ok... I just did it... from wikipedia because I don't see the "Peanuts cartoons" on the avatar's list... and url to the gif you include in your message is too long for the interface to add avatar from it. Edited February 22, 2008 by woodstock Link to comment Share on other sites More sharing options...
ResNullius Posted February 22, 2008 Share Posted February 22, 2008 (edited) Hello Possybility to search program to uninstall by keyword on multiple criteria. Hope it will be usefull for some of you. NB: interface in french (and in script comments)... This is my first contribution on this forum, cannot post in "sample script" forum@woodstock, I like this! I've changed it a little bit to make the search dynamic as you type; no need to click the "Chercher" (Search) button. Sorry, but I've mixed some english in with your french expandcollapse popup#cs ---------------------------------------------------------------------------- AutoIt Version: 3.1.1.0 Author: Fabrice LANG, dynamic search update mod by ResNullius Script Function: Recherche des produits installés sur le poste.... #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here ;Opt("TrayIconHide",1) Global const $max_retour=255 Global const $NbrClef = 11 Dim $Install_Clef [$NbrClef] = ["","Publisher","DisplayName","DisplayVersion","VersionMajor","VersionMinor", _ "InstallLocation","InstallDate","UninstallString","LocalPackage","WindowsInstaller"] Global const $idx_pos_DisplayName=2 Dim $Install_Val [$max_retour][$NbrClef] Dim $Install_TreeView [$max_retour][$NbrClef] Global $Install_Nbr #include <GUIConstants.au3> ; == GUI generated with Koda == $LaBojte = GUICreate("Recherche d'installation", 528, 487, 247, 122) $i_Chercher = GUICtrlCreateInput("AutoIt", 16, 8, 409, 21) ;$b_Chercher = GUICtrlCreateButton("Chercher", 432, 8, 89, 21, 0) $b_Clear = GUICtrlCreateButton("Clear", 432, 8, 89, 21, 0) $tv_Liste = GUICtrlCreateTreeView(8, 58, 513, 393, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS,$TVS_TRACKSELECT,$TVS_FULLROWSELECT), $WS_EX_CLIENTEDGE) $b_Action = GUICtrlCreateButton("Action", 336, 456, 89, 25, 0) $b_Quitter = GUICtrlCreateButton("Quitter", 432, 456, 89, 25, 0) GUICtrlCreateLabel("Under GPL Licence", 3, 456, 320, 25, BitOR($SS_CENTER,$SS_CENTERIMAGE)) $c_DisplayName = GUICtrlCreateCheckbox("DisplayName", 24, 34, 81, 17) $c_Publisher = GUICtrlCreateCheckbox("Publisher", 128, 34, 65, 17) $c_AutreClef = GUICtrlCreateCheckbox("Autre :", 224, 34, 48, 17) $Cmb_AutreClef = GUICtrlCreateCombo("", 275, 32, 246, 21) $tmp=$Install_Clef [1] For $cpt1 = 2 to $NbrClef-1 $tmp = $tmp & "|" &$Install_Clef [$cpt1] Next GUICtrlSetData(-1, $tmp, $Install_Clef [1]) GUICtrlSetState($b_Action, $GUI_DISABLE) ;GUICtrlSetState($c_AutreClef, $GUI_CHECKED) GUICtrlSetState($c_DisplayName, $GUI_CHECKED) GUISetState(@SW_SHOW) $c_OldText = GUICtrlRead($i_Chercher ) RempliTreeView() GUICtrlSetState($i_Chercher,$GUI_FOCUS) While 1 $c_Text = GUICtrlRead($i_Chercher ) If GUICtrlGetHandle("") = $i_Chercher then ControlSend($LaBojte,"",$i_Chercher,"{END}") If $c_Text <> $c_OldText Then If StringLen($c_Text) >= 1 then ; this number determines how many characters must be entered before the search starts; above 1 gives better responsiveness RempliTreeView() Else If StringLen($c_Text) = 0 then Delete_TreeView() EndIf $c_OldText = $c_Text EndIf $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Or $msg = $b_Quitter ExitLoop ;Case $msg = $b_Chercher ; RempliTreeView() Case $msg = $b_Clear GUICtrlSetData($i_Chercher,"") GUICtrlSetState($i_Chercher,$GUI_FOCUS) ;RempliTreeView() Delete_TreeView() Case $msg = $b_Action Action() Case Else $item = GUICtrlRead($tv_Liste) ; Get the controlID of the current selected treeview item If $item <> 0 Then $text = GUICtrlRead($item, 1) ; Get the text of the treeview item If StringInStr( $text,"UninstallString") Or StringInStr( $text,"LocalPackage") Then If GUICtrlRead($b_Action)<>"Desinstaller" Then GUICtrlSetData($b_Action,"Desinstaller") GUICtrlSetState($b_Action, $GUI_ENABLE) EndIf ElseIf StringInStr( $text,"InstallLocation") Then If GUICtrlRead($b_Action)<>"Explorer" Then GUICtrlSetData($b_Action,"Explorer") GUICtrlSetState($b_Action, $GUI_ENABLE) EndIf ElseIf GUICtrlRead($b_Action)<>"Action" Then GUICtrlSetData($b_Action,"Action") GUICtrlSetState($b_Action, $GUI_DISABLE) EndIf EndIf ;;;;;;; EndSelect WEnd Exit Func Action() Select Case GUICtrlRead($b_Action) == "Desinstaller" $text=GUICtrlRead(GUICtrlRead($tv_Liste),1) $text=StringMid( $text, StringInStr($text,"=")+1) Opt("RunErrorsFatal", 0);1=fatal, 0=silent set @error Run( $text ) If @error Then MsgBox(16,"Erreur d'execution !","Une erreur fatale est rencontrée au lancement de la commande :" & @CRLF & @CRLF & "=> " & $text ) EndIf Opt("RunErrorsFatal", 1) Case GUICtrlRead($b_Action) == "Explorer" $text=GUICtrlRead(GUICtrlRead($tv_Liste),1) $text=StringMid( $text, StringInStr($text,"=")+1) If FileExists( $text ) Then Run("explorer.exe " & $text) Else MsgBox(16,"Erreur !","Le répertoire indiqué n'existe pas :" & @CRLF & @CRLF & "=> " & $text ) EndIf Case Else EndSelect EndFunc Func RempliTreeView() Delete_TreeView() ControlSend($LaBojte,"",$i_Chercher,"{END}") If GUICtrlRead($c_DisplayName ) = $GUI_CHECKED Then Recherche_registre( "DisplayName",GUICtrlRead($i_Chercher ) ) Recherche_registre( "DisplayName",GUICtrlRead($i_Chercher ),"Uninstall" ) EndIf If GUICtrlRead($c_Publisher ) = $GUI_CHECKED Then Recherche_registre( "Publisher",GUICtrlRead($i_Chercher ) ) Recherche_registre( "Publisher",GUICtrlRead($i_Chercher ),"Uninstall" ) EndIf If GUICtrlRead($c_AutreClef ) = $GUI_CHECKED Then Recherche_registre( GUICtrlRead($cmb_AutreClef),GUICtrlRead($i_Chercher ) ) Recherche_registre( GUICtrlRead($cmb_AutreClef),GUICtrlRead($i_Chercher ),"Uninstall" ) EndIf If $Install_Nbr >0 Then For $cpt1 = 0 to $Install_Nbr-1 $Install_TreeView[$cpt1][0] = GUICtrlCreateTreeViewitem($Install_Val[$cpt1][0]& " ["& $Install_Val[$cpt1][2] &"]", $tv_Liste) For $cpt2 = 1 to $NbrClef-1 If $Install_Val[$cpt1][$cpt2] <> "" Then $Install_TreeView[$cpt1][$cpt2] = GUICtrlCreateTreeViewitem($Install_Clef [$cpt2] & "=" & $Install_Val[$cpt1][$cpt2], $Install_TreeView[$cpt1][0]) EndIf Next Next EndIf ControlSend($LaBojte,"",$i_Chercher,"{END}") EndFunc Func Delete_TreeView() GUICtrlDelete ($tv_Liste) ControlSend($LaBojte,"",$i_Chercher,"{END}") For $cpt1 = 0 to $Install_Nbr-1 For $cpt2 = 1 to $NbrClef-1 If $Install_Val[$cpt1][$cpt2] <> "" Then $Install_Val[$cpt1][$cpt2]="" EndIf Next $Install_Val[$cpt1][0]="" Next $Install_Nbr = 0 $tv_Liste = GUICtrlCreateTreeView(8, 58, 513, 393, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS,$TVS_TRACKSELECT,$TVS_FULLROWSELECT), $WS_EX_CLIENTEDGE) EndFunc Func TabToString() Local $Msg="" For $cpt1 = 0 to $Install_Nbr-1 $Msg=$Msg & "[" & $Install_Val[$cpt1][0] & "]" For $cpt2 = 1 to $NbrClef-1 If $Install_Val[$cpt1][$cpt2] <> "" Then $Msg= $Msg & @CRLF & $Install_Clef [$cpt2] & "=" & $Install_Val[$cpt1][$cpt2] EndIf Next $Msg=$Msg & @CRLF & @CRLF Next Return $Msg EndFunc Func Controle_Deja_Trouve( $a_chercher ) Local $Msg="" For $cpt1 = 0 to $Install_Nbr-1 ;- Généralement, la valeur se retouve en [8]... on essaie de gagner du temps si existe. If StringInStr( $Install_Val[$cpt1][8], $a_chercher ) <> 0 Then Return True For $cpt2 = 0 to $NbrClef-1 If StringInStr( $Install_Val[$cpt1][$cpt2], $a_chercher ) <> 0 Then Return True EndIf Next Next Return False EndFunc ;~ Recherche à partir de la base de registres des programmes installés. ;- =================================================================== ;- $Quoi : quelle clef doit-on controler ? ;- $Valeur : quelle valeur recherche-t'on ? (doit être au moins une sous-chaine) ;- $Ou : à partir d'où doit-on rechercher ? Par défaut, les produits installés par l'administrateur. ;~ ;~ Exemples d'utilisation : ;- ======================= ;~ Recherche_registre( "DisplayName","antivirus" ) ;~ Recherche_registre( "DisplayName","liveupdate","Uninstall" ) ;- Func Recherche_registre( const $Quoi , const $Valeur, $Ou = "S-1-5-18" ) Local $i=0 Local $fini=0 Local $DisplayName="" Local $SousClef="\" Local $a_GuiPos = WinGetPos($LaBojte) Local $a_CtrlPos = ControlGetPos($LaBojte,"",$tv_Liste) Local $ToolTipX = $a_GuiPos[0]+$a_CtrlPos[0] + 60 Local $ToolTipY = $a_GuiPos[1]+$a_CtrlPos[1] + 60 ToolTip("Retreiving information...",$ToolTipX,$ToolTipY,"Please Wait") Select Case $Ou = "Uninstall" ; Information d'installation à rechercher dans la partie... UnInstall ! $Ou = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" Case Else ; Information d'installation à rechercher dans la partie des produits installés. $Ou = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\" & $Ou & "\Products\" $SousClef = "\InstallProperties" EndSelect Do $i = $i + 1 Local $var = RegEnumKey($Ou, $i) If @error Or $Install_Nbr >= $max_retour Then $fini=True If $Install_Nbr >= $max_retour Then ;MsgBox( 64,"Nombre maximal de recherche atteint","Il y a trop de correspondance... Seules les " & $max_retour & " premières sont présentées.",1) ToolTip("") Sleep(250) ToolTip("Il y a trop de correspondance... Seules les " & $max_retour & " premières sont présentées.",$ToolTipX, $ToolTipY, "Nombre maximal de recherche atteint",1) Sleep(1500) ControlSend($LaBojte,"",$i_Chercher,"{END}") EndIf Else $Product = RegRead($Ou & $var & $SousClef, $Quoi) If StringInStr( $Product , $Valeur ) Then If Controle_Deja_Trouve( $var ) = False Then $Install_Val[$Install_Nbr][0] = $var $Install_Clef[0] = $Quoi For $cpt1 = 1 to ( $NbrClef - 1 ) $Install_Val[$Install_Nbr][$cpt1] = RegRead($Ou & $var & $SousClef, $Install_Clef[$cpt1] ) Next $Install_Nbr = $Install_Nbr + 1 EndIf EndIf EndIf Until $fini ToolTip("") Return $Install_Nbr EndFunc Edited February 25, 2008 by SmOke_N Authors Request Link to comment Share on other sites More sharing options...
Squirrely1 Posted February 23, 2008 Share Posted February 23, 2008 Ok... I just did it... from wikipedia because I don't see the "Peanuts cartoons" on the avatar's list... and url to the gif you include in your message is too long for the interface to add avatar from it.The thing to do there is to right-click the gif image as it appears on this web page, click "Save picture as...", save a copy to your computer with a short file name such as "woodstock.gif", and then go to the My Controls > Change my Avatar. Das Häschen benutzt Radar Link to comment Share on other sites More sharing options...
woodstock Posted February 25, 2008 Author Share Posted February 25, 2008 @woodstock,I like this! I've changed it a little bit to make the search dynamic as you type; no need to click the "Chercher" (Search) button.Sorry, but I've mixed some english in with your french I like your change, really user friendly... No matter for english, multilanguage are good... and english more universal in computer science. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now