├── .gitignore
├── LICENSE.txt
├── README.md
├── captures
├── 1.png
├── 2.png
└── 3.png
├── desktop
└── startup-watcher.desktop
├── startupwatcher.ico
├── startupwatcher.lpi
├── startupwatcher.lpr
├── startupwatcher.lps
├── startupwatcher.png
├── startupwatcher.res
├── startupwatcher.svg
├── unit1.lfm
├── unit1.pas
├── unit2.lfm
└── unit2.pas
/.gitignore:
--------------------------------------------------------------------------------
1 | lib
2 | backup
3 | startupwatcher
4 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 2, June 1991
3 |
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5 | 675 Mass Ave, Cambridge, MA 02139, USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | Preamble
10 |
11 | The licenses for most software are designed to take away your
12 | freedom to share and change it. By contrast, the GNU General Public
13 | License is intended to guarantee your freedom to share and change free
14 | software--to make sure the software is free for all its users. This
15 | General Public License applies to most of the Free Software
16 | Foundation's software and to any other program whose authors commit to
17 | using it. (Some other Free Software Foundation software is covered by
18 | the GNU Library General Public License instead.) You can apply it to
19 | your programs, too.
20 |
21 | When we speak of free software, we are referring to freedom, not
22 | price. Our General Public Licenses are designed to make sure that you
23 | have the freedom to distribute copies of free software (and charge for
24 | this service if you wish), that you receive source code or can get it
25 | if you want it, that you can change the software or use pieces of it
26 | in new free programs; and that you know you can do these things.
27 |
28 | To protect your rights, we need to make restrictions that forbid
29 | anyone to deny you these rights or to ask you to surrender the rights.
30 | These restrictions translate to certain responsibilities for you if you
31 | distribute copies of the software, or if you modify it.
32 |
33 | For example, if you distribute copies of such a program, whether
34 | gratis or for a fee, you must give the recipients all the rights that
35 | you have. You must make sure that they, too, receive or can get the
36 | source code. And you must show them these terms so they know their
37 | rights.
38 |
39 | We protect your rights with two steps: (1) copyright the software, and
40 | (2) offer you this license which gives you legal permission to copy,
41 | distribute and/or modify the software.
42 |
43 | Also, for each author's protection and ours, we want to make certain
44 | that everyone understands that there is no warranty for this free
45 | software. If the software is modified by someone else and passed on, we
46 | want its recipients to know that what they have is not the original, so
47 | that any problems introduced by others will not reflect on the original
48 | authors' reputations.
49 |
50 | Finally, any free program is threatened constantly by software
51 | patents. We wish to avoid the danger that redistributors of a free
52 | program will individually obtain patent licenses, in effect making the
53 | program proprietary. To prevent this, we have made it clear that any
54 | patent must be licensed for everyone's free use or not licensed at all.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | GNU GENERAL PUBLIC LICENSE
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61 |
62 | 0. This License applies to any program or other work which contains
63 | a notice placed by the copyright holder saying it may be distributed
64 | under the terms of this General Public License. The "Program", below,
65 | refers to any such program or work, and a "work based on the Program"
66 | means either the Program or any derivative work under copyright law:
67 | that is to say, a work containing the Program or a portion of it,
68 | either verbatim or with modifications and/or translated into another
69 | language. (Hereinafter, translation is included without limitation in
70 | the term "modification".) Each licensee is addressed as "you".
71 |
72 | Activities other than copying, distribution and modification are not
73 | covered by this License; they are outside its scope. The act of
74 | running the Program is not restricted, and the output from the Program
75 | is covered only if its contents constitute a work based on the
76 | Program (independent of having been made by running the Program).
77 | Whether that is true depends on what the Program does.
78 |
79 | 1. You may copy and distribute verbatim copies of the Program's
80 | source code as you receive it, in any medium, provided that you
81 | conspicuously and appropriately publish on each copy an appropriate
82 | copyright notice and disclaimer of warranty; keep intact all the
83 | notices that refer to this License and to the absence of any warranty;
84 | and give any other recipients of the Program a copy of this License
85 | along with the Program.
86 |
87 | You may charge a fee for the physical act of transferring a copy, and
88 | you may at your option offer warranty protection in exchange for a fee.
89 |
90 | 2. You may modify your copy or copies of the Program or any portion
91 | of it, thus forming a work based on the Program, and copy and
92 | distribute such modifications or work under the terms of Section 1
93 | above, provided that you also meet all of these conditions:
94 |
95 | a) You must cause the modified files to carry prominent notices
96 | stating that you changed the files and the date of any change.
97 |
98 | b) You must cause any work that you distribute or publish, that in
99 | whole or in part contains or is derived from the Program or any
100 | part thereof, to be licensed as a whole at no charge to all third
101 | parties under the terms of this License.
102 |
103 | c) If the modified program normally reads commands interactively
104 | when run, you must cause it, when started running for such
105 | interactive use in the most ordinary way, to print or display an
106 | announcement including an appropriate copyright notice and a
107 | notice that there is no warranty (or else, saying that you provide
108 | a warranty) and that users may redistribute the program under
109 | these conditions, and telling the user how to view a copy of this
110 | License. (Exception: if the Program itself is interactive but
111 | does not normally print such an announcement, your work based on
112 | the Program is not required to print an announcement.)
113 |
114 | These requirements apply to the modified work as a whole. If
115 | identifiable sections of that work are not derived from the Program,
116 | and can be reasonably considered independent and separate works in
117 | themselves, then this License, and its terms, do not apply to those
118 | sections when you distribute them as separate works. But when you
119 | distribute the same sections as part of a whole which is a work based
120 | on the Program, the distribution of the whole must be on the terms of
121 | this License, whose permissions for other licensees extend to the
122 | entire whole, and thus to each and every part regardless of who wrote it.
123 |
124 | Thus, it is not the intent of this section to claim rights or contest
125 | your rights to work written entirely by you; rather, the intent is to
126 | exercise the right to control the distribution of derivative or
127 | collective works based on the Program.
128 |
129 | In addition, mere aggregation of another work not based on the Program
130 | with the Program (or with a work based on the Program) on a volume of
131 | a storage or distribution medium does not bring the other work under
132 | the scope of this License.
133 |
134 | 3. You may copy and distribute the Program (or a work based on it,
135 | under Section 2) in object code or executable form under the terms of
136 | Sections 1 and 2 above provided that you also do one of the following:
137 |
138 | a) Accompany it with the complete corresponding machine-readable
139 | source code, which must be distributed under the terms of Sections
140 | 1 and 2 above on a medium customarily used for software interchange; or,
141 |
142 | b) Accompany it with a written offer, valid for at least three
143 | years, to give any third party, for a charge no more than your
144 | cost of physically performing source distribution, a complete
145 | machine-readable copy of the corresponding source code, to be
146 | distributed under the terms of Sections 1 and 2 above on a medium
147 | customarily used for software interchange; or,
148 |
149 | c) Accompany it with the information you received as to the offer
150 | to distribute corresponding source code. (This alternative is
151 | allowed only for noncommercial distribution and only if you
152 | received the program in object code or executable form with such
153 | an offer, in accord with Subsection b above.)
154 |
155 | The source code for a work means the preferred form of the work for
156 | making modifications to it. For an executable work, complete source
157 | code means all the source code for all modules it contains, plus any
158 | associated interface definition files, plus the scripts used to
159 | control compilation and installation of the executable. However, as a
160 | special exception, the source code distributed need not include
161 | anything that is normally distributed (in either source or binary
162 | form) with the major components (compiler, kernel, and so on) of the
163 | operating system on which the executable runs, unless that component
164 | itself accompanies the executable.
165 |
166 | If distribution of executable or object code is made by offering
167 | access to copy from a designated place, then offering equivalent
168 | access to copy the source code from the same place counts as
169 | distribution of the source code, even though third parties are not
170 | compelled to copy the source along with the object code.
171 |
172 | 4. You may not copy, modify, sublicense, or distribute the Program
173 | except as expressly provided under this License. Any attempt
174 | otherwise to copy, modify, sublicense or distribute the Program is
175 | void, and will automatically terminate your rights under this License.
176 | However, parties who have received copies, or rights, from you under
177 | this License will not have their licenses terminated so long as such
178 | parties remain in full compliance.
179 |
180 | 5. You are not required to accept this License, since you have not
181 | signed it. However, nothing else grants you permission to modify or
182 | distribute the Program or its derivative works. These actions are
183 | prohibited by law if you do not accept this License. Therefore, by
184 | modifying or distributing the Program (or any work based on the
185 | Program), you indicate your acceptance of this License to do so, and
186 | all its terms and conditions for copying, distributing or modifying
187 | the Program or works based on it.
188 |
189 | 6. Each time you redistribute the Program (or any work based on the
190 | Program), the recipient automatically receives a license from the
191 | original licensor to copy, distribute or modify the Program subject to
192 | these terms and conditions. You may not impose any further
193 | restrictions on the recipients' exercise of the rights granted herein.
194 | You are not responsible for enforcing compliance by third parties to
195 | this License.
196 |
197 | 7. If, as a consequence of a court judgment or allegation of patent
198 | infringement or for any other reason (not limited to patent issues),
199 | conditions are imposed on you (whether by court order, agreement or
200 | otherwise) that contradict the conditions of this License, they do not
201 | excuse you from the conditions of this License. If you cannot
202 | distribute so as to satisfy simultaneously your obligations under this
203 | License and any other pertinent obligations, then as a consequence you
204 | may not distribute the Program at all. For example, if a patent
205 | license would not permit royalty-free redistribution of the Program by
206 | all those who receive copies directly or indirectly through you, then
207 | the only way you could satisfy both it and this License would be to
208 | refrain entirely from distribution of the Program.
209 |
210 | If any portion of this section is held invalid or unenforceable under
211 | any particular circumstance, the balance of the section is intended to
212 | apply and the section as a whole is intended to apply in other
213 | circumstances.
214 |
215 | It is not the purpose of this section to induce you to infringe any
216 | patents or other property right claims or to contest validity of any
217 | such claims; this section has the sole purpose of protecting the
218 | integrity of the free software distribution system, which is
219 | implemented by public license practices. Many people have made
220 | generous contributions to the wide range of software distributed
221 | through that system in reliance on consistent application of that
222 | system; it is up to the author/donor to decide if he or she is willing
223 | to distribute software through any other system and a licensee cannot
224 | impose that choice.
225 |
226 | This section is intended to make thoroughly clear what is believed to
227 | be a consequence of the rest of this License.
228 |
229 | 8. If the distribution and/or use of the Program is restricted in
230 | certain countries either by patents or by copyrighted interfaces, the
231 | original copyright holder who places the Program under this License
232 | may add an explicit geographical distribution limitation excluding
233 | those countries, so that distribution is permitted only in or among
234 | countries not thus excluded. In such case, this License incorporates
235 | the limitation as if written in the body of this License.
236 |
237 | 9. The Free Software Foundation may publish revised and/or new versions
238 | of the General Public License from time to time. Such new versions will
239 | be similar in spirit to the present version, but may differ in detail to
240 | address new problems or concerns.
241 |
242 | Each version is given a distinguishing version number. If the Program
243 | specifies a version number of this License which applies to it and "any
244 | later version", you have the option of following the terms and conditions
245 | either of that version or of any later version published by the Free
246 | Software Foundation. If the Program does not specify a version number of
247 | this License, you may choose any version ever published by the Free Software
248 | Foundation.
249 |
250 | 10. If you wish to incorporate parts of the Program into other free
251 | programs whose distribution conditions are different, write to the author
252 | to ask for permission. For software which is copyrighted by the Free
253 | Software Foundation, write to the Free Software Foundation; we sometimes
254 | make exceptions for this. Our decision will be guided by the two goals
255 | of preserving the free status of all derivatives of our free software and
256 | of promoting the sharing and reuse of software generally.
257 |
258 | NO WARRANTY
259 |
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268 | REPAIR OR CORRECTION.
269 |
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278 | POSSIBILITY OF SUCH DAMAGES.
279 |
280 | END OF TERMS AND CONDITIONS
281 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Startup-Watcher
2 |
3 | Watch services and startup applications on linux and notify when change occur (this is an initial version, changes will be made from time to time, any pr is more than welcome)
4 |
5 | **Features**
6 |
7 | - Watch for changes on 32 locations
8 | - Notify when change occur
9 | - Save change to /home/../.startup-watcher/changes
10 | - Start hidden on the tray
11 | - Root not required
12 | - Watch root and user
13 | - And much more.
14 |
15 | **Usage**
16 |
17 | Download the release binary then
18 |
19 | ```
20 | ./startupwatcher
21 | ```
22 |
23 | **Contribute**
24 |
25 | Just install `lazarus` and open the project.
26 |
27 | **Require**
28 |
29 | Bash, cat, diff
30 |
31 | **Capture**
32 |
33 | 
34 |
35 | 
36 |
37 | 
38 |
39 |
--------------------------------------------------------------------------------
/captures/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/captures/1.png
--------------------------------------------------------------------------------
/captures/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/captures/2.png
--------------------------------------------------------------------------------
/captures/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/captures/3.png
--------------------------------------------------------------------------------
/desktop/startup-watcher.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Name=Startup-Watcher
3 | Type=Application
4 | Terminal=false
5 | Exec=startupwatcher
6 | Icon=cs-startup-programs
7 | Comment=Watch changes on services and start up application
8 | Encoding=UTF-8
9 | Categories=GNOME;GTK;Network;Settings;
10 |
--------------------------------------------------------------------------------
/startupwatcher.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/startupwatcher.ico
--------------------------------------------------------------------------------
/startupwatcher.lpi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
--------------------------------------------------------------------------------
/startupwatcher.lpr:
--------------------------------------------------------------------------------
1 | program startupwatcher;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | uses
6 | {$IFDEF UNIX}{$IFDEF UseCThreads}
7 | cthreads,
8 | {$ENDIF}{$ENDIF}
9 | Interfaces, // this includes the LCL widgetset
10 | Forms, Unit1, Unit2
11 | { you can add units after this };
12 |
13 | {$R *.res}
14 |
15 | begin
16 | Application.Title:='Startup-Watcher';
17 | RequireDerivedFormResource := True;
18 | Application.Initialize;
19 | Application.CreateForm(TForm1, Form1);
20 | Application.ShowMainForm:=false;
21 | Application.CreateForm(TForm2, Form2);
22 | Application.Run;
23 | end.
24 |
25 |
--------------------------------------------------------------------------------
/startupwatcher.lps:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/startupwatcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/startupwatcher.png
--------------------------------------------------------------------------------
/startupwatcher.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Intika-Linux-Apps/Startup-Watcher/6d0a597322f5873405dc65931044c384dcb35f5d/startupwatcher.res
--------------------------------------------------------------------------------
/startupwatcher.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/unit1.lfm:
--------------------------------------------------------------------------------
1 | object Form1: TForm1
2 | Left = 12
3 | Height = 626
4 | Top = 53
5 | Width = 1086
6 | Caption = 'Startup Watcher'
7 | ClientHeight = 603
8 | ClientWidth = 1086
9 | Constraints.MaxHeight = 626
10 | Constraints.MaxWidth = 1190
11 | Constraints.MinHeight = 626
12 | Constraints.MinWidth = 1086
13 | Font.Name = 'Liberation Mono'
14 | Menu = MainMenu1
15 | OnActivate = FormActivate
16 | OnCloseQuery = FormCloseQuery
17 | OnCreate = FormCreate
18 | Position = poDesktopCenter
19 | LCLVersion = '1.2.4.0'
20 | object Button1: TButton
21 | Left = 1088
22 | Height = 25
23 | Top = 5
24 | Width = 97
25 | Caption = 'Refresh All'
26 | Font.Height = 11
27 | Font.Name = 'Liberation Mono'
28 | OnClick = Button1Click
29 | ParentFont = False
30 | TabOrder = 0
31 | end
32 | object TabControl1: TTabControl
33 | Left = 8
34 | Height = 592
35 | Top = 9
36 | Width = 1073
37 | OnChange = TabControl1Change
38 | TabPosition = tpLeft
39 | TabWidth = 181
40 | TabIndex = 29
41 | Tabs.Strings = (
42 | 'Systemd-Services Root'
43 | 'Systemd-Timers x Root'
44 | 'Systemd-Init.d Root'
45 | 'Cron-Scheduler Root'
46 | 'DBus-Services Root'
47 | 'XDG-Autostart Root'
48 | 'XDG-Openbox Root'
49 | 'X11-Xinitrc Root'
50 | 'Udev-Rules Root'
51 | 'ETC-Profile.d Root'
52 | 'ETC-Profile Root'
53 | 'RC.D-RC.Local Root'
54 | 'RC.Local Root'
55 | 'Xsession-LightDM Root'
56 | 'Xsession-LXDM Root'
57 | 'Xsession-SDDM Root'
58 | 'Xsession-GDM Root'
59 | 'Systemd-Services User'
60 | 'Systemd-Timers x User'
61 | 'Cron-Scheduler User'
62 | 'XDG-Openbox User'
63 | 'X11-Xinitrc x User'
64 | 'KDE-Environment User'
65 | 'KDE-Autostart User'
66 | 'KDE-Shutdown User'
67 | 'Xsession User'
68 | 'Xprofile User'
69 | 'Autostart-sh User'
70 | 'Autostart User'
71 | 'Fluxbox-Startup x User'
72 | 'Aws-Autorun.sh x User'
73 | 'Wine x User'
74 | )
75 | Font.Height = 12
76 | Font.Name = 'Liberation Mono'
77 | Font.Pitch = fpFixed
78 | Font.Quality = fqAntialiased
79 | ParentBiDiMode = False
80 | ParentFont = False
81 | TabOrder = 1
82 | object Label2: TLabel
83 | Left = 187
84 | Height = 14
85 | Top = 405
86 | Width = 602
87 | Caption = 'Changes since last check (removed: <, added: >, history: ~/.startup-watcher/changes/) '
88 | ParentColor = False
89 | end
90 | object Memo1: TMemo
91 | Left = 185
92 | Height = 352
93 | Top = 47
94 | Width = 882
95 | Font.Name = 'Liberation Mono'
96 | ParentFont = False
97 | ScrollBars = ssAutoBoth
98 | TabOrder = 1
99 | end
100 | object Memo2: TMemo
101 | Left = 185
102 | Height = 160
103 | Top = 425
104 | Width = 882
105 | Font.Name = 'Liberation Mono'
106 | Font.Pitch = fpFixed
107 | Font.Quality = fqAntialiased
108 | ParentFont = False
109 | ScrollBars = ssAutoBoth
110 | TabOrder = 2
111 | end
112 | object Edit1: TEdit
113 | Left = 185
114 | Height = 22
115 | Top = 22
116 | Width = 882
117 | TabOrder = 3
118 | end
119 | object Button3: TButton
120 | Left = 863
121 | Height = 23
122 | Top = 400
123 | Width = 100
124 | Caption = 'Reload tab'
125 | OnClick = Button3Click
126 | TabOrder = 4
127 | end
128 | object Button4: TButton
129 | Left = 967
130 | Height = 23
131 | Top = 400
132 | Width = 100
133 | Caption = 'Refresh All'
134 | OnClick = Button4Click
135 | TabOrder = 5
136 | end
137 | end
138 | object Button5: TButton
139 | Left = 1088
140 | Height = 25
141 | Top = 36
142 | Width = 97
143 | Caption = 'To Tray'
144 | Font.Height = 11
145 | Font.Name = 'Liberation Mono'
146 | OnClick = Button5Click
147 | ParentFont = False
148 | TabOrder = 2
149 | end
150 | object GroupBox1: TGroupBox
151 | Left = 8
152 | Height = 25
153 | Top = 1
154 | Width = 1073
155 | ClientHeight = 21
156 | ClientWidth = 1069
157 | TabOrder = 3
158 | object Label1: TLabel
159 | Left = 399
160 | Height = 16
161 | Top = 2
162 | Width = 279
163 | Alignment = taCenter
164 | Caption = 'Startup Watcher - Startup Items'
165 | Font.Height = 15
166 | Font.Name = 'Liberation Mono'
167 | Font.Style = [fsBold]
168 | ParentColor = False
169 | ParentFont = False
170 | end
171 | end
172 | object Button6: TButton
173 | Left = 1088
174 | Height = 25
175 | Top = 68
176 | Width = 97
177 | Caption = 'Quit'
178 | Font.Height = 11
179 | Font.Name = 'Liberation Mono'
180 | OnClick = Button6Click
181 | ParentFont = False
182 | TabOrder = 4
183 | end
184 | object Memo3: TMemo
185 | Left = 1088
186 | Height = 82
187 | Top = 512
188 | Width = 97
189 | TabOrder = 5
190 | Visible = False
191 | end
192 | object TrayIcon1: TTrayIcon
193 | BalloonHint = 'Startup Watcher'
194 | BalloonTitle = 'Startup Watcher'
195 | PopUpMenu = PopupMenu1
196 | Icon.Data = {
197 | 3E42000000000100010040400000010020002842000016000000280000004000
198 | 0000800000000100200000000000004000006400000064000000000000000000
199 | 0000000000000000000000000000000000000000000000000000000000000000
200 | 0000000000000000000000000000000000000000000000000000000000000000
201 | 0000000000000000000000000000000000000000000000000000000000000000
202 | 0000000000000000000000000000000000000000000000000000000000000000
203 | 0000000000000000000000000000000000000000000000000000000000000000
204 | 0000000000000000000000000000000000000000000000000000000000000000
205 | 0000000000000000000000000000000000000000000000000000000000000000
206 | 0000000000000000000000000000000000000000000000000000000000000000
207 | 0000000000000000000000000000000000000000000000000000000000000000
208 | 0000000000000000000000000000000000000000000000000000000000000000
209 | 0000000000000000000000000000000000000000000000000000000000000000
210 | 0000000000000000000000000000000000000000000000000000000000000000
211 | 0000000000000000000000000000000000000000000000000000000000000000
212 | 0000000000000000000000000000000000000000000000000000000000000000
213 | 0000000000000000000000000000000000000000000000000000000000000000
214 | 0000000000000000000000000000000000000000000000000000000000000000
215 | 0000000000000000000000000000000000000000000000000000000000000000
216 | 0000000000000000000000000000000000000000000000000000000000000000
217 | 0000000000000000000000000000000000000000000000000000000000000000
218 | 0000000000000000000000000000000000000000000000000000000000000000
219 | 0000000000000000000000000000000000000000000000000000000000000000
220 | 0000000000000000000000000000000000000000000000000000000000000000
221 | 0000000000000000000000000000000000000000000000000000000000000000
222 | 0000000000000000000000000000000000000000000000000000000000000000
223 | 0000000000000000000000000000000000000000000000000000000000000000
224 | 0000000000000000000000000000000000000000000000000000000000000000
225 | 0000000000000000000000000000000000000000000000000000000000000000
226 | 0000000000010000000B000000170000001F000000260000002C0000002F0000
227 | 0032000000320000002F0000002C000000260000001F000000170000000B0000
228 | 0001000000000000000000000000000000000000000000000000000000000000
229 | 0000000000000000000000000000000000000000000000000000000000000000
230 | 0000000000000000000000000000000000000000000000000000000000000000
231 | 0000000000000000000000000000000000000000000000000000000000000000
232 | 0000000000000000000000000000000000000000000000000000000000000000
233 | 0000000000000000000000000000000000000000000000000001000000100000
234 | 00230505053139393955515151815A5A5AA1616161C3656565DE666666ED6868
235 | 68F9686868F9666666ED656565DE616161C25A5A5AA152525280373737540505
236 | 0531000000220000001000000001000000000000000000000000000000000000
237 | 0000000000000000000000000000000000000000000000000000000000000000
238 | 0000000000000000000000000000000000000000000000000000000000000000
239 | 0000000000000000000000000000000000000000000000000000000000000000
240 | 0000000000000000000000000000000000000000000000000000000000000000
241 | 0000000000000000000000000000000000040000001B0A0A0A33464646665D5D
242 | 5DB0666666EF686868FF686868FF686868FF686868FF686868FF686868FF6868
243 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6767
244 | 67EE5D5D5DAF444444650A0A0A320000001B0000000400000000000000000000
245 | 0000000000000000000000000000000000000000000000000000000000000000
246 | 0000000000000000000000000000000000000000000000000000000000000000
247 | 0000000000000000000000000000000000000000000000000000000000000000
248 | 0000000000000000000000000000000000000000000000000000000000000000
249 | 000000000000000000030000001C1D1D1D3D5656568E676767EB686868FF6868
250 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
251 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
252 | 68FF686868FF686868FF666666EA5656568C1A1A1A3C0000001B000000020000
253 | 0000000000000000000000000000000000000000000000000000000000000000
254 | 0000000000000000000000000000000000000000000000000000000000000000
255 | 0000000000000000000000000000000000000000000000000000000000000000
256 | 0000000000000000000000000000000000000000000000000000000000000000
257 | 0000000000110F0F0F3357575790676767F3686868FF686868FF686868FF6868
258 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
259 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
260 | 68FF686868FF686868FF686868FF686868FF676767F25656568E0F0F0F320000
261 | 0010000000000000000000000000000000000000000000000000000000000000
262 | 0000000000000000000000000000000000000000000000000000000000000000
263 | 0000000000000000000000000000000000000000000000000000000000000000
264 | 0000000000000000000000000000000000000000000000000000000000020000
265 | 001F44444465656565E1686868FF686868FF686868FF686868FF686868FF6868
266 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
267 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
268 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF666666DF4545
269 | 45640000001F0000000200000000000000000000000000000000000000000000
270 | 0000000000000000000000000000000000000000000000000000000000000000
271 | 0000000000000000000000000000000000000000000000000000000000000000
272 | 00000000000000000000000000000000000000000000000000061111112E5959
273 | 599A686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
274 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
275 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
276 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
277 | 68FF5A5A5AA11111112E00000006000000000000000000000000000000000000
278 | 0000000000000000000000000000000000000000000000000000000000000000
279 | 0000000000000000000000000000000000000000000000000000000000000000
280 | 000000000000000000000000000000000000000000092525253E646464CF6868
281 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
282 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
283 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
284 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
285 | 68FF686868FF646464CD2121213D000000080000000000000000000000000000
286 | 0000000000000000000000000000000000000000000000000000000000000000
287 | 0000000000000000000000000000000000000000000000000000000000000000
288 | 0000000000000000000000000000000000092E2E2E43656565DC686868FF6868
289 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
290 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
291 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
292 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
293 | 68FF686868FF686868FF656565E0323232470000000800000000000000000000
294 | 0000000000000000000000000000000000000000000000000000000000000000
295 | 0000000000000000000000000000000000000000000000000000000000000000
296 | 000000000000000000000000000633333346676767E9686868FF686868FF6868
297 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
298 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
299 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
300 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
301 | 68FF686868FF686868FF686868FF676767E93030304500000006000000000000
302 | 0000000000000000000000000000000000000000000000000000000000000000
303 | 0000000000000000000000000000000000000000000000000000000000000000
304 | 000000000000000000022828283A656565E0686868FF686868FF686868FF6868
305 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
306 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
307 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
308 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
309 | 68FF686868FF686868FF686868FF686868FF666666DF28282839000000020000
310 | 0000000000000000000000000000000000000000000000000000000000000000
311 | 0000000000000000000000000000000000000000000000000000000000000000
312 | 00000000000015151525636363D0686868FF686868FF686868FF686868FF6868
313 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
314 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
315 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
316 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
317 | 68FF686868FF686868FF686868FF686868FF686868FF646464CD161616230000
318 | 0000000000000000000000000000000000000000000000000000000000000000
319 | 0000000000000000000000000000000000000000000000000000000000000000
320 | 0000000000115B5B5B9F686868FF686868FF686868FF686868FF686868FF6868
321 | 68FF535353FF545454FF565656FF595959FF5E5E5EFF656565FF686868FF6868
322 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
323 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
324 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
325 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF5A5A5A9B0000
326 | 0010000000000000000000000000000000000000000000000000000000000000
327 | 0000000000000000000000000000000000000000000000000000000000000000
328 | 000348484863686868FF686868FF686868FF686868FF686868FF686868FF6868
329 | 68FFFEFEFEFFF6F6F6FFE5E5E5FFCECECEFFA6A6A6FF6F6F6FFF595959FF6464
330 | 64FF686868FF686868FF686868FF686868FF686868FF616161FF676767FF6868
331 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
332 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
333 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF4848
334 | 4860000000020000000000000000000000000000000000000000000000000000
335 | 0000000000000000000000000000000000000000000000000000000000001E1E
336 | 1E22656565E0686868FF686868FF686868FF686868FF686868FF686868FF6868
337 | 68FFF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFF7272
338 | 72FF616161FF686868FF686868FF686868FF686868FF8E8E8EFF5C5C5CFF6464
339 | 64FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
340 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
341 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6666
342 | 66E21D1D1D230000000000000000000000000000000000000000000000000000
343 | 0000000000000000000000000000000000000000000000000000000000055959
344 | 5990686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
345 | 68FFE8E8E8FFFFFFFFFFABABABFF989898FFA7A7A7FFC8C8C8FFEEEEEEFFF9F9
346 | F9FF8F8F8FFF666666FF686868FF686868FF666666FFF6F6F6FFE4E4E4FF7A7A
347 | 7AFF5D5D5DFF676767FF686868FF686868FF686868FF686868FF686868FF6868
348 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
349 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
350 | 68FF5757578D0000000400000000000000000000000000000000000000000000
351 | 00000000000000000000000000000000000000000000000000002D2D2D286767
352 | 67F3686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
353 | 68FFD3D3D3FFFFFFFFFF919191FF686868FF686868FF686868FF696969FF9696
354 | 96FFE4E4E4FF787878FF686868FF686868FF848484FFFFFFFFFFFFFFFFFFFDFD
355 | FDFFB1B1B1FF676767FF686868FF686868FF686868FF686868FF686868FF6868
356 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
357 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
358 | 68FF676767F42D2D2D2800000000000000000000000000000000000000000000
359 | 00000000000000000000000000000000000000000000000000015959598D6868
360 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
361 | 68FFB2B2B2FFFFFFFFFF9F9F9FFF686868FF686868FF686868FF686868FF6868
362 | 68FF666666FF5D5D5DFF606060FF686868FFADADADFFFFFFFFFFFFFFFFFFFFFF
363 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868
364 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
365 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
366 | 68FF686868FF5959598A00000001000000000000000000000000000000000000
367 | 0000000000000000000000000000000000000000000017171716666666EC6868
368 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
369 | 68FF838383FFFFFFFFFFC1C1C1FF686868FF686868FF686868FF686868FF6464
370 | 64FF656565FFB3B3B3FF929292FF585858FFD9D9D9FFFFFFFFFFFFFFFFFFFFFF
371 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868
372 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
373 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
374 | 68FF686868FF666666EA1A1A1A14000000000000000000000000000000000000
375 | 000000000000000000000000000000000000000000005555555D686868FF6868
376 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
377 | 68FF686868FFD6D6D6FFEAEAEAFF636363FF686868FF686868FF646464FF7777
378 | 77FFEFEFEFFFFFFFFFFFFFFFFFFFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
379 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868
380 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
381 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
382 | 68FF686868FF686868FF5252525A000000000000000000000000000000000000
383 | 00000000000000000000000000000000000000000001606060B2686868FF6868
384 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
385 | 68FF686868FF848484FFF9F9F9FF888888FF686868FF666666FF777777FFF7F7
386 | F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
387 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868
388 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
389 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
390 | 68FF686868FF686868FF5F5F5FAE000000010000000000000000000000000000
391 | 0000000000000000000000000000000000002222220F676767F1686868FF6868
392 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
393 | 68FF686868FF686868FF9A9A9AFFE3E3E3FF686868FF6A6A6AFFEDEDEDFFFFFF
394 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
395 | FFFFFFFFFFFF979797FF686868FF686868FF686868FF686868FF686868FF6868
396 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
397 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
398 | 68FF686868FF686868FF666666EF1414140D0000000000000000000000000000
399 | 00000000000000000000000000000000000054545440686868FF686868FF6868
400 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
401 | 68FF686868FF686868FF686868FF787878FF686868FFB6B6B6FFFFFFFFFFFFFF
402 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
403 | FFFFFFFFFFFF919191FF666666FF686868FF686868FF686868FF686868FF6868
404 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
405 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
406 | 68FF686868FF686868FF686868FF5454543D0000000000000000000000000000
407 | 0000000000000000000000000000000000005E5E5E77686868FF686868FF6868
408 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
409 | 68FF686868FF686868FF686868FF686868FF686868FF9F9F9FFFFFFFFFFFFFFF
410 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
411 | FFFFFFFFFFFFDBDBDBFF666666FF646464FF686868FF686868FF686868FF6868
412 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
413 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
414 | 68FF686868FF686868FF686868FF606060750000000000000000000000000000
415 | 0000000000000000000000000000000000006262629E686868FF686868FF6868
416 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
417 | 68FF686868FF686868FF686868FF636363FF5D5D5DFF5F5F5FFFFEFEFEFFFFFF
418 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
419 | FFFFFFFFFFFFFFFFFFFFEDEDEDFF777777FF616161FF686868FF686868FF6868
420 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
421 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
422 | 68FF686868FF686868FF686868FF6363639B0000000000000000000000000000
423 | 000000000000000000000000000000000000656565C4686868FF686868FF6868
424 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
425 | 68FF686868FF616161FF575757FF7C7C7CFFABABABFFDBDBDBFFFFFFFFFFFFFF
426 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
427 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FF8E8E8EFF5D5D5DFF686868FF6868
428 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
429 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
430 | 68FF686868FF686868FF686868FF646464C10000000000000000000000000000
431 | 000000000000000000000000000000000000666666E0686868FF686868FF6868
432 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
433 | 68FF686868FF9A9A9AFFF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
434 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
435 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFACACACFF5B5B5BFF6767
436 | 67FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
437 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
438 | 68FF686868FF686868FF686868FF676767DF0000000000000000000000000000
439 | 000000000000000000000000000000000000676767ED686868FF686868FF6868
440 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
441 | 68FF686868FF6D6D6DFFE7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
442 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
443 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7FF5D5D
444 | 5DFF666666FF686868FF686868FF686868FF686868FF686868FF686868FF6868
445 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
446 | 68FF686868FF686868FF686868FF676767EB0000000000000000000000000000
447 | 000000000000000000000000000000000000686868F9686868FF686868FF6868
448 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
449 | 68FF686868FF686868FF898989FFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
450 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
451 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9
452 | D9FF636363FF656565FF686868FF686868FF686868FF686868FF686868FF6868
453 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
454 | 68FF686868FF686868FF686868FF686868F80000000000000000000000000000
455 | 000000000000000000000000000000000000696969F9686868FF686868FF6868
456 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
457 | 68FF686868FF686868FF686868FFBABABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
458 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
459 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
460 | FFFFE7E7E7FF6D6D6DFF646464FF686868FF686868FF686868FF686868FF6868
461 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
462 | 68FF686868FF686868FF686868FF696969F80000000000000000000000000000
463 | 000000000000000000000000000000000000696969ED686868FF686868FF6868
464 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
465 | 68FF686868FF686868FF686868FF6D6D6DFF9A9A9AFF9A9A9AFF9A9A9AFF9A9A
466 | 9AFF9A9A9AFF9C9C9CFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
467 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
468 | FFFFFFFFFFFFEEEEEEFF757575FF656565FF686868FF686868FF686868FF6868
469 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
470 | 68FF686868FF686868FF686868FF696969EB0000000000000000000000000000
471 | 0000000000000000000000000000000000006A6A6ADF686868FF686868FF6868
472 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
473 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
474 | 68FF686868FF686868FF858585FFF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
475 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
476 | FFFFFFFFFFFFFFFFFFFFF4F4F4FF6F6F6FFF676767FF686868FF686868FF6868
477 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
478 | 68FF686868FF686868FF686868FF6B6B6BDE0000000000000000000000000000
479 | 0000000000000000000000000000000000006C6C6CC4686868FF686868FF6868
480 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
481 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
482 | 68FF686868FF686868FF686868FF999999FFFEFEFEFFFFFFFFFFFFFFFFFFFFFF
483 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
484 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5FF656565FF686868FF686868FF6868
485 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
486 | 68FF686868FF686868FF686868FF6B6B6BC10000000000000000000000000000
487 | 0000000000000000000000000000000000006E6E6E9E686868FF686868FF6868
488 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
489 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
490 | 68FF686868FF686868FF686868FF686868FFB1B1B1FFFFFFFFFFFFFFFFFFFFFF
491 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3FF9B9B9BFF717171FF8686
492 | 86FFDCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7FF626262FF686868FF6868
493 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
494 | 68FF686868FF686868FF686868FF6D6D6D9B0000000000000000000000000000
495 | 00000000000000000000000000000000000070707076686868FF686868FF6868
496 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
497 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
498 | 68FF686868FF686868FF686868FF686868FF696969FFC8C8C8FFFFFFFFFFFFFF
499 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9AFF686868FF686868FF6868
500 | 68FF737373FFF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFF898989FF686868FF6868
501 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
502 | 68FF686868FF686868FF686868FF707070740000000000000000000000000000
503 | 0000000000000000000000000000000000007575753D696969FF686868FF6868
504 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
505 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
506 | 68FF686868FF686868FF686868FF686868FF686868FF6D6D6DFFDBDBDBFFFFFF
507 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D6D6DFF686868FF686868FF6868
508 | 68FF686868FFD0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9FF636363FF6868
509 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
510 | 68FF686868FF686868FF696969FF767676380000000000000000000000000000
511 | 000000000000000000000000000000000000999999056C6C6CF1686868FF6868
512 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
513 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
514 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF717171FFE3E3
515 | E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777FF676767FF686868FF6868
516 | 68FF5F5F5FFFE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8EFF6868
517 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
518 | 68FF686868FF686868FF6C6C6CEF555555030000000000000000000000000000
519 | 000000000000000000000000000000000000000000006F6F6FB1686868FF6868
520 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
521 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
522 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF7777
523 | 77FFEBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6FF606060FF595959FF5757
524 | 57FFA7A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCBFF6767
525 | 67FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
526 | 68FF686868FF686868FF707070AD000000000000000000000000000000000000
527 | 0000000000000000000000000000000000000000000075757557696969FF6868
528 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
529 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
530 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
531 | 68FF7E7E7EFFF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2FFCFCFCFFFE5E5
532 | E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FF6A6A
533 | 6AFF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
534 | 68FF686868FF696969FF76767654000000000000000000000000000000000000
535 | 000000000000000000000000000000000000000000006D6D6D076E6E6EED6868
536 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
537 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
538 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
539 | 68FF686868FF868686FFF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
540 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8888
541 | 88FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
542 | 68FF686868FF6F6F6FEC6D6D6D07000000000000000000000000000000000000
543 | 00000000000000000000000000000000000000000000000000007474748B6969
544 | 69FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
545 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
546 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
547 | 68FF686868FF686868FF7D7D7DFFE7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
548 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A7
549 | A7FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
550 | 68FF696969FF7676768600000000000000000000000000000000000000000000
551 | 0000000000000000000000000000000000000000000000000000797979156F6F
552 | 6FF4686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
553 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
554 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
555 | 68FF686868FF686868FF686868FF717171FFCACACAFFFEFEFEFFFFFFFFFFFFFF
556 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8
557 | C8FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
558 | 68FF707070F47474741600000000000000000000000000000000000000000000
559 | 0000000000000000000000000000000000000000000000000000000000007575
560 | 758E6A6A6AFF686868FF686868FF686868FF686868FF686868FF686868FF6868
561 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
562 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
563 | 68FF686868FF686868FF686868FF686868FF686868FF8A8A8AFFDCDCDCFFFFFF
564 | FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1
565 | E1FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6A6A
566 | 6AFF7676768A0000000000000000000000000000000000000000000000000000
567 | 0000000000000000000000000000000000000000000000000000000000007474
568 | 740B727272E1686868FF686868FF686868FF686868FF686868FF686868FF6868
569 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
570 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
571 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF8989
572 | 89FFC7C7C7FFF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1
573 | F1FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF7373
574 | 73E36A6A6A0C0000000000000000000000000000000000000000000000000000
575 | 0000000000000000000000000000000000000000000000000000000000000000
576 | 0000787878576E6E6EFF686868FF686868FF686868FF686868FF686868FF6868
577 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
578 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
579 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
580 | 68FF686868FF6C6C6CFF8B8B8BFFABABABFFCCCCCCFFE4E4E4FFF3F3F3FFFDFD
581 | FDFF686868FF686868FF686868FF686868FF686868FF686868FF6E6E6EFF7878
582 | 7853000000000000000000000000000000000000000000000000000000000000
583 | 0000000000000000000000000000000000000000000000000000000000000000
584 | 0000000000007575759F6B6B6BFF686868FF686868FF686868FF686868FF6868
585 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
586 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
587 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
588 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
589 | 68FF686868FF686868FF686868FF686868FF686868FF6B6B6BFF7676769A0000
590 | 0000000000000000000000000000000000000000000000000000000000000000
591 | 0000000000000000000000000000000000000000000000000000000000000000
592 | 00000000000071717109757575D36A6A6AFF686868FF686868FF686868FF6868
593 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
594 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
595 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
596 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
597 | 68FF686868FF686868FF686868FF686868FF6A6A6AFF757575D1808080080000
598 | 0000000000000000000000000000000000000000000000000000000000000000
599 | 0000000000000000000000000000000000000000000000000000000000000000
600 | 000000000000000000007777771E757575E1696969FF686868FF686868FF6868
601 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
602 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
603 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
604 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
605 | 68FF686868FF686868FF686868FF696969FF757575E578787820000000000000
606 | 0000000000000000000000000000000000000000000000000000000000000000
607 | 0000000000000000000000000000000000000000000000000000000000000000
608 | 00000000000000000000000000007A7A7A2C757575EC6A6A6AFF686868FF6868
609 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
610 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
611 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
612 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
613 | 68FF686868FF686868FF6A6A6AFF757575EB7676762900000000000000000000
614 | 0000000000000000000000000000000000000000000000000000000000000000
615 | 0000000000000000000000000000000000000000000000000000000000000000
616 | 0000000000000000000000000000000000007C7C7C27767676DF6A6A6AFF6868
617 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
618 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
619 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
620 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
621 | 68FF686868FF6A6A6AFF757575E27979792A0000000000000000000000000000
622 | 0000000000000000000000000000000000000000000000000000000000000000
623 | 0000000000000000000000000000000000000000000000000000000000000000
624 | 000000000000000000000000000000000000000000007373731F767676D46E6E
625 | 6EFF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
626 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
627 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
628 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
629 | 68FF6E6E6EFF767676D27B7B7B1D000000000000000000000000000000000000
630 | 0000000000000000000000000000000000000000000000000000000000000000
631 | 0000000000000000000000000000000000000000000000000000000000000000
632 | 0000000000000000000000000000000000000000000000000000717171097777
633 | 7798727272FF6A6A6AFF686868FF686868FF686868FF686868FF686868FF6868
634 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
635 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
636 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF6A6A6AFF7272
637 | 72FF767676A87474740B00000000000000000000000000000000000000000000
638 | 0000000000000000000000000000000000000000000000000000000000000000
639 | 0000000000000000000000000000000000000000000000000000000000000000
640 | 0000000000000000000000000000000000000000000000000000000000000000
641 | 00007A7A7A56767676E56F6F6FFF696969FF686868FF686868FF686868FF6868
642 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
643 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
644 | 68FF686868FF686868FF686868FF686868FF696969FF6F6F6FFF777777E47878
645 | 7855000000000000000000000000000000000000000000000000000000000000
646 | 0000000000000000000000000000000000000000000000000000000000000000
647 | 0000000000000000000000000000000000000000000000000000000000000000
648 | 0000000000000000000000000000000000000000000000000000000000000000
649 | 0000000000007676760D7676768F777777F56F6F6FFF696969FF686868FF6868
650 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
651 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6868
652 | 68FF686868FF686868FF696969FF6F6F6FFF777777F57777778D6A6A6A0C0000
653 | 0000000000000000000000000000000000000000000000000000000000000000
654 | 0000000000000000000000000000000000000000000000000000000000000000
655 | 0000000000000000000000000000000000000000000000000000000000000000
656 | 0000000000000000000000000000000000000000000000000000000000000000
657 | 00000000000000000000000000007A7A7A177777778B777777EE727272FF6D6D
658 | 6DFF696969FF686868FF686868FF686868FF686868FF686868FF686868FF6868
659 | 68FF686868FF686868FF686868FF686868FF686868FF686868FF686868FF6969
660 | 69FF6D6D6DFF737373FF777777EE7676768A7474741600000000000000000000
661 | 0000000000000000000000000000000000000000000000000000000000000000
662 | 0000000000000000000000000000000000000000000000000000000000000000
663 | 0000000000000000000000000000000000000000000000000000000000000000
664 | 0000000000000000000000000000000000000000000000000000000000000000
665 | 000000000000000000000000000000000000000000006D6D6D07787878577777
666 | 77B4787878F3747474FF707070FF6E6E6EFF6C6C6CFF6A6A6AFF696969FF6969
667 | 69FF696969FF696969FF6A6A6AFF6C6C6CFF6E6E6EFF707070FF747474FF7777
668 | 77F2787878B37A7A7A566D6D6D07000000000000000000000000000000000000
669 | 0000000000000000000000000000000000000000000000000000000000000000
670 | 0000000000000000000000000000000000000000000000000000000000000000
671 | 0000000000000000000000000000000000000000000000000000000000000000
672 | 0000000000000000000000000000000000000000000000000000000000000000
673 | 0000000000000000000000000000000000000000000000000000000000000000
674 | 0000808080047373733C7777777A777777A1777777C7787878E1777777F07777
675 | 77FA777777FA777777F0787878E1777777C7777777A17777777A7373733C8080
676 | 8004000000000000000000000000000000000000000000000000000000000000
677 | 0000000000000000000000000000000000000000000000000000000000000000
678 | 0000000000000000000000000000000000000000000000000000000000000000
679 | 0000000000000000000000000000000000000000000000000000000000000000
680 | 0000000000000000000000000000000000000000000000000000000000000000
681 | 0000000000000000000000000000000000000000000000000000000000000000
682 | 0000000000000000000000000000000000000000000000000000000000000000
683 | 0000000000000000000000000000000000000000000000000000000000000000
684 | 0000000000000000000000000000000000000000000000000000000000000000
685 | 0000000000000000000000000000000000000000000000000000000000000000
686 | 0000000000000000000000000000000000000000000000000000000000000000
687 | 0000000000000000000000000000000000000000000000000000000000000000
688 | 0000000000000000000000000000000000000000000000000000000000000000
689 | 0000000000000000000000000000000000000000000000000000000000000000
690 | 0000000000000000000000000000000000000000000000000000000000000000
691 | 0000000000000000000000000000000000000000000000000000000000000000
692 | 0000000000000000000000000000000000000000000000000000000000000000
693 | 0000000000000000000000000000000000000000000000000000000000000000
694 | 0000000000000000000000000000000000000000000000000000000000000000
695 | 0000000000000000000000000000000000000000000000000000000000000000
696 | 0000000000000000000000000000000000000000000000000000000000000000
697 | 0000000000000000000000000000000000000000000000000000000000000000
698 | 0000000000000000000000000000000000000000000000000000000000000000
699 | 0000000000000000000000000000000000000000000000000000000000000000
700 | 0000000000000000000000000000000000000000000000000000000000000000
701 | 0000000000000000000000000000000000000000000000000000000000000000
702 | 0000000000000000000000000000000000000000000000000000000000000000
703 | 0000000000000000000000000000000000000000000000000000000000000000
704 | 0000000000000000000000000000000000000000000000000000000000000000
705 | 0000000000000000000000000000000000000000000000000000000000000000
706 | 0000000000000000000000000000000000000000000000000000000000000000
707 | 0000000000000000000000000000000000000000000000000000000000000000
708 | 0000000000000000000000000000000000000000000000000000000000000000
709 | 0000000000000000000000000000000000000000000000000000000000000000
710 | 0000000000000000000000000000000000000000000000000000000000000000
711 | 0000000000000000000000000000000000000000000000000000000000000000
712 | 0000000000000000000000000000000000000000000000000000000000000000
713 | 0000000000000000000000000000000000000000000000000000000000000000
714 | 0000000000000000000000000000000000000000000000000000000000000000
715 | 0000000000000000000000000000000000000000000000000000000000000000
716 | 0000000000000000000000000000000000000000000000000000000000000000
717 | 0000000000000000000000000000000000000000000000000000000000000000
718 | 0000000000000000000000000000000000000000000000000000000000000000
719 | 0000000000000000000000000000000000000000000000000000000000000000
720 | 0000000000000000000000000000000000000000000000000000000000000000
721 | 0000000000000000000000000000000000000000000000000000000000000000
722 | 0000000000000000000000000000000000000000000000000000000000000000
723 | 0000000000000000000000000000000000000000000000000000000000000000
724 | 0000000000000000000000000000000000000000000000000000000000000000
725 | 0000000000000000000000000000000000000000000000000000000000000000
726 | 0000000000000000000000000000000000000000000000000000000000000000
727 | 0000
728 | }
729 | Hint = 'Startup Watcher'
730 | Visible = True
731 | OnClick = TrayIcon1Click
732 | left = 1124
733 | top = 300
734 | end
735 | object Timer1: TTimer
736 | Interval = 600000
737 | OnTimer = Timer1Timer
738 | left = 1124
739 | top = 116
740 | end
741 | object PopupMenu1: TPopupMenu
742 | left = 1124
743 | top = 364
744 | object MenuItem1: TMenuItem
745 | Caption = 'Show Startup Watcher'
746 | OnClick = MenuItem1Click
747 | end
748 | object MenuItem4: TMenuItem
749 | Caption = 'Hide Startup Watcher'
750 | OnClick = MenuItem4Click
751 | end
752 | object MenuItem6: TMenuItem
753 | Caption = '-'
754 | end
755 | object MenuItem10: TMenuItem
756 | Caption = 'Disable Watcher'
757 | OnClick = MenuItem10Click
758 | end
759 | object MenuItem5: TMenuItem
760 | Caption = 'Refresh All'
761 | OnClick = MenuItem5Click
762 | end
763 | object MenuItem8: TMenuItem
764 | Caption = '-'
765 | end
766 | object MenuItem2: TMenuItem
767 | Caption = 'Disable Tray Icon'
768 | OnClick = MenuItem2Click
769 | end
770 | object MenuItem7: TMenuItem
771 | Caption = '-'
772 | end
773 | object MenuItem3: TMenuItem
774 | Caption = 'Quit'
775 | OnClick = MenuItem3Click
776 | end
777 | end
778 | object MainMenu1: TMainMenu
779 | left = 1124
780 | top = 420
781 | object MenuItem9: TMenuItem
782 | Caption = 'Action'
783 | object MenuItem13: TMenuItem
784 | Caption = 'Refresh all items'
785 | OnClick = MenuItem13Click
786 | end
787 | object MenuItem18: TMenuItem
788 | Caption = '-'
789 | end
790 | object MenuItem15: TMenuItem
791 | Caption = 'Close to tray'
792 | OnClick = MenuItem15Click
793 | end
794 | object MenuItem16: TMenuItem
795 | Caption = 'Disable tray'
796 | OnClick = MenuItem16Click
797 | end
798 | object MenuItem17: TMenuItem
799 | Caption = '-'
800 | end
801 | object MenuItem14: TMenuItem
802 | Caption = 'Quit'
803 | OnClick = MenuItem14Click
804 | end
805 | end
806 | object MenuItem11: TMenuItem
807 | Caption = 'Help'
808 | object MenuItem12: TMenuItem
809 | Caption = 'About'
810 | OnClick = MenuItem12Click
811 | end
812 | end
813 | end
814 | object Timer2: TTimer
815 | Enabled = False
816 | Interval = 8000
817 | OnTimer = Timer2Timer
818 | left = 1124
819 | top = 172
820 | end
821 | object Timer3: TTimer
822 | Enabled = False
823 | Interval = 8000
824 | OnTimer = Timer3Timer
825 | left = 1124
826 | top = 236
827 | end
828 | end
829 |
--------------------------------------------------------------------------------
/unit1.pas:
--------------------------------------------------------------------------------
1 | unit Unit1;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | interface
6 |
7 | uses
8 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
9 | StdCtrls, ComCtrls, Menus;
10 |
11 | type
12 |
13 | { TForm1 }
14 |
15 | TForm1 = class(TForm)
16 | Button1: TButton;
17 | Button3: TButton;
18 | Button4: TButton;
19 | Button5: TButton;
20 | Button6: TButton;
21 | Edit1: TEdit;
22 | GroupBox1: TGroupBox;
23 | Label1: TLabel;
24 | Label2: TLabel;
25 | MainMenu1: TMainMenu;
26 | Memo1: TMemo;
27 | Memo2: TMemo;
28 | Memo3: TMemo;
29 | MenuItem1: TMenuItem;
30 | MenuItem10: TMenuItem;
31 | MenuItem11: TMenuItem;
32 | MenuItem12: TMenuItem;
33 | MenuItem13: TMenuItem;
34 | MenuItem14: TMenuItem;
35 | MenuItem15: TMenuItem;
36 | MenuItem16: TMenuItem;
37 | MenuItem17: TMenuItem;
38 | MenuItem18: TMenuItem;
39 | MenuItem2: TMenuItem;
40 | MenuItem3: TMenuItem;
41 | MenuItem4: TMenuItem;
42 | MenuItem5: TMenuItem;
43 | MenuItem6: TMenuItem;
44 | MenuItem7: TMenuItem;
45 | MenuItem8: TMenuItem;
46 | MenuItem9: TMenuItem;
47 | PopupMenu1: TPopupMenu;
48 | TabControl1: TTabControl;
49 | Timer1: TTimer;
50 | Timer2: TTimer;
51 | Timer3: TTimer;
52 | TrayIcon1: TTrayIcon;
53 | procedure Button1Click(Sender: TObject);
54 | procedure Button3Click(Sender: TObject);
55 | procedure Button4Click(Sender: TObject);
56 | procedure Button5Click(Sender: TObject);
57 | procedure Button6Click(Sender: TObject);
58 | procedure FormActivate(Sender: TObject);
59 | procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
60 | procedure FormCreate(Sender: TObject);
61 | procedure MenuItem10Click(Sender: TObject);
62 | procedure MenuItem12Click(Sender: TObject);
63 | procedure MenuItem13Click(Sender: TObject);
64 | procedure MenuItem14Click(Sender: TObject);
65 | procedure MenuItem15Click(Sender: TObject);
66 | procedure MenuItem16Click(Sender: TObject);
67 | procedure MenuItem1Click(Sender: TObject);
68 | procedure MenuItem2Click(Sender: TObject);
69 | procedure MenuItem3Click(Sender: TObject);
70 | procedure MenuItem4Click(Sender: TObject);
71 | procedure MenuItem5Click(Sender: TObject);
72 | procedure TabControl1Change(Sender: TObject);
73 | procedure Timer1Timer(Sender: TObject);
74 | procedure Timer2Timer(Sender: TObject);
75 | procedure Timer3Timer(Sender: TObject);
76 | procedure TrayIcon1Click(Sender: TObject);
77 | private
78 | { private declarations }
79 | public
80 | { public declarations }
81 | var tab0 : string;
82 | var dif0 : string;
83 | var tab1 : string;
84 | var dif1 : string;
85 | var tab2 : string;
86 | var dif2 : string;
87 | var tab3 : string;
88 | var dif3 : string;
89 | var tab4 : string;
90 | var dif4 : string;
91 | var tab5 : string;
92 | var dif5 : string;
93 | var tab6 : string;
94 | var dif6 : string;
95 | var tab7 : string;
96 | var dif7 : string;
97 | var tab8 : string;
98 | var dif8 : string;
99 | var tab9 : string;
100 | var dif9 : string;
101 | var tab10 : string;
102 | var dif10 : string;
103 | var tab11 : string;
104 | var dif11 : string;
105 | var tab12 : string;
106 | var dif12 : string;
107 | var tab13 : string;
108 | var dif13 : string;
109 | var tab14 : string;
110 | var dif14 : string;
111 | var tab15 : string;
112 | var dif15 : string;
113 | var tab16 : string;
114 | var dif16 : string;
115 | var tab17 : string;
116 | var dif17 : string;
117 | var tab18 : string;
118 | var dif18 : string;
119 | var tab19 : string;
120 | var dif19 : string;
121 | var tab20 : string;
122 | var dif20 : string;
123 | var tab21 : string;
124 | var dif21 : string;
125 | var tab22 : string;
126 | var dif22 : string;
127 | var tab23 : string;
128 | var dif23 : string;
129 | var tab24 : string;
130 | var dif24 : string;
131 | var tab25 : string;
132 | var dif25 : string;
133 | var tab26 : string;
134 | var dif26 : string;
135 | var tab27 : string;
136 | var dif27 : string;
137 | var tab28 : string;
138 | var dif28 : string;
139 | var tab29 : string;
140 | var dif29 : string;
141 | var tab30 : string;
142 | var dif30 : string;
143 | var tab31 : string;
144 | var dif31 : string;
145 | var homeDir : string;
146 | var moveScript : string;
147 | var updateScript : string;
148 | var diffCompare : string;
149 | var changesDetected: boolean;
150 | var changesDetectedIndex: integer;
151 |
152 | end;
153 |
154 | var
155 | Form1: TForm1;
156 |
157 | implementation
158 | uses
159 | Unit2;
160 |
161 | {$R *.lfm}
162 |
163 | { TForm1 }
164 |
165 | procedure TForm1.FormCreate(Sender: TObject);
166 | // -------------------------------------------------------------------------------------
167 | // Initializing The Application At Startup
168 | begin
169 |
170 | // -----------------------------------------------------------------------------------
171 | // Init Variables
172 |
173 | changesDetected:=false;
174 | changesDetectedIndex:=0;
175 | tab0:='Refresh needed';
176 | tab1:='Refresh needed';
177 | tab2:='Refresh needed';
178 | tab3:='Refresh needed';
179 | tab4:='Refresh needed';
180 | tab5:='Refresh needed';
181 | tab6:='Refresh needed';
182 | tab8:='Refresh needed';
183 | tab9:='Refresh needed';
184 | tab10:='Refresh needed';
185 | tab11:='Refresh needed';
186 | tab12:='Refresh needed';
187 | tab13:='Refresh needed';
188 | tab14:='Refresh needed';
189 | tab15:='Refresh needed';
190 | tab16:='Refresh needed';
191 | tab17:='Refresh needed';
192 | tab18:='Refresh needed';
193 | tab19:='Refresh needed';
194 | tab20:='Refresh needed';
195 | tab21:='Refresh needed';
196 | tab22:='Refresh needed';
197 | tab23:='Refresh needed';
198 | tab24:='Refresh needed';
199 | tab25:='Refresh needed';
200 | tab26:='Refresh needed';
201 | tab27:='Refresh needed';
202 | tab28:='Refresh needed';
203 | tab29:='Refresh needed';
204 | tab30:='Refresh needed';
205 | tab31:='Refresh needed';
206 |
207 | // -----------------------------------------------------------------------------------
208 | // Get User Dir
209 |
210 | homeDir:=GetUserDir();
211 |
212 | // -----------------------------------------------------------------------------------
213 | // Check/create application directories/datas
214 |
215 | If Not DirectoryExists(homeDir +'.startup-watcher') then
216 | If Not CreateDir (homeDir + '.startup-watcher') Then
217 | Writeln ('Startup-watcher: failed to create config directory ' +homeDir + '.startup-watcher/ !')
218 | else
219 | Writeln ('Startup-watcher: created config directory ' +homeDir + '.startup-watcher/ directory');
220 |
221 | If Not DirectoryExists(homeDir +'.startup-watcher/backup') then
222 | If Not CreateDir (homeDir + '/.startup-watcher/backup') Then
223 | Writeln ('Startup-watcher: failed to create backup directory ' +homeDir + '.startup-watcher/backup/ !')
224 | else
225 | Writeln ('Startup-watcher: created backup directory ' +homeDir + '.startup-watcher/backup/ directory');
226 |
227 | If Not DirectoryExists(homeDir +'.startup-watcher/changes') then
228 | If Not CreateDir (homeDir + '/.startup-watcher/changes') Then
229 | Writeln ('Startup-watcher: failed to create changes directory ' +homeDir + '.startup-watcher/changes/ !')
230 | else
231 | Writeln ('Startup-watcher: created changes directory ' +homeDir + '.startup-watcher/changes/ directory');
232 |
233 | // -----------------------------------------------------------------------------------
234 | // Initialize update script variable
235 |
236 | updateScript:='';
237 |
238 | //0 Systemd-Services Root systemctl list-unit-files; systemctl -l --type service --all
239 | updateScript:=updateScript +'/bin/systemctl list-unit-files | sort > ';
240 | updateScript:=updateScript +homeDir + '.startup-watcher/up0 2>> '+homeDir +'.startup-watcher/up0 &';
241 |
242 | //1 Systemd-Timers x Root already watched in services (systemctl list-timers --all)
243 | //updateScript:=updateScript +' > ';
244 | //updateScript:=updateScript +homeDir + '.startup-watcher/up1 2>> '+homeDir +'.startup-watcher/up1 &';
245 | //Warning: check other code section if this section is to be re enabled to uncoment related code.
246 | tab1:='Inactive/disabled';
247 |
248 | //2 Systemd-Init.d Root ls -l /etc/init.d/
249 | updateScript:=updateScript +'/bin/ls -l /etc/init.d/ > ';
250 | updateScript:=updateScript +homeDir + '.startup-watcher/up2 2>> '+homeDir +'.startup-watcher/up2 &';
251 |
252 | //3 Cron-Scheduler Root ls -l /etc/cron*; cat /var/spool/cron/*
253 | updateScript:=updateScript +'/bin/ls -l /etc/cron* > ';
254 | updateScript:=updateScript +homeDir + '.startup-watcher/up3 2>> '+homeDir +'.startup-watcher/up3;';
255 | updateScript:=updateScript + '/bin/echo >> ';
256 | updateScript:=updateScript +homeDir + '.startup-watcher/up3;';
257 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
258 | updateScript:=updateScript +homeDir + '.startup-watcher/up3;';
259 | updateScript:=updateScript + '/bin/echo Cat output >> ';
260 | updateScript:=updateScript +homeDir + '.startup-watcher/up3;';
261 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
262 | updateScript:=updateScript +homeDir + '.startup-watcher/up3;';
263 | updateScript:=updateScript +'/bin/cat /var/spool/cron/* >> ';
264 | updateScript:=updateScript +homeDir + '.startup-watcher/up3 2>> '+homeDir +'.startup-watcher/up3 &';
265 |
266 | //4 DBus-Services Root ls -l /usr/share/dbus-1/services/
267 | updateScript:=updateScript +'/bin/ls -l /usr/share/dbus-1/services/ > ';
268 | updateScript:=updateScript +homeDir + '.startup-watcher/up4 2>> '+homeDir +'.startup-watcher/up4 &';
269 |
270 | //5 XDG-Autostart Root ls -l /etc/xdg/autostart/
271 | updateScript:=updateScript +'/bin/ls -l /etc/xdg/autostart/ > ';
272 | updateScript:=updateScript +homeDir + '.startup-watcher/up5 2>> '+homeDir +'.startup-watcher/up5 &';
273 |
274 | //6 XDG-Openbox Root ls -l /etc/xdg/openbox/; cat /etc/xdg/openbox/*
275 | updateScript:=updateScript +'/bin/ls -l /etc/xdg/openbox/ > ';
276 | updateScript:=updateScript +homeDir + '.startup-watcher/up6 2>> '+homeDir +'.startup-watcher/up6;';
277 | updateScript:=updateScript + '/bin/echo >> ';
278 | updateScript:=updateScript +homeDir + '.startup-watcher/up6;';
279 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
280 | updateScript:=updateScript +homeDir + '.startup-watcher/up6;';
281 | updateScript:=updateScript + '/bin/echo Cat output >> ';
282 | updateScript:=updateScript +homeDir + '.startup-watcher/up6;';
283 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
284 | updateScript:=updateScript +homeDir + '.startup-watcher/up6;';
285 | updateScript:=updateScript +'/bin/cat /etc/xdg/openbox/* >> ';
286 | updateScript:=updateScript +homeDir + '.startup-watcher/up6 2>> '+homeDir +'.startup-watcher/up6 &';
287 |
288 | //7 X11-Xinitrc Root cat /etc/X11/xinit/xinitrc
289 | updateScript:=updateScript +'/bin/cat /etc/X11/xinit/xinitrc > ';
290 | updateScript:=updateScript +homeDir + '.startup-watcher/up7 2>> '+homeDir +'.startup-watcher/up7 &';
291 |
292 | //8 Udev-Rules Root ls -l /udev/rules.d/; cat /udev/rules.d/*
293 | updateScript:=updateScript +'/bin/ls -l /etc/udev/rules.d/ > ';
294 | updateScript:=updateScript +homeDir + '.startup-watcher/up8 2>> '+homeDir +'.startup-watcher/up8;';
295 | updateScript:=updateScript + '/bin/echo >> ';
296 | updateScript:=updateScript +homeDir + '.startup-watcher/up8;';
297 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
298 | updateScript:=updateScript +homeDir + '.startup-watcher/up8;';
299 | updateScript:=updateScript + '/bin/echo Cat output >> ';
300 | updateScript:=updateScript +homeDir + '.startup-watcher/up8;';
301 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
302 | updateScript:=updateScript +homeDir + '.startup-watcher/up8;';
303 | updateScript:=updateScript +'/bin/cat /etc/udev/rules.d/* >> ';
304 | updateScript:=updateScript +homeDir + '.startup-watcher/up8 2>> '+homeDir +'.startup-watcher/up8 &';
305 |
306 | //9 ETC-Profile.d Root ls -l /etc/profile.d/; cat /etc/profile.d/* (started with shell)
307 | updateScript:=updateScript +'/bin/ls -l /etc/profile.d/ > ';
308 | updateScript:=updateScript +homeDir + '.startup-watcher/up9 2>> '+homeDir +'.startup-watcher/up9;';
309 | updateScript:=updateScript + '/bin/echo >> ';
310 | updateScript:=updateScript +homeDir + '.startup-watcher/up9;';
311 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
312 | updateScript:=updateScript +homeDir + '.startup-watcher/up9;';
313 | updateScript:=updateScript + '/bin/echo Cat output >> ';
314 | updateScript:=updateScript +homeDir + '.startup-watcher/up9;';
315 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
316 | updateScript:=updateScript +homeDir + '.startup-watcher/up9;';
317 | updateScript:=updateScript +'/bin/cat /etc/profile.d/* >> ';
318 | updateScript:=updateScript +homeDir + '.startup-watcher/up9 2>> '+homeDir +'.startup-watcher/up9 &';
319 |
320 | //10 ETC-Profile Root cat /etc/profile
321 | updateScript:=updateScript +'/bin/cat /etc/profile > ';
322 | updateScript:=updateScript +homeDir + '.startup-watcher/up10 2>> '+homeDir +'.startup-watcher/up10 &';
323 |
324 | //11 RC.D-RC.Local Root cat /etc/rc.d/rc.local
325 | updateScript:=updateScript +'cat /etc/rc.d/rc.local > ';
326 | updateScript:=updateScript +homeDir + '.startup-watcher/up11 2>> '+homeDir +'.startup-watcher/up11 &';
327 |
328 | //12 RC.Local Root cat /etc/rc.local
329 | updateScript:=updateScript +'/bin/cat /etc/rc.local > ';
330 | updateScript:=updateScript +homeDir + '.startup-watcher/up12 2>> '+homeDir +'.startup-watcher/up12 &';
331 |
332 | //13 Xsession-LightDM Root cat /etc/lightdm/Xsession
333 | updateScript:=updateScript +'/bin/cat /etc/lightdm/Xsession > ';
334 | updateScript:=updateScript +homeDir + '.startup-watcher/up13 2>> '+homeDir +'.startup-watcher/up13 &';
335 |
336 | //14 Xsession-LXDM Root cat /etc/lxdm/Xsession
337 | updateScript:=updateScript +'/bin/cat /etc/lxdm/Xsession > ';
338 | updateScript:=updateScript +homeDir + '.startup-watcher/up14 2>> '+homeDir +'.startup-watcher/up14 &';
339 |
340 | //15 Xsession-SDDM Root cat /usr/share/sddm/scripts/Xsession
341 | updateScript:=updateScript +'/bin/cat /usr/share/sddm/scripts/Xsession > ';
342 | updateScript:=updateScript +homeDir + '.startup-watcher/up15 2>> '+homeDir +'.startup-watcher/up15 &';
343 |
344 | //16 Xsession-GDM Root cat /etc/gdm/Xsession
345 | updateScript:=updateScript +'/bin/cat /etc/gdm/Xsession > ';
346 | updateScript:=updateScript +homeDir + '.startup-watcher/up16 2>> '+homeDir +'.startup-watcher/up16 &';
347 |
348 | //17 Systemd-Services User systemctl list-unit-files --user
349 | updateScript:=updateScript +'/bin/systemctl list-unit-files --user | sort > ';
350 | updateScript:=updateScript +homeDir + '.startup-watcher/up17 2>> '+homeDir +'.startup-watcher/up17 &';
351 |
352 | //18 Systemd-Timers x User already watched in services (systemctl list-timers --all --user)
353 | //updateScript:=updateScript +' > ';
354 | //updateScript:=updateScript +homeDir + '.startup-watcher/up18 2>> '+homeDir +'.startup-watcher/up18 &';
355 | tab18:='Inactive/disabled';
356 |
357 | //19 Cron-Scheduler User crontab -l
358 | updateScript:=updateScript +'/bin/crontab -l > ';
359 | updateScript:=updateScript +homeDir + '.startup-watcher/up19 2>> '+homeDir +'.startup-watcher/up19 &';
360 |
361 | //20 XDG-Openbox User ls -l ~/.config/openbox/; cat ~/.config/openbox/* (environment & autostart)
362 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.config/openbox/ > ';
363 | updateScript:=updateScript +homeDir + '.startup-watcher/up20 2>> '+homeDir +'.startup-watcher/up20;';
364 | updateScript:=updateScript + '/bin/echo >> ';
365 | updateScript:=updateScript +homeDir + '.startup-watcher/up20;';
366 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
367 | updateScript:=updateScript +homeDir + '.startup-watcher/up20;';
368 | updateScript:=updateScript + '/bin/echo Cat output >> ';
369 | updateScript:=updateScript +homeDir + '.startup-watcher/up20;';
370 | updateScript:=updateScript + '/bin/echo ------------------------------------------------------ >> ';
371 | updateScript:=updateScript +homeDir + '.startup-watcher/up20;';
372 | updateScript:=updateScript +'/bin/cat ' +homeDir + '.config/openbox/* >> ';
373 | updateScript:=updateScript +homeDir + '.startup-watcher/up20 2>> '+homeDir +'.startup-watcher/up20 &';
374 |
375 | //21 X11-Xinitrc x User not yet implemented (~/.xinitrc)
376 | //updateScript:=updateScript +' > ';
377 | //updateScript:=updateScript +homeDir + '.startup-watcher/up21 2>> '+homeDir +'.startup-watcher/up21 &';
378 | tab21:='Inactive/disabled';
379 |
380 | //22 KDE-Environment User ls -l ~/.config/plasma-workspace/env/
381 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.config/plasma-workspace/env/ > ';
382 | updateScript:=updateScript +homeDir + '.startup-watcher/up22 2>> '+homeDir +'.startup-watcher/up22 &';
383 |
384 | //23 KDE-Autostart User ls -l ~/.kde/Autostart/
385 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.kde/Autostart/ > ';
386 | updateScript:=updateScript +homeDir + '.startup-watcher/up23 2>> '+homeDir +'.startup-watcher/up23 &';
387 |
388 | //24 KDE-Shutdown User ls -l ~/.config/plasma-workspace/shutdown/
389 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.config/plasma-workspace/shutdown/ > ';
390 | updateScript:=updateScript +homeDir + '.startup-watcher/up24 2>> '+homeDir +'.startup-watcher/up24 &';
391 |
392 | //25 Xsession User cat ~/.xsession
393 | updateScript:=updateScript +'/bin/cat ' +homeDir + '.xsession > ';
394 | updateScript:=updateScript +homeDir + '.startup-watcher/up25 2>> '+homeDir +'.startup-watcher/up25 &';
395 |
396 | //26 Xprofile User cat ~/.xprofile
397 | updateScript:=updateScript +'/bin/cat ' +homeDir + '.xprofile > ';
398 | updateScript:=updateScript +homeDir + '.startup-watcher/up26 2>> '+homeDir +'.startup-watcher/up26 &';
399 |
400 | //27 Autostart-sh User ls -l ~/.config/autostart-scripts/
401 | updateScript:=updateScript +'/bin/ls -l ' +homeDir + '.config/autostart-scripts/ > ';
402 | updateScript:=updateScript +homeDir + '.startup-watcher/up27 2>> '+homeDir +'.startup-watcher/up27 &';
403 |
404 | //28 Autostart User ls -l ~/.config/autostart/
405 | updateScript:=updateScript +'/bin/ls -l ' + homeDir + '.config/autostart/ > ';
406 | updateScript:=updateScript +homeDir + '.startup-watcher/up28 2>> '+homeDir +'.startup-watcher/up28 &';
407 |
408 | //29 Fluxbox-Startup x User not yet implemented (~/.fluxbox/startup)
409 | //updateScript:=updateScript +' > ';
410 | //updateScript:=updateScript +homeDir + '.startup-watcher/up29 2>> '+homeDir +'.startup-watcher/up29 &';
411 | tab29:='Inactive/disabled';
412 |
413 | //30 Aws-Autorun.sh x User not yet implemented (~/.config/awesome/autorun.sh)
414 | //updateScript:=updateScript +' > ';
415 | //updateScript:=updateScript +homeDir + '.startup-watcher/up30 2>> '+homeDir +'.startup-watcher/up30 &';
416 | tab30:='Inactive/disabled';
417 |
418 | //31 Wine x User not yet implemented (~/.wine/...)
419 | //updateScript:=updateScript +' > ';
420 | //updateScript:=updateScript +homeDir + '.startup-watcher/up31 2>> '+homeDir +'.startup-watcher/up31 &';
421 | tab31:='Inactive/disabled';
422 |
423 | // -----------------------------------------------------------------------------------
424 | // Initialize move script variable (history)
425 |
426 | moveScript:='';
427 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up0 ' +homeDir + '.startup-watcher/prev0;';
428 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up1 ' +homeDir + '.startup-watcher/prev1;'; //Disabled/inactive
429 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up2 ' +homeDir + '.startup-watcher/prev2;';
430 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up3 ' +homeDir + '.startup-watcher/prev3;';
431 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up4 ' +homeDir + '.startup-watcher/prev4;';
432 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up5 ' +homeDir + '.startup-watcher/prev5;';
433 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up6 ' +homeDir + '.startup-watcher/prev6;';
434 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up7 ' +homeDir + '.startup-watcher/prev7;';
435 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up8 ' +homeDir + '.startup-watcher/prev8;';
436 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up9 ' +homeDir + '.startup-watcher/prev9;';
437 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up10 ' +homeDir + '.startup-watcher/prev10;';
438 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up11 ' +homeDir + '.startup-watcher/prev11;';
439 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up12 ' +homeDir + '.startup-watcher/prev12;';
440 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up13 ' +homeDir + '.startup-watcher/prev13;';
441 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up14 ' +homeDir + '.startup-watcher/prev14;';
442 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up15 ' +homeDir + '.startup-watcher/prev15;';
443 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up16 ' +homeDir + '.startup-watcher/prev16;';
444 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up17 ' +homeDir + '.startup-watcher/prev17;';
445 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up18 ' +homeDir + '.startup-watcher/prev18;'; //Disabled/inactive
446 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up19 ' +homeDir + '.startup-watcher/prev19;';
447 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up20 ' +homeDir + '.startup-watcher/prev20;';
448 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up21 ' +homeDir + '.startup-watcher/prev21;'; //Disabled/inactive
449 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up22 ' +homeDir + '.startup-watcher/prev22;';
450 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up23 ' +homeDir + '.startup-watcher/prev23;';
451 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up24 ' +homeDir + '.startup-watcher/prev24;';
452 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up25 ' +homeDir + '.startup-watcher/prev25;';
453 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up26 ' +homeDir + '.startup-watcher/prev26;';
454 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up27 ' +homeDir + '.startup-watcher/prev27;';
455 | moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up28 ' +homeDir + '.startup-watcher/prev28;';
456 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up29 ' +homeDir + '.startup-watcher/prev29;'; //Disabled/inactive
457 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up30 ' +homeDir + '.startup-watcher/prev30;'; //Disabled/inactive
458 | //moveScript:=moveScript + '/bin/cp -f ' +homeDir + '.startup-watcher/up31 ' +homeDir + '.startup-watcher/prev31;'; //Disabled/inactive
459 |
460 | // -----------------------------------------------------------------------------------
461 | // Initialize diff compare script variable (catch changes)
462 |
463 | diffCompare:='';
464 | //diff <(/bin/cat old) <(/bin/cat new)
465 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev0 | /bin/grep -v NetworkManager.service | /bin/grep -v networkmanager.service) <(/bin/cat ' +homeDir + '.startup-watcher/up0 | /bin/grep -v NetworkManager.service | /bin/grep -v networkmanager.service) > ' +homeDir + '.startup-watcher/diff0;';
466 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev1) <(/bin/cat ' +homeDir + '.startup-watcher/up1) > ' +homeDir + '.startup-watcher/diff1;'; //Disabled/inactive
467 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev2) <(/bin/cat ' +homeDir + '.startup-watcher/up2) > ' +homeDir + '.startup-watcher/diff2;';
468 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev3) <(/bin/cat ' +homeDir + '.startup-watcher/up3) > ' +homeDir + '.startup-watcher/diff3;';
469 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev4) <(/bin/cat ' +homeDir + '.startup-watcher/up4) > ' +homeDir + '.startup-watcher/diff4;';
470 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev5) <(/bin/cat ' +homeDir + '.startup-watcher/up5) > ' +homeDir + '.startup-watcher/diff5;';
471 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev6) <(/bin/cat ' +homeDir + '.startup-watcher/up6) > ' +homeDir + '.startup-watcher/diff6;';
472 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev7) <(/bin/cat ' +homeDir + '.startup-watcher/up7) > ' +homeDir + '.startup-watcher/diff7;';
473 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev8) <(/bin/cat ' +homeDir + '.startup-watcher/up8) > ' +homeDir + '.startup-watcher/diff8;';
474 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev9) <(/bin/cat ' +homeDir + '.startup-watcher/up9) > ' +homeDir + '.startup-watcher/diff9;';
475 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev10) <(/bin/cat ' +homeDir + '.startup-watcher/up10) > ' +homeDir + '.startup-watcher/diff10;';
476 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev11) <(/bin/cat ' +homeDir + '.startup-watcher/up11) > ' +homeDir + '.startup-watcher/diff11;';
477 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev12) <(/bin/cat ' +homeDir + '.startup-watcher/up12) > ' +homeDir + '.startup-watcher/diff12;';
478 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev13) <(/bin/cat ' +homeDir + '.startup-watcher/up13) > ' +homeDir + '.startup-watcher/diff13;';
479 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev14) <(/bin/cat ' +homeDir + '.startup-watcher/up14) > ' +homeDir + '.startup-watcher/diff14;';
480 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev15) <(/bin/cat ' +homeDir + '.startup-watcher/up15) > ' +homeDir + '.startup-watcher/diff15;';
481 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev16) <(/bin/cat ' +homeDir + '.startup-watcher/up16) > ' +homeDir + '.startup-watcher/diff16;';
482 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev17) <(/bin/cat ' +homeDir + '.startup-watcher/up17) > ' +homeDir + '.startup-watcher/diff17;';
483 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev18) <(/bin/cat ' +homeDir + '.startup-watcher/up18) > ' +homeDir + '.startup-watcher/diff18;'; //Disabled/inactive
484 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev19) <(/bin/cat ' +homeDir + '.startup-watcher/up19) > ' +homeDir + '.startup-watcher/diff19;';
485 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev20) <(/bin/cat ' +homeDir + '.startup-watcher/up20) > ' +homeDir + '.startup-watcher/diff20;';
486 | //diffCompare:=diffCompare + + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev21) <(/bin/cat ' +homeDir + '.startup-watcher/up21) > ' +homeDir + '.startup-watcher/diff21;'; //Disabled/inactive
487 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev22) <(/bin/cat ' +homeDir + '.startup-watcher/up22) > ' +homeDir + '.startup-watcher/diff22;';
488 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev23) <(/bin/cat ' +homeDir + '.startup-watcher/up23) > ' +homeDir + '.startup-watcher/diff23;';
489 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev24) <(/bin/cat ' +homeDir + '.startup-watcher/up24) > ' +homeDir + '.startup-watcher/diff24;';
490 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev25) <(/bin/cat ' +homeDir + '.startup-watcher/up25) > ' +homeDir + '.startup-watcher/diff25;';
491 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev26) <(/bin/cat ' +homeDir + '.startup-watcher/up26) > ' +homeDir + '.startup-watcher/diff26;';
492 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev27) <(/bin/cat ' +homeDir + '.startup-watcher/up27) > ' +homeDir + '.startup-watcher/diff27;';
493 | diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev28) <(/bin/cat ' +homeDir + '.startup-watcher/up28) > ' +homeDir + '.startup-watcher/diff28;';
494 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev29) <(/bin/cat ' +homeDir + '.startup-watcher/up29) > ' +homeDir + '.startup-watcher/diff29;'; //Disabled/inactive
495 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev30) <(/bin/cat ' +homeDir + '.startup-watcher/up30) > ' +homeDir + '.startup-watcher/diff30;'; //Disabled/inactive
496 | //diffCompare:=diffCompare + '/usr/bin/diff <(/bin/cat ' +homeDir + '.startup-watcher/prev31) <(/bin/cat ' +homeDir + '.startup-watcher/up31) > ' +homeDir + '.startup-watcher/diff31;'; //Disabled/inactive
497 |
498 | // -----------------------------------------------------------------------------------
499 | // Backup old files (last run)
500 |
501 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "/bin/cp -f ' + homeDir + '.startup-watcher/dif* ' + homeDir + '.startup-watcher/backup/"', []);
502 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "/bin/cp -f ' + homeDir + '.startup-watcher/up* ' + homeDir + '.startup-watcher/backup/"', []);
503 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "/bin/cp -f ' + homeDir + '.startup-watcher/prev* ' + homeDir + '.startup-watcher/backup/"', []);
504 |
505 | // -----------------------------------------------------------------------------------
506 | // Archive old scan and perform a new one
507 |
508 | if (FileExists(homeDir + '/.startup-watcher/up0') and FileExists(homeDir + '.startup-watcher/up2')) then
509 | begin
510 | Writeln ('Startup-watcher: archiving previous scan from ' +homeDir + '.startup-watcher/*');
511 | Timer1.OnTimer(Self);
512 | end else
513 | begin
514 | Writeln ('Startup-watcher: unable to find previous scan on ' +homeDir + '.startup-watcher/*, running new scan');
515 | //Showmessage(updateScript);
516 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + updateScript + '"', []);
517 | Timer2.Enabled:=True;
518 | end;
519 |
520 | end;
521 |
522 | procedure TForm1.Timer2Timer(Sender: TObject);
523 | begin
524 | //Timer2: 8 sec: disabled by default: wait for update (scan) to occur then move (backup), only used when there is no update (scan)
525 | //Showmessage(moveScript);
526 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + moveScript + '"', []);
527 | Timer2.Enabled:=False;
528 | Timer1.Enabled:=True;
529 | end;
530 |
531 | procedure TForm1.Timer1Timer(Sender: TObject);
532 | begin
533 | //Timer1: 600 sec: enabled by default: move (backup), update (scan), run timer3
534 | Label1.Caption:='Startup Watcher - Scanning...';
535 | Writeln ('Startup-watcher: scanning start up locations for changes ' +homeDir + '.startup-watcher/*');
536 | if (changesDetected = False) then //run new scan only if no changes detected lastly to avoid undetected multiple changes
537 | begin
538 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + moveScript + '"', []);
539 | SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + updateScript + '"', []);
540 | end;
541 | Timer3.Enabled:=true;
542 | end;
543 |
544 | procedure TForm1.Timer3Timer(Sender: TObject);
545 | //Timer3: 8 sec: disaled by default: compare (diffCompare) data after update (scan) and move (backup)
546 | var i: Integer;
547 | var fileNameDiff, fileNameUp, fileNamePrev : String;
548 | begin
549 | //Showmessage(diffCompare);
550 | //Diff compare only if no change detected lastly
551 | if (changesDetected = False) then SysUtils.ExecuteProcess(UTF8ToSys('/bin/bash'), ' -c "' + diffCompare + '"', []);
552 | memo3.Text:='';
553 |
554 | if (changesDetected = False) then
555 | begin
556 | i := 0;
557 | end else begin
558 | i := changesDetectedIndex + 1;
559 | end;
560 |
561 | while i < 32 do
562 | begin
563 | if FileExists(homeDir + '.startup-watcher/diff' + inttostr(i)) then memo3.Lines.LoadFromFile(homeDir + '.startup-watcher/diff' + inttostr(i));
564 |
565 | //File '.startup-watcher/diffxx' always exist but it is empty when no change are detected
566 | if memo3.Text <> '' then
567 | begin
568 | //Disable watcher (main timer) on changes detection to avoid missing multiple changes or catching changes when user not present
569 | Timer1.Enabled:=false;
570 | MenuItem10.Caption:='Enable Watcher';
571 |
572 | //Set changesDetected to true to avoid new scan, and avoid undetected changes
573 | changesDetected:=true;
574 | changesDetectedIndex:=i;
575 |
576 | //Prepare to save changes
577 | fileNameDiff:=inttostr(i) + '-Diff-' + DateToStr(Now) + '-' + TimeToStr(Now);
578 | fileNameUp:=inttostr(i) + '-New-' + DateToStr(Now) + '-' + TimeToStr(Now);
579 | fileNamePrev:=inttostr(i) + '-Prev-' + DateToStr(Now) + '-' + TimeToStr(Now);
580 |
581 | //Save changes
582 | if FileExists(homeDir + '.startup-watcher/diff' + inttostr(i)) then
583 | CopyFile(homeDir + '.startup-watcher/diff' + inttostr(i) , homeDir + '.startup-watcher/changes/' + fileNameDiff, true);
584 | if FileExists(homeDir + '.startup-watcher/prev' + inttostr(i)) then
585 | CopyFile(homeDir + '.startup-watcher/prev' + inttostr(i) , homeDir + '.startup-watcher/changes/' + fileNamePrev, true);
586 | if FileExists(homeDir + '.startup-watcher/up' + inttostr(i)) then
587 | CopyFile(homeDir + '.startup-watcher/up' + inttostr(i) , homeDir + '.startup-watcher/changes/' + fileNameUp, true);
588 |
589 | //Alert user for changes
590 | Form2.Visible:=true;
591 | Form2.BringToFront;
592 | Form2.Position:=poDesktopCenter;
593 |
594 | //Position form1 to changed section
595 | tabcontrol1.TabIndex:=i;
596 | Form1.TabControl1Change(self);
597 | //Edit1.Text:=Edit1.Text + ' | Changes saved to: ' + homeDir + '.startup-watcher/changes/';
598 |
599 | //Cancel this loop to avoid missing multiple change at once
600 | i:=1000;
601 | end else
602 | begin
603 | changesDetected:=false;
604 | changesDetectedIndex:=0;
605 | memo3.Text:='';
606 | i := i + 1;
607 | end;
608 | end;
609 |
610 | //if no change detected then loop main timer
611 | if (changesDetected = false) then timer1.Enabled:=true;
612 |
613 | //Disable this timer on exit to avoid loop
614 | Timer3.Enabled:=False;
615 |
616 | //Reset scanning indicator
617 | Label1.Caption:='Startup Watcher - Startup Items';
618 | end;
619 |
620 | procedure TForm1.FormActivate(Sender: TObject);
621 | begin
622 | Form1.TabControl1Change(self);
623 | end;
624 |
625 | procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
626 | begin
627 | CanClose:=false;
628 | form1.Visible:=false;
629 | TrayIcon1.Visible:=true;
630 | form1.FormStyle:=fsNormal; //fsNormal; //fsSystemStayOnTop
631 | end;
632 |
633 | procedure TForm1.Button4Click(Sender: TObject);
634 | begin
635 | button1.Click;
636 | end;
637 |
638 | procedure TForm1.Button5Click(Sender: TObject);
639 | begin
640 | Form1.Visible:=false;
641 | TrayIcon1.Visible:=true;
642 | form1.FormStyle:=fsNormal; //fsNormal; //fsSystemStayOnTop
643 | end;
644 |
645 | procedure TForm1.Button6Click(Sender: TObject);
646 | begin
647 | Application.Terminate;
648 | end;
649 |
650 | procedure TForm1.Button1Click(Sender: TObject);
651 | begin
652 | Timer1.OnTimer(Self);
653 | end;
654 |
655 | procedure TForm1.Button3Click(Sender: TObject);
656 | begin
657 | //Changed to reload just instead of refresh just to reload current tab...
658 | //button1.click;
659 | Form1.TabControl1Change(self);
660 | end;
661 |
662 | procedure TForm1.MenuItem10Click(Sender: TObject);
663 | begin
664 | if MenuItem10.Caption = 'Enable Watcher' then
665 | begin
666 | MenuItem10.Caption:='Disable Watcher';
667 | Timer1.Enabled:=true;
668 | form1.FormStyle:=fsNormal; //FormStyle:=fsSystemStayOnTop;
669 | Showmessage('Startup Watcher: active scan enabled');
670 | end
671 | else
672 | begin
673 | MenuItem10.Caption:='Enable Watcher';
674 | Timer1.Enabled:=false;
675 | form1.FormStyle:=fsNormal; //FormStyle:=fsSystemStayOnTop;
676 | Showmessage('Startup Watcher: active scan disabled');
677 | end;
678 | end;
679 |
680 | procedure TForm1.MenuItem12Click(Sender: TObject);
681 | begin
682 | form1.FormStyle:=fsNormal; //FormStyle:=fsSystemStayOnTop;
683 | showmessage('Startup-Watcher v1.8 - for more information visit https://github.com/Intika-Linux-Apps/Startup-Watcher');
684 | end;
685 |
686 | procedure TForm1.MenuItem13Click(Sender: TObject);
687 | begin
688 | Button1.Click;
689 | end;
690 |
691 | procedure TForm1.MenuItem14Click(Sender: TObject);
692 | begin
693 | button6.click;
694 | end;
695 |
696 | procedure TForm1.MenuItem15Click(Sender: TObject);
697 | begin
698 | button5.Click;
699 | end;
700 |
701 | procedure TForm1.MenuItem16Click(Sender: TObject);
702 | begin
703 | TrayIcon1.Visible:=false;
704 | end;
705 |
706 | procedure TForm1.MenuItem1Click(Sender: TObject);
707 | begin
708 | Form1.Visible:=true;
709 | end;
710 |
711 | procedure TForm1.MenuItem2Click(Sender: TObject);
712 | begin
713 | TrayIcon1.Visible:=false;
714 | Form1.Visible:=true;
715 | end;
716 |
717 | procedure TForm1.MenuItem3Click(Sender: TObject);
718 | begin
719 | Application.Terminate;
720 | end;
721 |
722 | procedure TForm1.MenuItem4Click(Sender: TObject);
723 | begin
724 | Form1.Visible:=false;
725 | TrayIcon1.Visible:=true;
726 | form1.FormStyle:=fsNormal; //fsNormal; //fsSystemStayOnTop
727 | end;
728 |
729 | procedure TForm1.MenuItem5Click(Sender: TObject);
730 | begin
731 | Button1.Click;
732 | end;
733 |
734 | procedure TForm1.TrayIcon1Click(Sender: TObject);
735 | begin
736 | if form1.Visible then
737 | form1.Visible:=false
738 | else
739 | form1.Visible:=true;
740 | end;
741 |
742 | procedure TForm1.TabControl1Change(Sender: TObject);
743 | begin
744 |
745 | if tabcontrol1.TabIndex < 9 then edit1.Caption:='| Tab: 0' else edit1.Caption:='| Tab: ';
746 | edit1.Caption:=edit1.Caption+inttostr(tabcontrol1.TabIndex + 1);
747 | edit1.Caption:=edit1.Caption+' | Location/commands: ';
748 |
749 | //0 Systemd-Services Root systemctl list-unit-files; systemctl -l --type service --all
750 | if tabcontrol1.TabIndex=0 then
751 | begin
752 | edit1.Caption:=edit1.Caption+'systemctl list-unit-files; systemctl -l --type service --all';
753 | if FileExists(homeDir + '.startup-watcher/up0') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up0') else memo1.text:=tab0;
754 | if FileExists(homeDir + '.startup-watcher/diff0') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff0') else memo2.text:=dif0;
755 | end;
756 |
757 | //1 Systemd-Timers x Root already watched in services (systemctl list-timers --all)
758 | if tabcontrol1.TabIndex=1 then
759 | begin
760 | edit1.Caption:=edit1.Caption+'already watched in services (systemctl list-timers --all)';
761 | memo1.text:='Inactive/disabled';
762 | memo2.text:='Inactive/disabled';
763 | end;
764 |
765 | //2 Systemd-Init.d Root ls -l /etc/init.d/
766 | if tabcontrol1.TabIndex=2 then
767 | begin
768 | edit1.Caption:=edit1.Caption+'ls -l /etc/init.d/';
769 | if FileExists(homeDir + '.startup-watcher/up2') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up2') else memo1.text:=tab2;
770 | if FileExists(homeDir + '.startup-watcher/diff2') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff2') else memo2.text:=dif2;
771 | end;
772 |
773 | //3 Cron-Scheduler Root ls -l /etc/cron*; cat /var/spool/cron/*
774 | if tabcontrol1.TabIndex=3 then
775 | begin
776 | edit1.Caption:=edit1.Caption+'ls -l /etc/cron*; cat /var/spool/cron/*';
777 | if FileExists(homeDir + '.startup-watcher/up3') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up3') else memo1.text:=tab3;
778 | if FileExists(homeDir + '.startup-watcher/diff3') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff3') else memo2.text:=dif3;
779 | end;
780 |
781 | //4 DBus-Services Root ls -l /usr/share/dbus-1/services/
782 | if tabcontrol1.TabIndex=4 then
783 | begin
784 | edit1.Caption:=edit1.Caption+'ls -l /usr/share/dbus-1/services/';
785 | if FileExists(homeDir + '.startup-watcher/up4') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up4') else memo1.text:=tab4;
786 | if FileExists(homeDir + '.startup-watcher/diff4') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff4') else memo2.text:=dif4;
787 | end;
788 |
789 | //5 XDG-Autostart Root ls -l /etc/xdg/autostart/
790 | if tabcontrol1.TabIndex=5 then
791 | begin
792 | edit1.Caption:=edit1.Caption+'ls -l /etc/xdg/autostart/';
793 | if FileExists(homeDir + '.startup-watcher/up5') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up5') else memo1.text:=tab5;
794 | if FileExists(homeDir + '.startup-watcher/diff5') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff5') else memo2.text:=dif5;
795 | end;
796 |
797 | //6 XDG-Openbox Root ls -l /etc/xdg/openbox/; cat /etc/xdg/openbox/*
798 | if tabcontrol1.TabIndex=6 then
799 | begin
800 | edit1.Caption:=edit1.Caption+'ls -l /etc/xdg/openbox/; cat /etc/xdg/openbox/* ';
801 | if FileExists(homeDir + '.startup-watcher/up6') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up6') else memo1.text:=tab6;
802 | if FileExists(homeDir + '.startup-watcher/diff6') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff6') else memo2.text:=dif6;
803 | end;
804 |
805 | //7 X11-Xinitrc Root cat /etc/X11/xinit/xinitrc
806 | if tabcontrol1.TabIndex=7 then
807 | begin
808 | edit1.Caption:=edit1.Caption+'cat /etc/X11/xinit/xinitrc ';
809 | if FileExists(homeDir + '.startup-watcher/up7') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up7') else memo1.text:=tab7;
810 | if FileExists(homeDir + '.startup-watcher/diff7') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff7') else memo2.text:=dif7;
811 | end;
812 |
813 | //8 Udev-Rules Root ls -l /udev/rules.d/; cat /udev/rules.d/*
814 | if tabcontrol1.TabIndex=8 then
815 | begin
816 | edit1.Caption:=edit1.Caption+'ls -l /udev/rules.d/; cat /udev/rules.d/* ';
817 | if FileExists(homeDir + '.startup-watcher/up8') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up8') else memo1.text:=tab8;
818 | if FileExists(homeDir + '.startup-watcher/diff8') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff8') else memo2.text:=dif8;
819 | end;
820 |
821 | //9 ETC-Profile.d Root ls -l /etc/profile.d/; cat /etc/profile.d/* (started with shell)
822 | if tabcontrol1.TabIndex=9 then
823 | begin
824 | edit1.Caption:=edit1.Caption+'cat /etc/profile.d (started with shell)';
825 | if FileExists(homeDir + '.startup-watcher/up9') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up9') else memo1.text:=tab9;
826 | if FileExists(homeDir + '.startup-watcher/diff9') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff9') else memo2.text:=dif9;
827 | end;
828 |
829 | //10 ETC-Profile Root cat /etc/profile
830 | if tabcontrol1.TabIndex=10 then
831 | begin
832 | edit1.Caption:=edit1.Caption+'cat /etc/profile';
833 | if FileExists(homeDir + '.startup-watcher/up10') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up10') else memo1.text:=tab10;
834 | if FileExists(homeDir + '.startup-watcher/diff10') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff10') else memo2.text:=dif10;
835 | end;
836 |
837 | //11 RC.D-RC.Local Root cat /etc/rc.d/rc.local
838 | if tabcontrol1.TabIndex=11 then
839 | begin
840 | edit1.Caption:=edit1.Caption+'cat /etc/rc.d/rc.local';
841 | if FileExists(homeDir + '.startup-watcher/up11') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up11') else memo1.text:=tab11;
842 | if FileExists(homeDir + '.startup-watcher/diff11') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff11') else memo2.text:=dif11;
843 | end;
844 |
845 | //12 RC.Local Root cat /etc/rc.local
846 | if tabcontrol1.TabIndex=12 then
847 | begin
848 | edit1.Caption:=edit1.Caption+'cat /etc/rc.local';
849 | if FileExists(homeDir + '.startup-watcher/up12') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up12') else memo1.text:=tab12;
850 | if FileExists(homeDir + '.startup-watcher/diff12') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff12') else memo2.text:=dif12;
851 | end;
852 |
853 | //13 Xsession-LightDM Root cat /etc/lightdm/Xsession
854 | if tabcontrol1.TabIndex=13 then
855 | begin
856 | edit1.Caption:=edit1.Caption+'cat /etc/lightdm/Xsession';
857 | if FileExists(homeDir + '.startup-watcher/up13') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up13') else memo1.text:=tab13;
858 | if FileExists(homeDir + '.startup-watcher/diff13') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff13') else memo2.text:=dif13;
859 | end;
860 |
861 | //14 Xsession-LXDM Root cat /etc/lxdm/Xsession
862 | if tabcontrol1.TabIndex=14 then
863 | begin
864 | edit1.Caption:=edit1.Caption+'cat /etc/lxdm/Xsession';
865 | if FileExists(homeDir + '.startup-watcher/up14') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up14') else memo1.text:=tab14;
866 | if FileExists(homeDir + '.startup-watcher/diff14') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff14') else memo2.text:=dif14;
867 | end;
868 |
869 | //15 Xsession-SDDM Root cat /usr/share/sddm/scripts/Xsession
870 | if tabcontrol1.TabIndex=15 then
871 | begin
872 | edit1.Caption:=edit1.Caption+'cat /usr/share/sddm/scripts/Xsession';
873 | if FileExists(homeDir + '.startup-watcher/up15') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up15') else memo1.text:=tab15;
874 | if FileExists(homeDir + '.startup-watcher/diff15') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff15') else memo2.text:=dif15;
875 | end;
876 |
877 | //16 Xsession-GDM Root cat /etc/gdm/Xsession
878 | if tabcontrol1.TabIndex=16 then
879 | begin
880 | edit1.Caption:=edit1.Caption+'cat /etc/gdm/Xsession';
881 | if FileExists(homeDir + '.startup-watcher/up16') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up16') else memo1.text:=tab16;
882 | if FileExists(homeDir + '.startup-watcher/diff16') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff16') else memo2.text:=dif16;
883 | end;
884 |
885 | //17 Systemd-Services User systemctl list-unit-files --user
886 | if tabcontrol1.TabIndex=17 then
887 | begin
888 | edit1.Caption:=edit1.Caption+'systemctl list-unit-files --user';
889 | if FileExists(homeDir + '.startup-watcher/up17') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up17') else memo1.text:=tab17;
890 | if FileExists(homeDir + '.startup-watcher/diff17') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff17') else memo2.text:=dif17;
891 | end;
892 |
893 | //18 Systemd-Timers x User already watched in services (systemctl list-timers --all --user)
894 | if tabcontrol1.TabIndex=18 then
895 | begin
896 | edit1.Caption:=edit1.Caption+'already watched in services (systemctl list-timers --all --user)';
897 | memo1.text:='Inactive/disabled';
898 | memo2.text:='Inactive/disabled';
899 | end;
900 |
901 | //19 Cron-Scheduler User crontab -l
902 | if tabcontrol1.TabIndex=19 then
903 | begin
904 | edit1.Caption:=edit1.Caption+'crontab -l';
905 | if FileExists(homeDir + '.startup-watcher/up19') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up19') else memo1.text:=tab19;
906 | if FileExists(homeDir + '.startup-watcher/diff19') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff19') else memo2.text:=dif19;
907 | end;
908 |
909 | //20 XDG-Openbox User ls -l ~/.config/openbox/; cat ~/.config/openbox/*
910 | if tabcontrol1.TabIndex=20 then
911 | begin
912 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/openbox/; cat ~/.config/openbox/* (environment & autostart)';
913 | if FileExists(homeDir + '.startup-watcher/up20') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up20') else memo1.text:=tab20;
914 | if FileExists(homeDir + '.startup-watcher/diff20') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff20') else memo2.text:=dif20;
915 | end;
916 |
917 | //21 X11-Xinitrc x User not yet implemented (~/.xinitrc)
918 | if tabcontrol1.TabIndex=21 then
919 | begin
920 | //TODO
921 | edit1.Caption:=edit1.Caption+'not yet implemented (~/.xinitrc)';
922 | memo1.text:='Inactive/disabled';
923 | memo2.text:='Inactive/disabled';
924 | end;
925 |
926 | //22 KDE-Environment User ls -l ~/.config/plasma-workspace/env/
927 | if tabcontrol1.TabIndex=22 then
928 | begin
929 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/plasma-workspace/env/';
930 | if FileExists(homeDir + '.startup-watcher/up22') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up22') else memo1.text:=tab22;
931 | if FileExists(homeDir + '.startup-watcher/diff22') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff22') else memo2.text:=dif22;
932 | end;
933 |
934 | //23 KDE-Autostart User ls -l ~/.kde/Autostart/
935 | if tabcontrol1.TabIndex=23 then
936 | begin
937 | edit1.Caption:=edit1.Caption+'ls -l ~/.kde/Autostart/';
938 | if FileExists(homeDir + '.startup-watcher/up23') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up23') else memo1.text:=tab23;
939 | if FileExists(homeDir + '.startup-watcher/diff23') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff23') else memo2.text:=dif23;
940 | end;
941 |
942 | //24 KDE-Shutdown User ls -l ~/.config/plasma-workspace/shutdown/
943 | if tabcontrol1.TabIndex=24 then
944 | begin
945 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/plasma-workspace/shutdown/';
946 | if FileExists(homeDir + '.startup-watcher/up24') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up24') else memo1.text:=tab24;
947 | if FileExists(homeDir + '.startup-watcher/diff24') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff24') else memo2.text:=dif24;
948 | end;
949 |
950 | //25 Xsession User cat ~/.xsession
951 | if tabcontrol1.TabIndex=25 then
952 | begin
953 | edit1.Caption:=edit1.Caption+'cat ~/.xsession';
954 | if FileExists(homeDir + '.startup-watcher/up25') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up25') else memo1.text:=tab25;
955 | if FileExists(homeDir + '.startup-watcher/diff25') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff25') else memo2.text:=dif25;
956 | end;
957 |
958 | //26 Xprofile User cat ~/.xprofile
959 | if tabcontrol1.TabIndex=26 then
960 | begin
961 | edit1.Caption:=edit1.Caption+'cat ~/.xprofile';
962 | if FileExists(homeDir + '.startup-watcher/up26') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up26') else memo1.text:=tab26;
963 | if FileExists(homeDir + '.startup-watcher/diff26') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff26') else memo2.text:=dif26;
964 | end;
965 |
966 | //27 Autostart-sh User ls -l ~/.config/autostart-scripts/
967 | if tabcontrol1.TabIndex=27 then
968 | begin
969 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/autostart-scripts/';
970 | if FileExists(homeDir + '.startup-watcher/up27') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up27') else memo1.text:=tab27;
971 | if FileExists(homeDir + '.startup-watcher/diff27') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff27') else memo2.text:=dif27;
972 | end;
973 |
974 | //28 Autostart User ls -l ~/.config/autostart/
975 | if tabcontrol1.TabIndex=28 then
976 | begin
977 | edit1.Caption:=edit1.Caption+'ls -l ~/.config/autostart/';
978 | if FileExists(homeDir + '.startup-watcher/up28') then memo1.Lines.LoadFromFile(homeDir + '.startup-watcher/up28') else memo1.text:=tab28;
979 | if FileExists(homeDir + '.startup-watcher/diff28') then memo2.Lines.LoadFromFile(homeDir + '.startup-watcher/diff28') else memo2.text:=dif28;
980 | end;
981 |
982 | //29 Fluxbox-Startup x User not yet implemented (~/.fluxbox/startup)
983 | if tabcontrol1.TabIndex=29 then
984 | begin
985 | //TODO
986 | edit1.Caption:=edit1.Caption+'not yet implemented (~/.fluxbox/startup)';
987 | memo1.text:='Inactive/disabled';
988 | memo2.text:='Inactive/disabled';
989 | end;
990 |
991 | //30 Aws-Autorun.sh x User not yet implemented (~/.config/awesome/autorun.sh)
992 | if tabcontrol1.TabIndex=30 then
993 | begin
994 | //TODO
995 | edit1.Caption:=edit1.Caption+'not yet implemented (~/.config/awesome/autorun.sh)';
996 | memo1.text:='Inactive/disabled';
997 | memo2.text:='Inactive/disabled';
998 | end;
999 |
1000 | //31 Wine x User not yet implemented (~/.wine/...)
1001 | if tabcontrol1.TabIndex=31 then
1002 | begin
1003 | //TODO
1004 | edit1.Caption:=edit1.Caption+'not yet implemented (~/.wine/...)';
1005 | memo1.text:='Inactive/disabled';
1006 | memo2.text:='Inactive/disabled';
1007 | end;
1008 |
1009 | end;
1010 |
1011 | end.
1012 |
1013 |
--------------------------------------------------------------------------------
/unit2.lfm:
--------------------------------------------------------------------------------
1 | object Form2: TForm2
2 | Left = 326
3 | Height = 92
4 | Top = 291
5 | Width = 448
6 | Caption = 'Startup-Watcher Notification'
7 | ClientHeight = 92
8 | ClientWidth = 448
9 | FormStyle = fsSystemStayOnTop
10 | Position = poDesktopCenter
11 | LCLVersion = '1.2.4.0'
12 | object Label1: TLabel
13 | Left = 24
14 | Height = 15
15 | Top = 16
16 | Width = 398
17 | Caption = 'Startup-Watcher Scanner: changes detected, watcher disabled'
18 | ParentColor = False
19 | end
20 | object Button1: TButton
21 | Left = 80
22 | Height = 25
23 | Top = 48
24 | Width = 292
25 | Caption = 'Show details and re-enable watcher'
26 | Default = True
27 | OnClick = Button1Click
28 | TabOrder = 0
29 | end
30 | end
31 |
--------------------------------------------------------------------------------
/unit2.pas:
--------------------------------------------------------------------------------
1 | unit Unit2;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | interface
6 |
7 | uses
8 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
9 |
10 | type
11 |
12 | { TForm2 }
13 |
14 | TForm2 = class(TForm)
15 | Button1: TButton;
16 | Label1: TLabel;
17 | procedure Button1Click(Sender: TObject);
18 | private
19 | { private declarations }
20 | public
21 | { public declarations }
22 | end;
23 |
24 | var
25 | Form2: TForm2;
26 |
27 | implementation
28 | uses
29 | Unit1;
30 |
31 | {$R *.lfm}
32 |
33 | { TForm2 }
34 |
35 | procedure TForm2.Button1Click(Sender: TObject);
36 | begin
37 | Form2.Visible:=false;
38 | Form1.Visible:=true;
39 | Form1.BringToFront;
40 | Form1.FormStyle:=fsSystemStayOnTop; //FormStyle:=fsNormal;
41 | Form1.WindowState:=wsMaximized;
42 | Form1.Position:=poDesktopCenter;
43 | //Enable back the watcher
44 | Form1.MenuItem10.Caption:='Disable Watcher';
45 | Form1.Timer1.Interval:=600000;
46 | Form1.Timer1.Enabled:=true;
47 | end;
48 |
49 | end.
50 |
51 |
--------------------------------------------------------------------------------