├── README.RU.md
├── README.md
└── Source
├── Apps
├── Apple Notes.bat
├── ChatGPT.bat
├── Debug mode.bat
├── Discord.bat
├── Instagram.bat
├── TV.bat
├── Twitch chat.bat
├── X.bat
├── YouTube.bat
├── YouTube.js
└── tv.html
├── Config.ini
├── DevicesList.txt
├── Project1.dpr
├── Project1.dproj
├── Project1.res
├── Unit1.dfm
├── Unit1.pas
├── UserAgentsList.txt
├── clear.bat
└── index.html
/README.RU.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/r57zone/ProtonShell/blob/master/README.md)
2 | [](https://github.com/r57zone/ProtonShell/blob/master/README.RU.md)
3 | # ProtonShell
4 | Легковесная оболочка для веб-сайтов, простых веб-приложений, работающая на базе системного браузера Microsoft Edge. На её основе можно сделать отдельное окно для сайтов, например, для: YouTube (TV), Google Docs, ChatGPT, чата Twitch, Инстаграмма, с пользовательским js скриптом или какое-то веб-приложение в своём окне. В папке `Apps` можно найти готовые параметры запуска для YouTube TV, ChatGPT, Discord, Instagram, чата Twitch, клиента X, а также простую оболочку для запуска других приложений.
5 |
6 | ## Скриншоты
7 | 
8 | [](https://github.com/user-attachments/assets/08b09024-ff66-4e07-837c-5b4d918862d7)
9 | [](https://github.com/user-attachments/assets/22419527-2937-4bdc-a7b8-95097cf25de7)
10 | [](https://github.com/r57zone/ProtonShell/assets/9499881/6a2701eb-869e-480a-8548-628daec17fe7)
11 | [](https://github.com/r57zone/ProtonShell/assets/9499881/e1ff8392-ba8b-4373-a20b-0d1a29773c10)
12 | [](https://github.com/user-attachments/assets/a4e77acb-1bfd-4fff-8e31-7415cd8b853a)
13 | [](https://github.com/user-attachments/assets/325c1c6d-8125-4f0a-beab-696e5fe7f19f)
14 |
15 | ## Настройка
16 | 1. Установите [Edge WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/).
17 | 2. Поместите файл `index.html` в папку с приложением или введите URL адрес, в конфигурационный файл.
18 | 3. Измените название, параметры окна, иконку, прокси, UserAgent и другие настройки, в конфигурационном файле `Config.ini`.
19 | 4. При необходимости измените иконку `exe`, с помощью [Resource Hacker](http://www.angusj.com/resourcehacker/) или укажите иконку в конфигурационном файле.
20 |
21 | ## Параметры запуска
22 | При использовании параметров запуска чтение конфигурационного файла не используется, исключение параметр `-c` (кастомный конфигурационный файл).
23 |
24 | `-c anotherapp.ini` - чтение конфигурационного файла, с иным названием. При использовании другие параметры запуска не используются и все параметры читаются из конфигурационного файла.
25 |
26 | `-f index.html` - путь до html файла (относительный или полный).
27 |
28 | `-a "https://youtube.com/tv"` - адрес веб-сайта.
29 |
30 | `-n "My app"` - заголовок приложения.
31 |
32 | `-i MyIcon.ico` - путь до иконки.
33 |
34 | `-u Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0` - пользовательский агент (user agent).
35 |
36 | `-s 1.js` - пользовательский скрипт (userscript).
37 |
38 | `-w` - ширина приложения.
39 |
40 | `-h` - высота приложения.
41 |
42 | `-fullscreen` - полноэкранный режим.
43 |
44 | `-p` - изменение системной прокси на заданную (формат: IP:PORT).
45 |
46 | `-rp` - возврат прошлой системной прокси, для случаев изменения прокси на другую.
47 |
48 | `-b 3` - стиль рамок (None = `0`, Sizeable = `1`, Single = `2`, Dialog = 3, SizeToolWin = `4`, ToolWindow = `5`).
49 |
50 | `-t 50` - отступ сверху.
51 |
52 | `-l 50` - отступ справа.
53 |
54 | `-d` - включение режима отладки.
55 |
56 | ## Команды хоста
57 | `open app.exe` или `open "app.exe" -param1 -param2 "test"` - открытие приложения, можно использовать как полный путь, так и относительный.
58 |
59 | `folder Apps\` - список файлов и папок.
60 |
61 | `del 1.txt` - удаление файла.
62 |
63 | `close` - закрытие приложения.
64 |
65 | Подробнее об использовании можно посмотреть в файле `index.html`.
66 |
67 | ## Режим отладки
68 | Для быстрой отладки можно включить специальный режим, в котором доступно: изменение размеров, изменение User agent, очистка всех данных. Для включения измените параметр `Debug` на `1`.
69 |
70 | [](https://github.com/user-attachments/assets/5d2eafc3-2825-48c3-bc82-718ca471549d)
71 |
72 | ## Загрузка
73 | >Версия для Windows 10, 11.
74 |
75 | **[Загрузить](https://github.com/r57zone/ProtonShell/releases)**
76 |
77 | ## Обратная связь
78 | `r57zone[собака]gmail.com`
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/r57zone/ProtonShell/blob/master/README.md)
2 | [](https://github.com/r57zone/ProtonShell/blob/master/README.RU.md)
3 | ← Choose language | Выберите язык
4 |
5 | # ProtonShell
6 | A lightweight shell for websites, simple web applications, based on the Microsoft Edge system browser. Based on it, you can make a separate window for websites such as: YouTube (TV), Google Docs, ChatGPT, Twitch chat, Instagram, with custom js script or some web application in its own window. In the `Apps` folder you can find ready-made startup options for YouTube TV, ChatGPT, Discord, Instagram, Twitch chat, X client, and a simple shell to run other applications.
7 |
8 | ## Screenshots
9 | 
10 | [](https://github.com/user-attachments/assets/08b09024-ff66-4e07-837c-5b4d918862d7)
11 | [](https://github.com/user-attachments/assets/22419527-2937-4bdc-a7b8-95097cf25de7)
12 | [](https://github.com/r57zone/ProtonShell/assets/9499881/6a2701eb-869e-480a-8548-628daec17fe7)
13 | [](https://github.com/r57zone/ProtonShell/assets/9499881/e1ff8392-ba8b-4373-a20b-0d1a29773c10)
14 | [](https://github.com/user-attachments/assets/a4e77acb-1bfd-4fff-8e31-7415cd8b853a)
15 | [](https://github.com/user-attachments/assets/325c1c6d-8125-4f0a-beab-696e5fe7f19f)
16 |
17 | ## Setup
18 | 1. Install [Edge WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/).
19 | 2. Place the `index.html` file in the application folder or enter the URL address, in the configuration file.
20 | 3. Change the name, window parameters, icon, proxy, UserAgent and other settings, in the `Config.ini` configuration file.
21 | 4. If necessary, change the `exe` icon, using [Resource Hacker](http://www.angusj.com/resourcehacker/) or specify the icon in the configuration file.
22 |
23 | ## Launch options
24 | When using startup parameters, reading the configuration file is not used, except for the `-c` parameter (custom configuration file).
25 |
26 | `-c anotherapp.ini` - read configuration file, with a different name. When used, other startup parameters are not used and all parameters are read from the configuration file.
27 |
28 | `-f index.html` - the path to the html file (relative or full).
29 |
30 | `-a “https://youtube.com/tv”` - the web site address.
31 |
32 | `-n “My app”` - the title of the application.
33 |
34 | `-i MyIcon.ico` - path to the icon.
35 |
36 | `-u Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0` - user agent.
37 |
38 | `-s 1.js` - user script (userscript).
39 |
40 | `-w` - width of the application.
41 |
42 | `-h` - height of the application.
43 |
44 | `-fullscreen` - fullscreen mode.
45 |
46 | `-p` - change system proxy to the specified one (format: IP:PORT).
47 |
48 | `-rp` - return past system proxy, for cases of changing proxy to another one.
49 |
50 | `-b 3` - frame style (None = `0`, Sizeable = `1`, Single = `2`, Dialog = 3, SizeToolWin = `4`, ToolWindow = `5`).
51 |
52 | `-t 50` - indent from the top.
53 |
54 | `-l 50` - indent to the right.
55 |
56 | `-d` - enable debugging mode.
57 |
58 | ## Host Commands
59 |
60 | `open app.exe` or `open "app.exe" -param1 -param2 "test"` - open the application, you can use both full path and relative path.
61 |
62 | `folder Apps\` - list of files and folders.
63 |
64 | `del 1.txt` - delete file.
65 |
66 | `close` - close the application.
67 |
68 | Details on usage can be found in the `index.html` file.
69 |
70 | ## Debug mode
71 | For fast debugging you can enable a special mode in which the following is available: resizing, changing User agent, clearing all data. To enable it, change the `Debug` parameter to `1`.
72 |
73 | [](https://github.com/user-attachments/assets/e2e88215-3e52-46dd-b24a-42eb6bfdc3e7)
74 |
75 | ## Download
76 | >Version for Windows 10, 11.
77 |
78 | **[Download](https://github.com/r57zone/ProtonShell/releases)**
79 |
80 | ## Feedback
81 | `r57zone[at]gmail.com`
--------------------------------------------------------------------------------
/Source/Apps/Apple Notes.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -a "https://www.icloud.com/notes/" -n "Notes" -w 720 -h 480 -b 2"
2 |
--------------------------------------------------------------------------------
/Source/Apps/ChatGPT.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -a "https://chatgpt.com" -n "ChatGPT""
2 |
--------------------------------------------------------------------------------
/Source/Apps/Debug mode.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -a "https://google.com" -n "Google" -d"
2 |
--------------------------------------------------------------------------------
/Source/Apps/Discord.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -a "https://discord.com" -n "Discord" -iw"
2 |
--------------------------------------------------------------------------------
/Source/Apps/Instagram.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -a "https://instagram.com" -n "Instagram" -w 360 -h 640 -u "Instagram 343.0.0.33.101 Android (34/14; 383dpi; 1080x2145; samsung; SM-A156M; a15x; mt6835; pt_BR; 629710169)""
2 |
--------------------------------------------------------------------------------
/Source/Apps/TV.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -f "Apps\tv.html" -n "TV UI" -fullscreen"
2 |
--------------------------------------------------------------------------------
/Source/Apps/Twitch chat.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -a "https://www.twitch.tv/popout/residentevil/chat" -n "Twitch chat" -w 360 -h 640 -iw"
2 |
--------------------------------------------------------------------------------
/Source/Apps/X.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -a "https://x.com" -n "X" -w 480 -h 640"
2 |
--------------------------------------------------------------------------------
/Source/Apps/YouTube.bat:
--------------------------------------------------------------------------------
1 | cmd /d /c start "" /B "..\ProtonShell.exe" -a "https://youtube.com/tv" -u "Roku/DVP-14.0 (14.0.4.12221-CG)" -n "YouTube on TV" -fullscreen -s "YouTube.js""
2 |
--------------------------------------------------------------------------------
/Source/Apps/YouTube.js:
--------------------------------------------------------------------------------
1 | // Функция для поиска кнопки и добавления слушателя событий
2 | function trackButton() {
3 | // Получаем все кнопки с указанным классом
4 | const buttons = document.querySelectorAll('.ytlr-button--large-shape');
5 |
6 | if (buttons.length > 1) { // Проверяем, есть ли хотя бы две кнопки
7 | const button = buttons[1]; // Выбираем вторую кнопку (индекс 1)
8 |
9 | //console.log('Вторая кнопка найдена, создаем дубликат.');
10 |
11 | // Создаем дубликат кнопки
12 | const newButton = button.cloneNode(true); // Клонируем кнопку, включая ее содержимое и атрибуты
13 |
14 | // Удаляем оригинальную кнопку
15 | const parent = button.parentNode; // Получаем родительский элемент
16 | if (parent) {
17 | parent.removeChild(button); // Удаляем оригинальную кнопку
18 |
19 | // Убираем aria-hidden у новой кнопки, чтобы она была доступна
20 | newButton.removeAttribute('aria-hidden'); // Удаляем атрибут aria-hidden
21 | newButton.setAttribute('tabindex', '0'); // Добавляем tabindex, чтобы кнопка могла получать фокус
22 |
23 | // Добавляем новый элемент на место оригинала
24 | newButton.addEventListener('click', function(event) {
25 | window.chrome.webview.postMessage('close');
26 | //alert('Кнопка нажата!'); // Показываем алерт
27 | //console.log('Кнопка нажата:', event);
28 | //console.dir(event.target);
29 | });
30 |
31 | // Вставляем дубликат в то же место
32 | parent.insertBefore(newButton, button.nextSibling); // Вставляем новый элемент после оригинала
33 | //console.log('Дубликат второй кнопки добавлен с обработчиком клика.');
34 |
35 | // Устанавливаем флаг, чтобы избежать повторной обработки
36 | // buttonProcessed = true; // Убираем этот флаг, чтобы кнопка могла заменяться повторно
37 |
38 | // Проверяем доступность новой кнопки
39 | //console.log('Новая кнопка:', newButton);
40 | } else {
41 | //console.error('Родительский элемент не найден.'); // Если родителя нет, выводим сообщение об ошибке
42 | }
43 | } else {
44 | //console.log('Недостаточно кнопок. Попробуем снова через 1 секунду.');
45 | }
46 | }
47 |
48 | // Дожидаемся полной загрузки документа
49 | //console.log('Документ загружен, ищем кнопки...');
50 |
51 | // Пробуем сразу найти кнопки
52 | trackButton();
53 |
54 | // Если кнопки не найдены сразу, ищем их периодически
55 | const interval = setInterval(() => {
56 | trackButton(); // Теперь просто вызываем функцию
57 | }, 1000); // Проверяем каждые 1000 миллисекунд (1 секунда)
58 |
--------------------------------------------------------------------------------
/Source/Apps/tv.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | TV UI
7 |
52 |
141 |
142 |
143 |
144 |
145 |
146 |
--------------------------------------------------------------------------------
/Source/Config.ini:
--------------------------------------------------------------------------------
1 | # https://github.com/r57zone/ProtonShell
2 |
3 | [Main]
4 | # Clear the value of "File" if you want to load the website.
5 | File=index.html
6 | UserAgent=
7 | URL=https://google.ru
8 | # Opening links with "_blank" attribute in external browsers
9 | OpenExternalLinks=1
10 | UserScript=
11 | # Change system proxy while using the app
12 | SystemProxy=
13 | # Return to previous system proxy after closing the app (if you use proxy), 1 - on, 0 - off
14 | ReturnPreviousProxy=0
15 | # Debug menu, 1 - on, 0 - off
16 | Debug=0
17 |
18 | [Window]
19 | Title=Test App
20 | IconPath=
21 | Width=640
22 | Height=480
23 | SaveSize=0
24 |
25 | # None = 0, Sizeable = 1, Single = 2, Dialog = 3, SizeToolWin = 4, ToolWindow = 5
26 | BorderStyle=1
27 | # 1 - on, 0 - off
28 | HideMaximize=0
29 |
30 | # Normal = 0, Maximized = 1, FullScreen = 2
31 | WindowState=0
32 | SaveState=0
33 | StayOnTop=0
34 |
35 | # Position
36 | Top=
37 | Left=
38 | SavePos=0
--------------------------------------------------------------------------------
/Source/DevicesList.txt:
--------------------------------------------------------------------------------
1 | Default (640x480)
2 | Galaxy S4 (1080x1920)
3 | Galaxy S20/S21 (1440x3200)
4 | Galaxy Note 10/20 (1440x3040)
5 | Pixel 4/5 (1080x2280)
6 | Pixel 6/7 (1080x2400)
7 | OnePlus 8/9 (1080x2400)
8 | iPhone 5/5S/SE (320x568)
9 | iPhone 6/6S/7/8 (750x1334)
10 | iPhone X/XS/11 Pro (1125x2436)
11 | iPhone 11/11 Pro Max/12/12 Pro (1284x2778)
12 | iPad 1/2 (768x1024)
13 | iPad Mini (768x1024)
14 | iPad Pro 11 (834x1194)
15 | iPad Pro 12.9 (1648x2368)
--------------------------------------------------------------------------------
/Source/Project1.dpr:
--------------------------------------------------------------------------------
1 | program Project1;
2 |
3 | uses
4 | Vcl.Forms,
5 | Unit1 in 'Unit1.pas' {Main};
6 |
7 | {$R *.res}
8 |
9 | begin
10 | Application.Initialize;
11 | Application.MainFormOnTaskbar := True;
12 | Application.CreateForm(TMain, Main);
13 | Application.Run;
14 | end.
15 |
--------------------------------------------------------------------------------
/Source/Project1.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {7DB7F34E-9163-46C2-AF23-011252D9DF0C}
4 | 19.5
5 | VCL
6 | True
7 | Release
8 | Win32
9 | 1
10 | Application
11 | Project1.dpr
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Cfg_1
34 | true
35 | true
36 |
37 |
38 | true
39 | Base
40 | true
41 |
42 |
43 | true
44 | Cfg_2
45 | true
46 | true
47 |
48 |
49 | .\$(Platform)\$(Config)
50 | .\$(Platform)\$(Config)
51 | false
52 | false
53 | false
54 | false
55 | false
56 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
57 | $(BDS)\bin\delphi_PROJECTICON.ico
58 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
59 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
60 | Project1
61 |
62 |
63 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;vclFireDAC;IndySystem;bindcompvclsmp;tethering;svnui;bindcompvclwinx;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;FireDAC;vcltouch;vcldb;bindcompfmx;svn;FireDACSqliteDriver;FireDACPgDriver;inetdb;soaprtl;DbxCommonDriver;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;vcledge;fmxobj;vclwinx;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)
64 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
65 | Debug
66 | true
67 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
68 | 1033
69 | $(BDS)\bin\default_app.manifest
70 |
71 |
72 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;vclFireDAC;IndySystem;bindcompvclsmp;tethering;bindcompvclwinx;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;FireDAC;vcltouch;vcldb;bindcompfmx;FireDACSqliteDriver;FireDACPgDriver;inetdb;soaprtl;DbxCommonDriver;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;vcledge;fmxobj;vclwinx;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)
73 |
74 |
75 | DEBUG;$(DCC_Define)
76 | true
77 | false
78 | true
79 | true
80 | true
81 |
82 |
83 | false
84 | true
85 | PerMonitorV2
86 |
87 |
88 | false
89 | RELEASE;$(DCC_Define)
90 | 0
91 | 0
92 |
93 |
94 | PerMonitorV2
95 | true
96 | 1033
97 | CompanyName=r57zone;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
98 |
99 |
100 |
101 | MainSource
102 |
103 |
104 |
105 | dfm
106 |
107 |
108 | Base
109 |
110 |
111 | Cfg_1
112 | Base
113 |
114 |
115 | Cfg_2
116 | Base
117 |
118 |
119 |
120 | Delphi.Personality.12
121 | Application
122 |
123 |
124 |
125 | Project1.dpr
126 |
127 |
128 | Microsoft Office 2000 Sample Automation Server Wrapper Components
129 | Microsoft Office XP Sample Automation Server Wrapper Components
130 |
131 |
132 |
133 |
134 |
135 |
136 | 1
137 |
138 |
139 | Contents\MacOS
140 | 1
141 |
142 |
143 | 0
144 |
145 |
146 |
147 |
148 | classes
149 | 64
150 |
151 |
152 | classes
153 | 64
154 |
155 |
156 |
157 |
158 | res\xml
159 | 1
160 |
161 |
162 | res\xml
163 | 1
164 |
165 |
166 |
167 |
168 | library\lib\armeabi-v7a
169 | 1
170 |
171 |
172 |
173 |
174 | library\lib\armeabi
175 | 1
176 |
177 |
178 | library\lib\armeabi
179 | 1
180 |
181 |
182 |
183 |
184 | library\lib\armeabi-v7a
185 | 1
186 |
187 |
188 |
189 |
190 | library\lib\mips
191 | 1
192 |
193 |
194 | library\lib\mips
195 | 1
196 |
197 |
198 |
199 |
200 | library\lib\armeabi-v7a
201 | 1
202 |
203 |
204 | library\lib\arm64-v8a
205 | 1
206 |
207 |
208 |
209 |
210 | library\lib\armeabi-v7a
211 | 1
212 |
213 |
214 |
215 |
216 | res\drawable
217 | 1
218 |
219 |
220 | res\drawable
221 | 1
222 |
223 |
224 |
225 |
226 | res\values
227 | 1
228 |
229 |
230 | res\values
231 | 1
232 |
233 |
234 |
235 |
236 | res\values-v21
237 | 1
238 |
239 |
240 | res\values-v21
241 | 1
242 |
243 |
244 |
245 |
246 | res\values
247 | 1
248 |
249 |
250 | res\values
251 | 1
252 |
253 |
254 |
255 |
256 | res\drawable
257 | 1
258 |
259 |
260 | res\drawable
261 | 1
262 |
263 |
264 |
265 |
266 | res\drawable-xxhdpi
267 | 1
268 |
269 |
270 | res\drawable-xxhdpi
271 | 1
272 |
273 |
274 |
275 |
276 | res\drawable-xxxhdpi
277 | 1
278 |
279 |
280 | res\drawable-xxxhdpi
281 | 1
282 |
283 |
284 |
285 |
286 | res\drawable-ldpi
287 | 1
288 |
289 |
290 | res\drawable-ldpi
291 | 1
292 |
293 |
294 |
295 |
296 | res\drawable-mdpi
297 | 1
298 |
299 |
300 | res\drawable-mdpi
301 | 1
302 |
303 |
304 |
305 |
306 | res\drawable-hdpi
307 | 1
308 |
309 |
310 | res\drawable-hdpi
311 | 1
312 |
313 |
314 |
315 |
316 | res\drawable-xhdpi
317 | 1
318 |
319 |
320 | res\drawable-xhdpi
321 | 1
322 |
323 |
324 |
325 |
326 | res\drawable-mdpi
327 | 1
328 |
329 |
330 | res\drawable-mdpi
331 | 1
332 |
333 |
334 |
335 |
336 | res\drawable-hdpi
337 | 1
338 |
339 |
340 | res\drawable-hdpi
341 | 1
342 |
343 |
344 |
345 |
346 | res\drawable-xhdpi
347 | 1
348 |
349 |
350 | res\drawable-xhdpi
351 | 1
352 |
353 |
354 |
355 |
356 | res\drawable-xxhdpi
357 | 1
358 |
359 |
360 | res\drawable-xxhdpi
361 | 1
362 |
363 |
364 |
365 |
366 | res\drawable-xxxhdpi
367 | 1
368 |
369 |
370 | res\drawable-xxxhdpi
371 | 1
372 |
373 |
374 |
375 |
376 | res\drawable-small
377 | 1
378 |
379 |
380 | res\drawable-small
381 | 1
382 |
383 |
384 |
385 |
386 | res\drawable-normal
387 | 1
388 |
389 |
390 | res\drawable-normal
391 | 1
392 |
393 |
394 |
395 |
396 | res\drawable-large
397 | 1
398 |
399 |
400 | res\drawable-large
401 | 1
402 |
403 |
404 |
405 |
406 | res\drawable-xlarge
407 | 1
408 |
409 |
410 | res\drawable-xlarge
411 | 1
412 |
413 |
414 |
415 |
416 | res\values
417 | 1
418 |
419 |
420 | res\values
421 | 1
422 |
423 |
424 |
425 |
426 | 1
427 |
428 |
429 | Contents\MacOS
430 | 1
431 |
432 |
433 | 0
434 |
435 |
436 |
437 |
438 | Contents\MacOS
439 | 1
440 | .framework
441 |
442 |
443 | Contents\MacOS
444 | 1
445 | .framework
446 |
447 |
448 | Contents\MacOS
449 | 1
450 | .framework
451 |
452 |
453 | 0
454 |
455 |
456 |
457 |
458 | 1
459 | .dylib
460 |
461 |
462 | 1
463 | .dylib
464 |
465 |
466 | 1
467 | .dylib
468 |
469 |
470 | Contents\MacOS
471 | 1
472 | .dylib
473 |
474 |
475 | Contents\MacOS
476 | 1
477 | .dylib
478 |
479 |
480 | Contents\MacOS
481 | 1
482 | .dylib
483 |
484 |
485 | 0
486 | .dll;.bpl
487 |
488 |
489 |
490 |
491 | 1
492 | .dylib
493 |
494 |
495 | 1
496 | .dylib
497 |
498 |
499 | 1
500 | .dylib
501 |
502 |
503 | Contents\MacOS
504 | 1
505 | .dylib
506 |
507 |
508 | Contents\MacOS
509 | 1
510 | .dylib
511 |
512 |
513 | Contents\MacOS
514 | 1
515 | .dylib
516 |
517 |
518 | 0
519 | .bpl
520 |
521 |
522 |
523 |
524 | 0
525 |
526 |
527 | 0
528 |
529 |
530 | 0
531 |
532 |
533 | 0
534 |
535 |
536 | 0
537 |
538 |
539 | Contents\Resources\StartUp\
540 | 0
541 |
542 |
543 | Contents\Resources\StartUp\
544 | 0
545 |
546 |
547 | Contents\Resources\StartUp\
548 | 0
549 |
550 |
551 | 0
552 |
553 |
554 |
555 |
556 | 1
557 |
558 |
559 | 1
560 |
561 |
562 |
563 |
564 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
565 | 1
566 |
567 |
568 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
569 | 1
570 |
571 |
572 |
573 |
574 | ..\
575 | 1
576 |
577 |
578 | ..\
579 | 1
580 |
581 |
582 | ..\
583 | 1
584 |
585 |
586 |
587 |
588 | Contents
589 | 1
590 |
591 |
592 | Contents
593 | 1
594 |
595 |
596 | Contents
597 | 1
598 |
599 |
600 |
601 |
602 | Contents\Resources
603 | 1
604 |
605 |
606 | Contents\Resources
607 | 1
608 |
609 |
610 | Contents\Resources
611 | 1
612 |
613 |
614 |
615 |
616 | library\lib\armeabi-v7a
617 | 1
618 |
619 |
620 | library\lib\arm64-v8a
621 | 1
622 |
623 |
624 | 1
625 |
626 |
627 | 1
628 |
629 |
630 | 1
631 |
632 |
633 | 1
634 |
635 |
636 | Contents\MacOS
637 | 1
638 |
639 |
640 | Contents\MacOS
641 | 1
642 |
643 |
644 | Contents\MacOS
645 | 1
646 |
647 |
648 | 0
649 |
650 |
651 |
652 |
653 | library\lib\armeabi-v7a
654 | 1
655 |
656 |
657 |
658 |
659 | 1
660 |
661 |
662 | 1
663 |
664 |
665 |
666 |
667 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
668 | 1
669 |
670 |
671 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
672 | 1
673 |
674 |
675 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
676 | 1
677 |
678 |
679 |
680 |
681 | ..\
682 | 1
683 |
684 |
685 | ..\
686 | 1
687 |
688 |
689 | ..\
690 | 1
691 |
692 |
693 |
694 |
695 | 1
696 |
697 |
698 | 1
699 |
700 |
701 | 1
702 |
703 |
704 |
705 |
706 | ..\$(PROJECTNAME).launchscreen
707 | 64
708 |
709 |
710 | ..\$(PROJECTNAME).launchscreen
711 | 64
712 |
713 |
714 |
715 |
716 | 1
717 |
718 |
719 | 1
720 |
721 |
722 | 1
723 |
724 |
725 |
726 |
727 | Assets
728 | 1
729 |
730 |
731 | Assets
732 | 1
733 |
734 |
735 |
736 |
737 | Assets
738 | 1
739 |
740 |
741 | Assets
742 | 1
743 |
744 |
745 |
746 |
747 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
748 | 1
749 |
750 |
751 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
752 | 1
753 |
754 |
755 |
756 |
757 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
758 | 1
759 |
760 |
761 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
762 | 1
763 |
764 |
765 |
766 |
767 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
768 | 1
769 |
770 |
771 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
772 | 1
773 |
774 |
775 |
776 |
777 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
778 | 1
779 |
780 |
781 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
782 | 1
783 |
784 |
785 |
786 |
787 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
788 | 1
789 |
790 |
791 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
792 | 1
793 |
794 |
795 |
796 |
797 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
798 | 1
799 |
800 |
801 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
802 | 1
803 |
804 |
805 |
806 |
807 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
808 | 1
809 |
810 |
811 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
812 | 1
813 |
814 |
815 |
816 |
817 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
818 | 1
819 |
820 |
821 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
822 | 1
823 |
824 |
825 |
826 |
827 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
828 | 1
829 |
830 |
831 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
832 | 1
833 |
834 |
835 |
836 |
837 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
838 | 1
839 |
840 |
841 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
842 | 1
843 |
844 |
845 |
846 |
847 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
848 | 1
849 |
850 |
851 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
852 | 1
853 |
854 |
855 |
856 |
857 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
858 | 1
859 |
860 |
861 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
862 | 1
863 |
864 |
865 |
866 |
867 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
868 | 1
869 |
870 |
871 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
872 | 1
873 |
874 |
875 |
876 |
877 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
878 | 1
879 |
880 |
881 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
882 | 1
883 |
884 |
885 |
886 |
887 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
888 | 1
889 |
890 |
891 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
892 | 1
893 |
894 |
895 |
896 |
897 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
898 | 1
899 |
900 |
901 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
902 | 1
903 |
904 |
905 |
906 |
907 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
908 | 1
909 |
910 |
911 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
912 | 1
913 |
914 |
915 |
916 |
917 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
918 | 1
919 |
920 |
921 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
922 | 1
923 |
924 |
925 |
926 |
927 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
928 | 1
929 |
930 |
931 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
932 | 1
933 |
934 |
935 |
936 |
937 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
938 | 1
939 |
940 |
941 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
942 | 1
943 |
944 |
945 |
946 |
947 |
948 |
949 |
950 |
951 |
952 |
953 |
954 |
955 |
956 |
957 |
958 |
959 | True
960 | False
961 |
962 |
963 | 12
964 |
965 |
966 |
967 |
968 |
969 |
--------------------------------------------------------------------------------
/Source/Project1.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/r57zone/ProtonShell/0944118c27a0aae7be0fd0746f111e25d902070e/Source/Project1.res
--------------------------------------------------------------------------------
/Source/Unit1.dfm:
--------------------------------------------------------------------------------
1 | object Main: TMain
2 | Left = 0
3 | Top = 0
4 | Caption = 'Main'
5 | ClientHeight = 480
6 | ClientWidth = 640
7 | Color = clBtnFace
8 | Font.Charset = DEFAULT_CHARSET
9 | Font.Color = clWindowText
10 | Font.Height = -11
11 | Font.Name = 'Tahoma'
12 | Font.Style = []
13 | Position = poDefault
14 | OnClose = FormClose
15 | OnCreate = FormCreate
16 | OnDestroy = FormDestroy
17 | OnResize = FormResize
18 | TextHeight = 13
19 | object EdgeBrowser: TEdgeBrowser
20 | Left = 0
21 | Top = 113
22 | Width = 640
23 | Height = 367
24 | Align = alClient
25 | TabOrder = 0
26 | UserDataFolder = '%LOCALAPPDATA%\bds.exe.WebView2'
27 | OnCreateWebViewCompleted = EdgeBrowserCreateWebViewCompleted
28 | OnNavigationCompleted = EdgeBrowserNavigationCompleted
29 | OnNewWindowRequested = EdgeBrowserNewWindowRequested
30 | OnWebMessageReceived = EdgeBrowserWebMessageReceived
31 | ExplicitWidth = 636
32 | ExplicitHeight = 366
33 | end
34 | object DebugPanel: TPanel
35 | Left = 0
36 | Top = 0
37 | Width = 640
38 | Height = 113
39 | Align = alTop
40 | TabOrder = 1
41 | Visible = False
42 | ExplicitWidth = 636
43 | object PanelTools: TPanel
44 | Left = 183
45 | Top = 0
46 | Width = 288
47 | Height = 113
48 | BevelOuter = bvNone
49 | TabOrder = 0
50 | object ResolutionLbl: TLabel
51 | Left = 9
52 | Top = 93
53 | Width = 75
54 | Height = 13
55 | Caption = 'Resolution: 0x0'
56 | end
57 | object LeftBtn: TButton
58 | Left = 7
59 | Top = 7
60 | Width = 25
61 | Height = 25
62 | Caption = #8592
63 | Font.Charset = DEFAULT_CHARSET
64 | Font.Color = clWindowText
65 | Font.Height = -11
66 | Font.Name = 'Tahoma'
67 | Font.Style = []
68 | ParentFont = False
69 | TabOrder = 0
70 | OnClick = LeftBtnClick
71 | end
72 | object RightBtn: TButton
73 | Left = 37
74 | Top = 7
75 | Width = 25
76 | Height = 25
77 | Caption = #8594
78 | Font.Charset = DEFAULT_CHARSET
79 | Font.Color = clWindowText
80 | Font.Height = -11
81 | Font.Name = 'Tahoma'
82 | Font.Style = []
83 | ParentFont = False
84 | TabOrder = 1
85 | OnClick = RightBtnClick
86 | end
87 | object RefreshBtn: TButton
88 | Left = 67
89 | Top = 7
90 | Width = 25
91 | Height = 25
92 | Caption = #8635
93 | Font.Charset = DEFAULT_CHARSET
94 | Font.Color = clWindowText
95 | Font.Height = -11
96 | Font.Name = 'Tahoma'
97 | Font.Style = []
98 | ParentFont = False
99 | TabOrder = 2
100 | OnClick = RefreshBtnClick
101 | end
102 | object HomeBtn: TButton
103 | Left = 97
104 | Top = 7
105 | Width = 25
106 | Height = 25
107 | Caption = #55356#57312
108 | Font.Charset = DEFAULT_CHARSET
109 | Font.Color = clWindowText
110 | Font.Height = -11
111 | Font.Name = 'Tahoma'
112 | Font.Style = []
113 | ParentFont = False
114 | ParentShowHint = False
115 | ShowHint = False
116 | TabOrder = 3
117 | OnClick = HomeBtnClick
118 | end
119 | object ClearBtn: TButton
120 | Left = 127
121 | Top = 7
122 | Width = 25
123 | Height = 25
124 | Caption = #55357#56785#65039
125 | Font.Charset = DEFAULT_CHARSET
126 | Font.Color = clWindowText
127 | Font.Height = -11
128 | Font.Name = 'Tahoma'
129 | Font.Style = []
130 | ParentFont = False
131 | ParentShowHint = False
132 | ShowHint = True
133 | TabOrder = 4
134 | OnClick = ClearBtnClick
135 | end
136 | object SetDeviceBtn: TButton
137 | Left = 226
138 | Top = 7
139 | Width = 25
140 | Height = 25
141 | Caption = #55357#56561
142 | Font.Charset = DEFAULT_CHARSET
143 | Font.Color = clWindowText
144 | Font.Height = -11
145 | Font.Name = 'Tahoma'
146 | Font.Style = []
147 | ParentFont = False
148 | ParentShowHint = False
149 | ShowHint = True
150 | TabOrder = 5
151 | OnClick = SetDeviceBtnClick
152 | end
153 | object RotateDeviceBtn: TButton
154 | Left = 256
155 | Top = 7
156 | Width = 25
157 | Height = 25
158 | Caption = #8634
159 | ParentShowHint = False
160 | ShowHint = True
161 | TabOrder = 6
162 | OnClick = RotateDeviceBtnClick
163 | end
164 | object DevicesCB: TComboBox
165 | Left = 8
166 | Top = 38
167 | Width = 212
168 | Height = 21
169 | Style = csDropDownList
170 | ParentShowHint = False
171 | ShowHint = True
172 | TabOrder = 7
173 | OnChange = DevicesCBChange
174 | end
175 | object ZoomCB: TComboBox
176 | Left = 227
177 | Top = 38
178 | Width = 53
179 | Height = 21
180 | Style = csDropDownList
181 | ItemIndex = 7
182 | TabOrder = 8
183 | Text = '100%'
184 | Items.Strings = (
185 | '30%'
186 | '40%'
187 | '50%'
188 | '60%'
189 | '70%'
190 | '80%'
191 | '90%'
192 | '100%'
193 | '125%'
194 | '150%'
195 | '175%'
196 | '200%')
197 | end
198 | object UserAgentsCB: TComboBox
199 | Left = 8
200 | Top = 66
201 | Width = 272
202 | Height = 21
203 | Style = csDropDownList
204 | ItemIndex = 0
205 | ParentShowHint = False
206 | ShowHint = True
207 | TabOrder = 9
208 | Text = 'Default User Agent'
209 | OnChange = UserAgentsCBChange
210 | Items.Strings = (
211 | 'Default User Agent')
212 | end
213 | end
214 | end
215 | end
216 |
--------------------------------------------------------------------------------
/Source/Unit1.pas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/r57zone/ProtonShell/0944118c27a0aae7be0fd0746f111e25d902070e/Source/Unit1.pas
--------------------------------------------------------------------------------
/Source/UserAgentsList.txt:
--------------------------------------------------------------------------------
1 | Default User Agent
2 | Android (Chrome): Mozilla/5.0 (Linux; Android 13; Pixel 6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.113 Mobile Safari/537.36
3 | iPhone (Safari): Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/605.1.15
4 | iPad (Firefox): Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/128.0 Mobile/15E148 Safari/605.1.15
5 | Windows (Chrome): Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
6 |
--------------------------------------------------------------------------------
/Source/clear.bat:
--------------------------------------------------------------------------------
1 | del *.obj
2 | del *.dcu
3 | del Win32\Release\*.dcu
4 | del Win32\Debug\*.dcu
5 | rd /s /q __recovery
6 | rd /s /q __history
7 | del *.~*
8 | del *.hpp
9 | del *.dcp
10 | del *.dpl
11 | del *.cesettings
12 | del *.bak
13 | del *.dproj.local
14 | del *.identcache
15 | --del *.exe
16 | --del Win32\Release\*.exe
17 | --del Win32\Debug\*.exe
--------------------------------------------------------------------------------
/Source/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Title
7 |
8 |
34 |
35 |
36 | ProtonShell Test App
37 | r57zone github |
38 | r57zone site (target blank)
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------