From 5a36c5596cdef4a857a8541f18692572945a228f Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 11 Jul 2016 11:12:26 -0700 Subject: [PATCH] Add initial windows login item implementation --- atom/browser/browser_win.cc | 39 ++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/atom/browser/browser_win.cc b/atom/browser/browser_win.cc index a28dfc096adb..88c2df3b6a13 100644 --- a/atom/browser/browser_win.cc +++ b/atom/browser/browser_win.cc @@ -274,10 +274,47 @@ bool Browser::SetBadgeCount(int count) { } void Browser::SetLoginItemSettings(LoginItemSettings settings) { + base::FilePath path; + if (!PathService::Get(base::FILE_EXE, &path)) { + LOG(ERROR) << "Error getting app exe path"; + return; + } + + // Main Registry Key + HKEY root = HKEY_CURRENT_USER; + std::string keyPathStr = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; + std::wstring keyPath = std::wstring(keyPathStr.begin(), keyPathStr.end()); + + // Executable Path + std::wstring exePath(path.value()); + base::win::RegKey key(root, keyPath.c_str(), KEY_ALL_ACCESS); + + if (settings.open_at_login) + key.WriteValue(GetAppUserModelID(), exePath.c_str()); + else { + key.DeleteValue(GetAppUserModelID()) + } } LoginItemSettings Browser::GetLoginItemSettings() { - return LoginItemSettings(); + LoginItemSettings settings; + + base::FilePath path; + if (!PathService::Get(base::FILE_EXE, &path)) { + LOG(ERROR) << "Error getting app exe path"; + return; + } + + // Main Registry Key + HKEY root = HKEY_CURRENT_USER; + std::string keyPathStr = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; + std::wstring keyPath = std::wstring(keyPathStr.begin(), keyPathStr.end()); + + // Executable Path + std::wstring exePath(path.value()); + base::win::RegKey key(root, keyPath.c_str(), KEY_ALL_ACCESS); + + settings.open_at_login = key.HasValue(GetAppUserModelID()); }