Il s'agit davantage d'une mesure provisoire que d'une solution, je ne vais donc pas le marquer comme une solution.
Actuellement, je résous ce problème en faisant en sorte qu'un programme génère et exécute un fichier vbs pour saisir le nom d'utilisateur et le mot de passe de l'utilisateur. Ensuite, j'ai un autre programme qui vérifie le fichier de préférences de Chrome pour voir s'il a été configuré avec succès. Sinon, le script est relancé.
chromeConf.vbs (J'ai écrit un autre programme qui génère automatiquement ce fichier et l'exécute sur chaque ordinateur) :
Set oShell = CreateObject("WScript.Shell")
oShell.SendKeys "^{ESCAPE}" 'menu démarrer
WScript.Sleep 1000 'attente de chargement
oShell.SendKeys "chrome.exe" 'chrome
WScript.Sleep 1000
oShell.SendKeys "{ENTER}"
return = oShell.Run("waitForFocus.exe Chrome", 0, true) 'attente de l'ouverture de Chrome
oShell.SendKeys "%{F4}" 'go! be gone!
'Chrome doit être démarré deux fois pour assurer le même état de démarrage sur tous les ordinateurs
oShell.SendKeys "^{ESCAPE}" 'menu démarrer
WScript.Sleep 1000 'attente de chargement
oShell.SendKeys "chrome.exe" 'chrome
WScript.Sleep 1000
oShell.SendKeys "{ENTER}"
return = oShell.Run("waitForFocus.exe Chrome", 0, true)
oShell.SendKeys "chrome://settings" 'paramètres
oShell.SendKeys "{ENTER}"
WScript.Sleep 5000
oShell.SendKeys "{TAB}{TAB}" 'sélectionner connexion
oShell.SendKeys "{ENTER}"
WScript.Sleep 8000
oShell.SendKeys "{TAB}{TAB}" 'connexion
oShell.SendKeys "user@example.com"
oShell.SendKeys "{TAB}"
oShell.SendKeys "{ENTER}"
WScript.Sleep 4000
oShell.SendKeys "password"
oShell.SendKeys "{TAB}"
oShell.SendKeys "{ENTER}"
WScript.Sleep 4000
oShell.SendKeys "{TAB}" 'lien données
oShell.SendKeys "{TAB}"
oShell.SendKeys "{TAB}"
oShell.SendKeys "{TAB}"
oShell.SendKeys "{ENTER}"
WScript.Sleep 4000
oShell.SendKeys "{ESCAPE}" 'se débarrasser de la boîte de dialogue insistante
oShell.SendKeys "%{F4}" 'go! be gone!
waitForFocus.exe source :
// waitForFocus.cpp : Ce programme attend le chargement d'une fenêtre portant un nom spécifié
//
#include "stdafx.h"
#include
#include
#include
using namespace std;
LPWSTR pszMem;
BOOL CALLBACK FindWindowBySubstr(HWND hwnd, LPARAM substring)
{
const DWORD TITLE_SIZE = 1024;
TCHAR windowTitle[TITLE_SIZE];
if (GetWindowText(hwnd, windowTitle, TITLE_SIZE))
{
string fstr = CW2A(windowTitle); //convertir le titre de la fenêtre en chaîne de caractères
if (fstr.find(LPCSTR(substring)) != string::npos && !(fstr.find("waitForFocus.exe") != string::npos)) { //est-ce ce que nous voulons
cout << "Fenêtre trouvée !" << endl;
_tprintf(TEXT("%s\n"), windowTitle);
SwitchToThisWindow(hwnd, true); //true active l'émulation alt tab, qui empêche le bug de la fenêtre transparente
return false;
}
}
return true;
}
int main(int argc, char* argv[])
{
if (argc > 2) {
cout << "Ce programme prend 1 argument" << endl;
cout << "L'argument devrait être une partie du nom de la fenêtre que vous souhaitez attendre" << endl;
}
else if (argc == 2) {
if (string(argv[1]) == "/h" || string(argv[1]) == "-h" || string(argv[1]) == "/?" || string(argv[1]) == "-?"){
cout << "Ce programme prend en entrée une partie du nom de la fenêtre et attend le chargement de cette fenêtre" << endl;
}
else {
bool nfound = true;
while (nfound) {
HWND windowHandle = FindWindowA(0, argv[1]); //vérifier s'il existe une fenêtre correspondant exactement à ce que nous voulons
if (windowHandle == NULL) {//non
HWND WINAPI GetForegroundWindow(void);//la fenêtre est-elle déjà ouverte (dans ce cas, je n'ai pas à la chercher)
pszMem = (LPWSTR)VirtualAlloc((LPVOID)NULL,
(DWORD)(80), MEM_COMMIT,
PAGE_READWRITE);
GetWindowText(GetForegroundWindow(), pszMem,
80);
cout << GetForegroundWindow() << ", ";
string resstr = CW2A(pszMem);
wcout << pszMem << endl;
if (resstr.find(string(argv[1])) != string::npos && !(resstr.find(string("waitForFocus.exe")) != string::npos)) {
cout << "trouvé !" << endl; //la fenêtre était déjà ouverte
nfound = false;
}
else { //elle ne l'était pas
if (!EnumWindows(FindWindowBySubstr, (LPARAM)argv[1])) { //parcourir chaque fenêtre
nfound = false;
}
else {
Sleep(1000);
}
}
}
else {
cout << "résultat absolu trouvé" << endl;
SwitchToThisWindow(windowHandle, true); //passer à la fenêtre située
nfound = false;
}
}
}
}
else if (argc == 1) {
cout << "Ce programme prend en entrée une partie du nom de la fenêtre et attend le chargement de cette fenêtre" << endl;
}
else {
cout << "Comment avez-vous réussi à passer un nombre négatif d'indicateurs ?" << endl;
}
return 0;
}
validateGoogleChrome.exe source (Ce programme vérifie si Chrome a été configuré. Il suppose que le nom d'utilisateur de l'ordinateur est le même que celui du compte Google. Il doit également être exécuté dans %LOCALAPPDATA%\Google\Chrome\User Data\Default\Preferences
) :
// validateGoogleChrome.cpp : Définit le point d'entrée de l'application console.
//
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
using namespace std;
string gUname() {
char username[UNLEN + 1];
DWORD size = UNLEN + 1;
GetUserNameA(username, &size);
stringstream conv;
string uname = "";
conv << username;
conv >> uname;
cout << "nom d'utilisateur : " << uname << endl;
return uname;
}
int main()
{
string line;
string query = gUname();
ifstream file("Preferences");
if (file.is_open()) {
while (getline(file, line, '\n')) {
if (line.find(query) != string::npos) {
cout << "réussi" << endl;
return 0;
}
else {
cout << "échec" << endl;
return 1;
}
}
}
else {
cout << "ERREUR : fichier de préférences de Chrome introuvable" << endl;
return 2;
}
}
J'espère que ce code vous a horrifié au point de trouver une meilleure solution.
0 votes
Vous pourriez peut-être faire quelque chose avec les commutateurs de ligne de commande
--login...
. Voir Liste des commutateurs de ligne de commande de Chromium0 votes
Il semble qu'ils aient supprimé la commande
--login-password