Salut
Pour IE, c'est normalement assez simple puisqu'il suffit de créer un fichier .url (équivalent d'un .ini) :
► Afficher le textePour Internet Explorer
Code : Tout sélectionner
Local $sMyFavoriteName = "Autoit FR"
Local $sMyFavoriteURL = "http://autoitscript.fr"
Local $sFavoritesLocation = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Favorites")
IniWrite($sFavoritesLocation & "\" & $sMyFavoriteName & ".url", "DEFAULT", "BASEURL", $sMyFavoriteURL)
IniWrite($sFavoritesLocation & "\" & $sMyFavoriteName & ".url", "InternetShortcut", "URL", $sMyFavoriteURL)
Par contre pour
Firefox, ça va être plus compliqué, car ça dépend de la version :
- Dans les versions < 3, les marque-pages étaient gérés dans un fichier nommé bookmarks.html.
- A partir de la version 3 (je pense que ce sera ton cas),
Firefox utilise une base de données Sqlite pour stocker les infos, y compris les marque-pages. Le fichier Sqlite se nomme
places.sqlite.
Bonne nouvelle donc, AutoIt sait écrire dans un fichier Sqlite !
Mauvaise nouvelle : il est possible d'avoir plusieurs profils dans
Firefox, donc il va falloir mettre le marque-page dans tous les profils.
Je ne te fourni par de code, mais une marche à suivre qui pourra t'aider :
1) Trouver l'emplacement du ou des profils
Firefox :
- lire le fichier @AppDataDir & "\Mozilla\
Firefox\profiles.ini" qui contient la liste de profils
- le chemin est dans la valeur Path
- regarder pour chaque profil la valeur IsRelative : si c'est 1,il s'agît d'un chemin relatif par rapport à l'emplacement de profiles.ini Si c'est 0, il s'agît du chemin complet.
2) Pour chaque profil, vérifier la présence du fichier places.sqlite (c'est lui qui contient les marque-pages - entre autres).
3) Pour chaque profil, se connecter à la base de données places.sqlite et ajouter l'entrée
- Commencer par ajouter une entrée dans la table moz_places, (les champs url et title suffisent à priori) puis relever l'id généré)
- Ajouter ensuite une entrée dans la table moz_bookmarks : (id, type = 1, fk = ID généré dans moz_places, parent = 2, position = 1000, title)
Pour le champ position, ça pourra être compliqué, mais plus la valeur est élevée, plus la position dans la liste des marque-pages sera basse (fin de la liste).
Voilà, je pense que tout y est.
Si j'ai un peu plus de temps et de motivation, j'essaierai de t'aider pour la partie
Firefox, mais je ne suis pas trop axé base de données (certains le sont ici, surtout en ce qui concerne sqlite !)
Edit : voilà pour
Firefox. Ca fonctionne chez moi en version 23, à tester sur d'autres versions.
_FF_ProfilesList() liste les profils
Firefox dans un tableau.
_FF_AddBookmark() ajouter un marque-page (url + titre) dans le profil spécifié, ou le profil par défaut.
► Afficher le texte
Code : Tout sélectionner
#include <File.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
_FF_AddBookmark("http://www.perdu.com", "Je suis PERDU")
; When an error occurs, @error is set to 1 and @extended is set to :
; -1 = Unknow error
; 1 = Unable to list profiles
; 2 = Unable to find default profile
; 3 = Unable to find bookmarks file
; 4 = Unable to load SQLite3.dll
; 5 = Unable to connect to bookmarks database
; 6 = Unable to add bookmark
Func _FF_AddBookmark($sUrl, $sTitle = "", $sProfileName = "")
Local $aRow
Local $sProfilePath
Local $aProfiles = _FF_ProfilesList()
If NOT IsArray($aProfiles) Then Return SetError(1, 1, 0)
If $sUrl = "" Then Return -1
If $sTitle = "" Then $sTitle = $sUrl
If $sProfileName = "" Then
If IsInt($aProfiles[0][1]) Then
If $aProfiles[0][1] >= UBound($aProfiles, 1) Then Return SetError(1, -1, 0)
$sProfilePath = $aProfiles[ $aProfiles[0][1] ][1]
EndIf
Else
For $i = 1 To $aProfiles[0][0]
If $aProfiles[$i][0] = $sProfileName Then
$sProfilePath = $aProfiles[$i][1]
ExitLoop
EndIf
Next
EndIf
If $sProfilePath = "" Then Return SetError(1, 2, 0)
If NOT FileExists($sProfilePath & "\places.sqlite") Then Return SetError(1, 3, 0)
_SQLite_Startup()
If @error Then Return SetError(1, 4, 0)
_SQLite_Open($sProfilePath & "\places.sqlite")
If @error Then Return SetError(1, 5, 0)
Local $sQuery0 = "select id from moz_places where url = '" & $sUrl & "'"
_SQLite_QuerySingleRow(-1, $sQuery0, $aRow)
If $aRow[0] <> "" Then
$iLastID = $aRow[0]
Else
Local $sQuery1 = "insert into moz_places (url, title) values ('" & $sUrl & "', '" & $sTitle & "');"
_SQLite_Exec(-1, $sQuery1)
If @error Then Return SetError(1, 6, 0)
Local $iLastID= _SQLite_LastInsertRowID()
EndIf
Local $sQuery2 = "insert into moz_bookmarks(type, fk, parent, title) values (1, " & $iLastID & ", 2, '" & $sTitle & "')"
_SQLite_Exec(-1, $sQuery2)
If @error Then Return SetError(1, 6, 0)
Return 1
EndFunc
Func _FF_ProfilesList()
Local $aResult[1][2] = [[0]]
Local $sProfiles = @AppDataDir & "\Mozilla\Firefox\profiles.ini"
Local $aSections = IniReadSectionNames($sProfiles)
If @error OR NOT IsArray($aSections) Then Return SetError(1, 1, 0)
For $i = 1 To $aSections[0]
If $aSections[$i] <> "General" Then
Local $sProfileName = IniRead($sProfiles, $aSections[$i], "Name", "error")
Local $bIsRelative = IniRead($sProfiles, $aSections[$i], "IsRelative", "error")
Local $sProfilePath = IniRead($sProfiles, $aSections[$i], "Path", "error")
If $bIsRelative = "error" OR $sProfilePath = "error" OR $sProfileName = "error" Then ContinueLoop
If $bIsRelative = "1" Then $sProfilePath = _PathFull( @AppDataDir & "\Mozilla\Firefox\" & StringReplace($sProfilePath, "/", "\") )
If NOT FileExists($sProfilePath & "\prefs.js") Then ContinueLoop
$aResult[0][0] = UBound($aResult)
Redim $aResult[ UBound($aResult) + 1][2]
If IniRead($sProfiles, $aSections[$i], "Default", "error") = "1" Then $aResult[0][1] = UBound($aResult) - 1
$aResult[UBound($aResult) - 1][0] = $sProfileName
$aResult[UBound($aResult) - 1][1] = $sProfilePath
EndIf
Next
If $aResult[0][1] = "" AND $aResult[0][0] > 0 Then $aResult[0][1] = 1
Return $aResult
EndFunc
J'espère que ça fonctionnera...