├── .gitignore
├── README.md
├── VirtualDesktopManager.sln
└── VirtualDestopCycle
├── App.config
├── Form1.Designer.cs
├── Form1.cs
├── Form1.resx
├── Native.cs
├── Program.cs
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
└── Settings.settings
├── Resources
├── 1.ico
├── 2.ico
├── 3.ico
├── 4.ico
├── 5.ico
├── 6.ico
├── 7.ico
├── 8.ico
├── 9.ico
├── 9plus.ico
├── mainIco.ico
└── mainIco.png
├── VirtualDesktopManager.csproj
├── app.manifest
└── packages.config
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/visualstudio
3 |
4 | ### VisualStudio ###
5 | ## Ignore Visual Studio temporary files, build results, and
6 | ## files generated by popular Visual Studio add-ons.
7 |
8 | # User-specific files
9 | *.suo
10 | *.user
11 | *.userosscache
12 | *.sln.docstates
13 |
14 | # User-specific files (MonoDevelop/Xamarin Studio)
15 | *.userprefs
16 |
17 | # Build results
18 | [Dd]ebug/
19 | [Dd]ebugPublic/
20 | [Rr]elease/
21 | [Rr]eleases/
22 | x64/
23 | x86/
24 | bld/
25 | [Bb]in/
26 | [Oo]bj/
27 | [Ll]og/
28 |
29 | # Visual Studio 2015 cache/options directory
30 | .vs/
31 | # Uncomment if you have tasks that create the project's static files in wwwroot
32 | #wwwroot/
33 |
34 | # MSTest test Results
35 | [Tt]est[Rr]esult*/
36 | [Bb]uild[Ll]og.*
37 |
38 | # NUNIT
39 | *.VisualState.xml
40 | TestResult.xml
41 |
42 | # Build Results of an ATL Project
43 | [Dd]ebugPS/
44 | [Rr]eleasePS/
45 | dlldata.c
46 |
47 | # DNX
48 | project.lock.json
49 | artifacts/
50 |
51 | *_i.c
52 | *_p.c
53 | *_i.h
54 | *.ilk
55 | *.meta
56 | *.obj
57 | *.pch
58 | *.pdb
59 | *.pgc
60 | *.pgd
61 | *.rsp
62 | *.sbr
63 | *.tlb
64 | *.tli
65 | *.tlh
66 | *.tmp
67 | *.tmp_proj
68 | *.log
69 | *.vspscc
70 | *.vssscc
71 | .builds
72 | *.pidb
73 | *.svclog
74 | *.scc
75 |
76 | # Chutzpah Test files
77 | _Chutzpah*
78 |
79 | # Visual C++ cache files
80 | ipch/
81 | *.aps
82 | *.ncb
83 | *.opendb
84 | *.opensdf
85 | *.sdf
86 | *.cachefile
87 |
88 | # Visual Studio profiler
89 | *.psess
90 | *.vsp
91 | *.vspx
92 | *.sap
93 |
94 | # TFS 2012 Local Workspace
95 | $tf/
96 |
97 | # Guidance Automation Toolkit
98 | *.gpState
99 |
100 | # ReSharper is a .NET coding add-in
101 | _ReSharper*/
102 | *.[Rr]e[Ss]harper
103 | *.DotSettings.user
104 |
105 | # JustCode is a .NET coding add-in
106 | .JustCode
107 |
108 | # TeamCity is a build add-in
109 | _TeamCity*
110 |
111 | # DotCover is a Code Coverage Tool
112 | *.dotCover
113 |
114 | # NCrunch
115 | _NCrunch_*
116 | .*crunch*.local.xml
117 | nCrunchTemp_*
118 |
119 | # MightyMoose
120 | *.mm.*
121 | AutoTest.Net/
122 |
123 | # Web workbench (sass)
124 | .sass-cache/
125 |
126 | # Installshield output folder
127 | [Ee]xpress/
128 |
129 | # DocProject is a documentation generator add-in
130 | DocProject/buildhelp/
131 | DocProject/Help/*.HxT
132 | DocProject/Help/*.HxC
133 | DocProject/Help/*.hhc
134 | DocProject/Help/*.hhk
135 | DocProject/Help/*.hhp
136 | DocProject/Help/Html2
137 | DocProject/Help/html
138 |
139 | # Click-Once directory
140 | publish/
141 |
142 | # Publish Web Output
143 | *.[Pp]ublish.xml
144 | *.azurePubxml
145 | # TODO: Comment the next line if you want to checkin your web deploy settings
146 | # but database connection strings (with potential passwords) will be unencrypted
147 | *.pubxml
148 | *.publishproj
149 |
150 | # NuGet Packages
151 | *.nupkg
152 | # The packages folder can be ignored because of Package Restore
153 | **/packages/*
154 | # except build/, which is used as an MSBuild target.
155 | !**/packages/build/
156 | # Uncomment if necessary however generally it will be regenerated when needed
157 | #!**/packages/repositories.config
158 | # NuGet v3's project.json files produces more ignoreable files
159 | *.nuget.props
160 | *.nuget.targets
161 |
162 | # Microsoft Azure Build Output
163 | csx/
164 | *.build.csdef
165 |
166 | # Microsoft Azure Emulator
167 | ecf/
168 | rcf/
169 |
170 | # Windows Store app package directories and files
171 | AppPackages/
172 | BundleArtifacts/
173 | Package.StoreAssociation.xml
174 | _pkginfo.txt
175 |
176 | # Visual Studio cache files
177 | # files ending in .cache can be ignored
178 | *.[Cc]ache
179 | # but keep track of directories ending in .cache
180 | !*.[Cc]ache/
181 |
182 | # Others
183 | ClientBin/
184 | ~$*
185 | *~
186 | *.dbmdl
187 | *.dbproj.schemaview
188 | *.pfx
189 | *.publishsettings
190 | node_modules/
191 | orleans.codegen.cs
192 |
193 | # Since there are multiple workflows, uncomment next line to ignore bower_components
194 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
195 | #bower_components/
196 |
197 | # RIA/Silverlight projects
198 | Generated_Code/
199 |
200 | # Backup & report files from converting an old project file
201 | # to a newer Visual Studio version. Backup files are not needed,
202 | # because we have git ;-)
203 | _UpgradeReport_Files/
204 | Backup*/
205 | UpgradeLog*.XML
206 | UpgradeLog*.htm
207 |
208 | # SQL Server files
209 | *.mdf
210 | *.ldf
211 |
212 | # Business Intelligence projects
213 | *.rdl.data
214 | *.bim.layout
215 | *.bim_*.settings
216 |
217 | # Microsoft Fakes
218 | FakesAssemblies/
219 |
220 | # GhostDoc plugin setting file
221 | *.GhostDoc.xml
222 |
223 | # Node.js Tools for Visual Studio
224 | .ntvs_analysis.dat
225 |
226 | # Visual Studio 6 build log
227 | *.plg
228 |
229 | # Visual Studio 6 workspace options file
230 | *.opt
231 |
232 | # Visual Studio LightSwitch build output
233 | **/*.HTMLClient/GeneratedArtifacts
234 | **/*.DesktopClient/GeneratedArtifacts
235 | **/*.DesktopClient/ModelManifest.xml
236 | **/*.Server/GeneratedArtifacts
237 | **/*.Server/ModelManifest.xml
238 | _Pvt_Extensions
239 |
240 | # Paket dependency manager
241 | .paket/paket.exe
242 | paket-files/
243 |
244 | # FAKE - F# Make
245 | .fake/
246 |
247 | # JetBrains Rider
248 | .idea/
249 | *.sln.iml
250 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | VirtualDesktopManager
2 | ======
3 | About
4 | ------------------------
5 | This program was made for people who are using Windows 10's built-in Virtual Desktops, but who don't like the default key-binding, don't like how you can't cycle through your desktops (If you are on your last one you don't want to hotkey over to the first one 8 times), and don't like not knowing what desktop # they are on.
6 |
7 | Install
8 | ------------------------
9 | There is no installation. Just download the .zip from the Releases, extract it and then run VirtualDesktopManager.exe.
10 |
11 | You can use Task Scheduler to make it launch when you login so you don't have to launch it manually every reboot.
12 |
13 | Usage
14 | ------------------------
15 |
16 | You can continue to use the default hotkey to change desktops (Ctrl+Win+Left/Right), but you won't get any of the benefit of the program except knowing which desktop you are on.
17 |
18 | I have added a listener to the hotkey of Ctrl+Alt+Left/Right. With this hotkey, you can cycle through your virtual desktops. If this hotkey doesn't work on your system (Intel utility already uses it), you can open up the settings and select the alternate hotkey (Shift+Alt+Left/Right).
19 |
20 | As of v1.5.0, you are no longer limited to 9 desktops. The icon will automatically update up to 999 desktops (can you handle that many?).
21 |
22 |
23 | Limitations
24 | ------------------------
25 | * Due to not wanting to make lots of tray icons, this program only supports up to 9 virtual desktops (it will crash if you go above that).
26 | * If you try switch between desktops too quickly, windows on different desktops will try to gain focus (you'll see what I mean when you try it out).
27 | * It needs more testing to see how well it will handle suspend/hibernation events.
28 | * You will need to relaunch the program if explorer.exe crashes.
29 | * Hotkeys are statically coded in, so if you want to configure them, you'll have to modify the source.
30 | * It doesn't handle it very well when you add or create virtual desktops while it's running. You'll need to relaunch it.
31 |
32 | I'm trying to work on these issues, but if you have a solution, just throw in a PR and I'll take a look.
33 |
--------------------------------------------------------------------------------
/VirtualDesktopManager.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.24720.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtualDesktopManager", "VirtualDestopCycle\VirtualDesktopManager.csproj", "{065F69EE-7316-4CB0-97A0-224CC1045C37}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x64 = Debug|x64
12 | Release|Any CPU = Release|Any CPU
13 | Release|x64 = Release|x64
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {065F69EE-7316-4CB0-97A0-224CC1045C37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {065F69EE-7316-4CB0-97A0-224CC1045C37}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {065F69EE-7316-4CB0-97A0-224CC1045C37}.Debug|x64.ActiveCfg = Debug|x64
19 | {065F69EE-7316-4CB0-97A0-224CC1045C37}.Debug|x64.Build.0 = Debug|x64
20 | {065F69EE-7316-4CB0-97A0-224CC1045C37}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {065F69EE-7316-4CB0-97A0-224CC1045C37}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {065F69EE-7316-4CB0-97A0-224CC1045C37}.Release|x64.ActiveCfg = Release|x64
23 | {065F69EE-7316-4CB0-97A0-224CC1045C37}.Release|x64.Build.0 = Release|x64
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | EndGlobal
29 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | False
15 |
16 |
17 |
18 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Form1.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace VirtualDesktopManager
2 | {
3 | partial class Form1
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
33 | this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
34 | this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
35 | this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
36 | this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
37 | this.checkBox1 = new System.Windows.Forms.CheckBox();
38 | this.groupBox1 = new System.Windows.Forms.GroupBox();
39 | this.removeButton = new System.Windows.Forms.Button();
40 | this.downButton = new System.Windows.Forms.Button();
41 | this.upButton = new System.Windows.Forms.Button();
42 | this.listView1 = new System.Windows.Forms.ListView();
43 | this.addFileButton = new System.Windows.Forms.Button();
44 | this.saveButton = new System.Windows.Forms.Button();
45 | this.pictureBox1 = new System.Windows.Forms.PictureBox();
46 | this.labelStatus = new System.Windows.Forms.Label();
47 | this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
48 | this.contextMenuStrip1.SuspendLayout();
49 | this.groupBox1.SuspendLayout();
50 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
51 | this.SuspendLayout();
52 | //
53 | // notifyIcon1
54 | //
55 | this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
56 | this.notifyIcon1.Icon = global::VirtualDesktopManager.Properties.Resources.mainIco;
57 | this.notifyIcon1.Text = "Virtual Desktop Manager";
58 | this.notifyIcon1.Visible = true;
59 | this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
60 | //
61 | // contextMenuStrip1
62 | //
63 | this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(28, 28);
64 | this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
65 | this.settingsToolStripMenuItem,
66 | this.exitToolStripMenuItem});
67 | this.contextMenuStrip1.Name = "contextMenuStrip1";
68 | this.contextMenuStrip1.Size = new System.Drawing.Size(117, 48);
69 | //
70 | // settingsToolStripMenuItem
71 | //
72 | this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
73 | this.settingsToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
74 | this.settingsToolStripMenuItem.Text = "Settings";
75 | this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click);
76 | //
77 | // exitToolStripMenuItem
78 | //
79 | this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
80 | this.exitToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
81 | this.exitToolStripMenuItem.Text = "Exit";
82 | this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
83 | //
84 | // checkBox1
85 | //
86 | this.checkBox1.AutoSize = true;
87 | this.checkBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
88 | this.checkBox1.ForeColor = System.Drawing.Color.White;
89 | this.checkBox1.Location = new System.Drawing.Point(14, 54);
90 | this.checkBox1.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
91 | this.checkBox1.Name = "checkBox1";
92 | this.checkBox1.Size = new System.Drawing.Size(353, 21);
93 | this.checkBox1.TabIndex = 1;
94 | this.checkBox1.Text = "Use alternate key combination (Shift+Alt+Left/Right)";
95 | this.checkBox1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
96 | this.checkBox1.UseVisualStyleBackColor = true;
97 | //
98 | // groupBox1
99 | //
100 | this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
101 | | System.Windows.Forms.AnchorStyles.Right)));
102 | this.groupBox1.BackColor = System.Drawing.Color.Black;
103 | this.groupBox1.Controls.Add(this.removeButton);
104 | this.groupBox1.Controls.Add(this.downButton);
105 | this.groupBox1.Controls.Add(this.upButton);
106 | this.groupBox1.Controls.Add(this.listView1);
107 | this.groupBox1.Controls.Add(this.addFileButton);
108 | this.groupBox1.Controls.Add(this.saveButton);
109 | this.groupBox1.Controls.Add(this.checkBox1);
110 | this.groupBox1.Font = new System.Drawing.Font("Segoe UI", 20F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
111 | this.groupBox1.ForeColor = System.Drawing.Color.White;
112 | this.groupBox1.Location = new System.Drawing.Point(8, 9);
113 | this.groupBox1.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
114 | this.groupBox1.Name = "groupBox1";
115 | this.groupBox1.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
116 | this.groupBox1.Size = new System.Drawing.Size(593, 347);
117 | this.groupBox1.TabIndex = 3;
118 | this.groupBox1.TabStop = false;
119 | this.groupBox1.Text = "Settings";
120 | //
121 | // removeButton
122 | //
123 | this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
124 | this.removeButton.BackColor = System.Drawing.Color.Black;
125 | this.removeButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
126 | this.removeButton.Font = new System.Drawing.Font("Segoe UI", 12F);
127 | this.removeButton.ForeColor = System.Drawing.Color.White;
128 | this.removeButton.Location = new System.Drawing.Point(175, 282);
129 | this.removeButton.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
130 | this.removeButton.Name = "removeButton";
131 | this.removeButton.Size = new System.Drawing.Size(144, 37);
132 | this.removeButton.TabIndex = 7;
133 | this.removeButton.Text = "Remove file";
134 | this.removeButton.UseVisualStyleBackColor = false;
135 | this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
136 | //
137 | // downButton
138 | //
139 | this.downButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
140 | this.downButton.BackColor = System.Drawing.Color.Black;
141 | this.downButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
142 | this.downButton.Font = new System.Drawing.Font("Wingdings", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2)));
143 | this.downButton.ForeColor = System.Drawing.Color.White;
144 | this.downButton.Location = new System.Drawing.Point(539, 188);
145 | this.downButton.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
146 | this.downButton.Name = "downButton";
147 | this.downButton.Size = new System.Drawing.Size(41, 37);
148 | this.downButton.TabIndex = 6;
149 | this.downButton.Text = "â";
150 | this.downButton.UseVisualStyleBackColor = false;
151 | this.downButton.Click += new System.EventHandler(this.downButton_Click);
152 | //
153 | // upButton
154 | //
155 | this.upButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
156 | this.upButton.BackColor = System.Drawing.Color.Black;
157 | this.upButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
158 | this.upButton.Font = new System.Drawing.Font("Wingdings", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2)));
159 | this.upButton.ForeColor = System.Drawing.Color.White;
160 | this.upButton.Location = new System.Drawing.Point(539, 128);
161 | this.upButton.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
162 | this.upButton.Name = "upButton";
163 | this.upButton.Size = new System.Drawing.Size(41, 37);
164 | this.upButton.TabIndex = 5;
165 | this.upButton.Text = "á";
166 | this.upButton.UseVisualStyleBackColor = false;
167 | this.upButton.Click += new System.EventHandler(this.upButton_Click);
168 | //
169 | // listView1
170 | //
171 | this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
172 | | System.Windows.Forms.AnchorStyles.Left)
173 | | System.Windows.Forms.AnchorStyles.Right)));
174 | this.listView1.Font = new System.Drawing.Font("Segoe UI", 12F);
175 | this.listView1.HideSelection = false;
176 | this.listView1.Location = new System.Drawing.Point(14, 98);
177 | this.listView1.Name = "listView1";
178 | this.listView1.ShowGroups = false;
179 | this.listView1.ShowItemToolTips = true;
180 | this.listView1.Size = new System.Drawing.Size(508, 168);
181 | this.listView1.TabIndex = 4;
182 | this.listView1.UseCompatibleStateImageBehavior = false;
183 | this.listView1.View = System.Windows.Forms.View.Details;
184 | //
185 | // addFileButton
186 | //
187 | this.addFileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
188 | this.addFileButton.BackColor = System.Drawing.Color.Black;
189 | this.addFileButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
190 | this.addFileButton.Font = new System.Drawing.Font("Segoe UI", 12F);
191 | this.addFileButton.ForeColor = System.Drawing.Color.White;
192 | this.addFileButton.Location = new System.Drawing.Point(14, 282);
193 | this.addFileButton.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
194 | this.addFileButton.Name = "addFileButton";
195 | this.addFileButton.Size = new System.Drawing.Size(144, 37);
196 | this.addFileButton.TabIndex = 3;
197 | this.addFileButton.Text = "Add background";
198 | this.addFileButton.UseVisualStyleBackColor = false;
199 | this.addFileButton.Click += new System.EventHandler(this.addFileButton_Click);
200 | //
201 | // saveButton
202 | //
203 | this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
204 | this.saveButton.BackColor = System.Drawing.Color.Black;
205 | this.saveButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
206 | this.saveButton.Font = new System.Drawing.Font("Segoe UI", 12F);
207 | this.saveButton.ForeColor = System.Drawing.Color.White;
208 | this.saveButton.Location = new System.Drawing.Point(477, 45);
209 | this.saveButton.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
210 | this.saveButton.Name = "saveButton";
211 | this.saveButton.Size = new System.Drawing.Size(103, 37);
212 | this.saveButton.TabIndex = 2;
213 | this.saveButton.Text = "Save";
214 | this.saveButton.UseVisualStyleBackColor = false;
215 | this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
216 | //
217 | // pictureBox1
218 | //
219 | this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
220 | this.pictureBox1.Location = new System.Drawing.Point(8, 363);
221 | this.pictureBox1.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
222 | this.pictureBox1.Name = "pictureBox1";
223 | this.pictureBox1.Size = new System.Drawing.Size(171, 76);
224 | this.pictureBox1.TabIndex = 4;
225 | this.pictureBox1.TabStop = false;
226 | //
227 | // labelStatus
228 | //
229 | this.labelStatus.AutoSize = true;
230 | this.labelStatus.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);
231 | this.labelStatus.Location = new System.Drawing.Point(184, 363);
232 | this.labelStatus.Name = "labelStatus";
233 | this.labelStatus.Size = new System.Drawing.Size(0, 17);
234 | this.labelStatus.TabIndex = 5;
235 | //
236 | // openFileDialog1
237 | //
238 | this.openFileDialog1.FileName = "openFileDialog1";
239 | //
240 | // Form1
241 | //
242 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
243 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
244 | this.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
245 | this.ClientSize = new System.Drawing.Size(609, 451);
246 | this.Controls.Add(this.labelStatus);
247 | this.Controls.Add(this.pictureBox1);
248 | this.Controls.Add(this.groupBox1);
249 | this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F);
250 | this.ForeColor = System.Drawing.Color.White;
251 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
252 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
253 | this.Margin = new System.Windows.Forms.Padding(1);
254 | this.Name = "Form1";
255 | this.ShowIcon = false;
256 | this.ShowInTaskbar = false;
257 | this.Text = "Virtual Desktop Manager";
258 | this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
259 | this.Load += new System.EventHandler(this.Form1_Load);
260 | this.contextMenuStrip1.ResumeLayout(false);
261 | this.groupBox1.ResumeLayout(false);
262 | this.groupBox1.PerformLayout();
263 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
264 | this.ResumeLayout(false);
265 | this.PerformLayout();
266 |
267 | }
268 |
269 | #endregion
270 |
271 |
272 |
273 | private System.Windows.Forms.NotifyIcon notifyIcon1;
274 | private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
275 | private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
276 | private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
277 | private System.Windows.Forms.CheckBox checkBox1;
278 | private System.Windows.Forms.GroupBox groupBox1;
279 | private System.Windows.Forms.Button saveButton;
280 | private System.Windows.Forms.PictureBox pictureBox1;
281 | private System.Windows.Forms.Label labelStatus;
282 | private System.Windows.Forms.Button addFileButton;
283 | private System.Windows.Forms.OpenFileDialog openFileDialog1;
284 | private System.Windows.Forms.ListView listView1;
285 | private System.Windows.Forms.Button downButton;
286 | private System.Windows.Forms.Button upButton;
287 | private System.Windows.Forms.Button removeButton;
288 | }
289 | }
290 |
291 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Form1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Windows.Forms;
5 | using System.Windows.Input;
6 | using System.Runtime.InteropServices;
7 | using WindowsDesktop;
8 | using GlobalHotKey;
9 | using System.Drawing;
10 | using System.IO;
11 |
12 | namespace VirtualDesktopManager
13 | {
14 | public partial class Form1 : Form
15 | {
16 | [DllImport("user32.dll", ExactSpelling = true)]
17 | static extern IntPtr GetForegroundWindow();
18 |
19 | [DllImport("user32.dll")]
20 | [return: MarshalAs(UnmanagedType.Bool)]
21 | static extern bool SetForegroundWindow(IntPtr hWnd);
22 |
23 | private IList desktops;
24 | private IntPtr[] activePrograms;
25 |
26 | [DllImport("user32.dll", CharSet = CharSet.Auto)]
27 | extern static bool DestroyIcon(IntPtr handle);
28 |
29 | private readonly HotKeyManager _rightHotkey;
30 | private readonly HotKeyManager _leftHotkey;
31 | private readonly HotKeyManager _numberHotkey;
32 |
33 | private bool closeToTray;
34 |
35 | private bool useAltKeySettings;
36 |
37 | public Form1()
38 | {
39 | InitializeComponent();
40 |
41 | handleChangedNumber();
42 |
43 | closeToTray = true;
44 |
45 | _rightHotkey = new HotKeyManager();
46 | _rightHotkey.KeyPressed += RightKeyManagerPressed;
47 |
48 | _leftHotkey = new HotKeyManager();
49 | _leftHotkey.KeyPressed += LeftKeyManagerPressed;
50 |
51 | _numberHotkey = new HotKeyManager();
52 | _numberHotkey.KeyPressed += NumberHotkeyPressed;
53 |
54 | VirtualDesktop.CurrentChanged += VirtualDesktop_CurrentChanged;
55 | VirtualDesktop.Created += VirtualDesktop_Added;
56 | VirtualDesktop.Destroyed += VirtualDesktop_Destroyed;
57 |
58 | this.FormClosing += Form1_FormClosing;
59 |
60 | useAltKeySettings = Properties.Settings.Default.AltHotKey;
61 | checkBox1.Checked = useAltKeySettings;
62 |
63 | listView1.Items.Clear();
64 | listView1.Columns.Add("File").Width = 400;
65 | foreach (var file in Properties.Settings.Default.DesktopBackgroundFiles)
66 | {
67 | listView1.Items.Add(NewListViewItem(file));
68 | }
69 | }
70 |
71 | private void NumberHotkeyPressed(object sender, KeyPressedEventArgs e)
72 | {
73 | var index = (int) e.HotKey.Key - (int)Key.D0 - 1;
74 | var currentDesktopIndex = getCurrentDesktopIndex();
75 |
76 | if (index == currentDesktopIndex)
77 | {
78 | return;
79 | }
80 |
81 | if (index > desktops.Count - 1)
82 | {
83 | return;
84 | }
85 |
86 | desktops.ElementAt(index)?.Switch();
87 | }
88 |
89 | private void Form1_FormClosing(object sender, FormClosingEventArgs e)
90 | {
91 | if (closeToTray)
92 | {
93 | e.Cancel = true;
94 | this.Visible = false;
95 | this.ShowInTaskbar = false;
96 | notifyIcon1.BalloonTipTitle = "Still Running...";
97 | notifyIcon1.BalloonTipText = "Right-click on the tray icon to exit.";
98 | notifyIcon1.ShowBalloonTip(2000);
99 | }
100 | }
101 |
102 | private void handleChangedNumber()
103 | {
104 | desktops = VirtualDesktop.GetDesktops();
105 | activePrograms = new IntPtr[desktops.Count];
106 | }
107 |
108 | private void VirtualDesktop_Added(object sender, VirtualDesktop e)
109 | {
110 | handleChangedNumber();
111 | }
112 |
113 | private void VirtualDesktop_Destroyed(object sender, VirtualDesktopDestroyEventArgs e)
114 | {
115 | handleChangedNumber();
116 | }
117 |
118 | private void VirtualDesktop_CurrentChanged(object sender, VirtualDesktopChangedEventArgs e)
119 | {
120 | // 0 == first
121 | int currentDesktopIndex = getCurrentDesktopIndex();
122 |
123 | string pictureFile = PickNthFile(currentDesktopIndex);
124 | if (pictureFile != null)
125 | {
126 | Native.SetBackground(pictureFile);
127 | }
128 |
129 | restoreApplicationFocus(currentDesktopIndex);
130 | changeTrayIcon(currentDesktopIndex);
131 | }
132 |
133 | private string PickNthFile(int currentDesktopIndex)
134 | {
135 | int n = Properties.Settings.Default.DesktopBackgroundFiles.Count;
136 | if (n == 0)
137 | return null;
138 | int index = currentDesktopIndex % n;
139 | return Properties.Settings.Default.DesktopBackgroundFiles[index];
140 | }
141 |
142 | private void exitToolStripMenuItem_Click(object sender, EventArgs e)
143 | {
144 | _rightHotkey.Dispose();
145 | _leftHotkey.Dispose();
146 | _numberHotkey.Dispose();
147 |
148 | closeToTray = false;
149 |
150 | this.Close();
151 | }
152 |
153 | private void normalHotkeys()
154 | {
155 | try
156 | {
157 | _rightHotkey.Register(Key.Right, System.Windows.Input.ModifierKeys.Control | System.Windows.Input.ModifierKeys.Alt);
158 | _leftHotkey.Register(Key.Left, System.Windows.Input.ModifierKeys.Control | System.Windows.Input.ModifierKeys.Alt);
159 | RegisterNumberHotkeys(System.Windows.Input.ModifierKeys.Control | System.Windows.Input.ModifierKeys.Alt);
160 | }
161 | catch (Exception err)
162 | {
163 | notifyIcon1.BalloonTipTitle = "Error setting hotkeys";
164 | notifyIcon1.BalloonTipText = "Could not set hotkeys. Please open settings and try the alternate combination.";
165 | notifyIcon1.ShowBalloonTip(2000);
166 | }
167 | }
168 |
169 | private void alternateHotkeys()
170 | {
171 | try
172 | {
173 | _rightHotkey.Register(Key.Right, System.Windows.Input.ModifierKeys.Shift | System.Windows.Input.ModifierKeys.Alt);
174 | _leftHotkey.Register(Key.Left, System.Windows.Input.ModifierKeys.Shift | System.Windows.Input.ModifierKeys.Alt);
175 | RegisterNumberHotkeys(System.Windows.Input.ModifierKeys.Shift | System.Windows.Input.ModifierKeys.Alt);
176 | }
177 | catch (Exception err)
178 | {
179 | notifyIcon1.BalloonTipTitle = "Error setting hotkeys";
180 | notifyIcon1.BalloonTipText = "Could not set hotkeys. Please open settings and try the default combination.";
181 | notifyIcon1.ShowBalloonTip(2000);
182 | }
183 | }
184 |
185 | private void RegisterNumberHotkeys(ModifierKeys modifiers)
186 | {
187 | _numberHotkey.Register(Key.D1, modifiers);
188 | _numberHotkey.Register(Key.D2, modifiers);
189 | _numberHotkey.Register(Key.D3, modifiers);
190 | _numberHotkey.Register(Key.D4, modifiers);
191 | _numberHotkey.Register(Key.D5, modifiers);
192 | _numberHotkey.Register(Key.D6, modifiers);
193 | _numberHotkey.Register(Key.D7, modifiers);
194 | _numberHotkey.Register(Key.D8, modifiers);
195 | _numberHotkey.Register(Key.D9, modifiers);
196 | }
197 |
198 | private void Form1_Load(object sender, EventArgs e)
199 | {
200 | labelStatus.Text = "";
201 |
202 | if (!useAltKeySettings)
203 | normalHotkeys();
204 | else
205 | alternateHotkeys();
206 |
207 | var desktop = initialDesktopState();
208 | changeTrayIcon();
209 |
210 | this.Visible = false;
211 | }
212 |
213 | private int getCurrentDesktopIndex()
214 | {
215 | return desktops.IndexOf(VirtualDesktop.Current);
216 | }
217 |
218 | private void saveApplicationFocus(int currentDesktopIndex = -1)
219 | {
220 | IntPtr activeAppWindow = GetForegroundWindow();
221 |
222 | if (currentDesktopIndex == -1)
223 | currentDesktopIndex = getCurrentDesktopIndex();
224 |
225 | activePrograms[currentDesktopIndex] = activeAppWindow;
226 | }
227 |
228 | private void restoreApplicationFocus(int currentDesktopIndex = -1)
229 | {
230 | if (currentDesktopIndex == -1)
231 | currentDesktopIndex = getCurrentDesktopIndex();
232 |
233 | if (activePrograms[currentDesktopIndex] != null && activePrograms[currentDesktopIndex] != IntPtr.Zero)
234 | {
235 | SetForegroundWindow(activePrograms[currentDesktopIndex]);
236 | }
237 | }
238 |
239 | private void changeTrayIcon(int currentDesktopIndex = -1)
240 | {
241 | if(currentDesktopIndex == -1)
242 | currentDesktopIndex = getCurrentDesktopIndex();
243 |
244 | var desktopNumber = currentDesktopIndex + 1;
245 | var desktopNumberString = desktopNumber.ToString();
246 |
247 | var fontSize = 140;
248 | var xPlacement = 100;
249 | var yPlacement = 50;
250 |
251 | if(desktopNumber > 9 && desktopNumber < 100)
252 | {
253 | fontSize = 125;
254 | xPlacement = 75;
255 | yPlacement = 65;
256 | } else if(desktopNumber > 99)
257 | {
258 | fontSize = 80;
259 | xPlacement = 90;
260 | yPlacement = 100;
261 | }
262 |
263 | Bitmap newIcon = Properties.Resources.mainIcoPng;
264 | Font desktopNumberFont = new Font("Segoe UI", fontSize, FontStyle.Bold, GraphicsUnit.Pixel);
265 |
266 | var gr = Graphics.FromImage(newIcon);
267 | gr.DrawString(desktopNumberString, desktopNumberFont, Brushes.White, xPlacement, yPlacement);
268 |
269 | Icon numberedIcon = Icon.FromHandle(newIcon.GetHicon());
270 | notifyIcon1.Icon = numberedIcon;
271 |
272 | DestroyIcon(numberedIcon.Handle);
273 | desktopNumberFont.Dispose();
274 | newIcon.Dispose();
275 | gr.Dispose();
276 | }
277 |
278 | VirtualDesktop initialDesktopState()
279 | {
280 | var desktop = VirtualDesktop.Current;
281 | int desktopIndex = getCurrentDesktopIndex();
282 |
283 | saveApplicationFocus(desktopIndex);
284 |
285 | return desktop;
286 | }
287 |
288 | void RightKeyManagerPressed(object sender, KeyPressedEventArgs e)
289 | {
290 | var desktop = initialDesktopState();
291 |
292 | if(desktop.GetRight() != null)
293 | {
294 | desktop.GetRight()?.Switch();
295 | } else
296 | {
297 | desktops.First()?.Switch();
298 | }
299 | }
300 |
301 | void LeftKeyManagerPressed(object sender, KeyPressedEventArgs e)
302 | {
303 | var desktop = initialDesktopState();
304 |
305 | if (desktop.GetLeft() != null)
306 | {
307 | desktop.GetLeft()?.Switch();
308 | }
309 | else
310 | {
311 | desktops.Last()?.Switch();
312 | }
313 | }
314 |
315 | private void openSettings()
316 | {
317 | this.Visible = true;
318 | this.WindowState = System.Windows.Forms.FormWindowState.Normal;
319 | this.ShowInTaskbar = true;
320 | }
321 |
322 | private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
323 | {
324 | openSettings();
325 | }
326 |
327 | private void notifyIcon1_DoubleClick(object sender, EventArgs e)
328 | {
329 | openSettings();
330 | }
331 |
332 | private void upButton_Click(object sender, EventArgs e)
333 | {
334 | try
335 | {
336 | if (listView1.SelectedItems.Count > 0)
337 | {
338 | ListViewItem selected = listView1.SelectedItems[0];
339 | int indx = selected.Index;
340 | int totl = listView1.Items.Count;
341 |
342 | if (indx == 0)
343 | {
344 | listView1.Items.Remove(selected);
345 | listView1.Items.Insert(totl - 1, selected);
346 | }
347 | else
348 | {
349 | listView1.Items.Remove(selected);
350 | listView1.Items.Insert(indx - 1, selected);
351 | }
352 | }
353 | else
354 | {
355 | MessageBox.Show("You can only move one item at a time. Please select only one item and try again.",
356 | "Item Select", MessageBoxButtons.OK, MessageBoxIcon.Stop);
357 | }
358 | }
359 | catch (Exception ex)
360 | {
361 |
362 | }
363 | }
364 |
365 | private void downButton_Click(object sender, EventArgs e)
366 | {
367 | try
368 | {
369 | if (listView1.SelectedItems.Count > 0)
370 | {
371 | ListViewItem selected = listView1.SelectedItems[0];
372 | int indx = selected.Index;
373 | int totl = listView1.Items.Count;
374 |
375 | if (indx == totl - 1)
376 | {
377 | listView1.Items.Remove(selected);
378 | listView1.Items.Insert(0, selected);
379 | }
380 | else
381 | {
382 | listView1.Items.Remove(selected);
383 | listView1.Items.Insert(indx + 1, selected);
384 | }
385 | }
386 | else
387 | {
388 | MessageBox.Show("You can only move one item at a time. Please select only one item and try again.",
389 | "Item Select", MessageBoxButtons.OK, MessageBoxIcon.Stop);
390 | }
391 | }
392 | catch (Exception ex)
393 | {
394 | }
395 | }
396 |
397 | private void saveButton_Click(object sender, EventArgs e)
398 | {
399 | _rightHotkey.Unregister(Key.Right, System.Windows.Input.ModifierKeys.Control | System.Windows.Input.ModifierKeys.Alt);
400 | _leftHotkey.Unregister(Key.Left, System.Windows.Input.ModifierKeys.Control | System.Windows.Input.ModifierKeys.Alt);
401 | _rightHotkey.Unregister(Key.Right, System.Windows.Input.ModifierKeys.Shift | System.Windows.Input.ModifierKeys.Alt);
402 | _leftHotkey.Unregister(Key.Left, System.Windows.Input.ModifierKeys.Shift | System.Windows.Input.ModifierKeys.Alt);
403 |
404 | if (checkBox1.Checked)
405 | {
406 | alternateHotkeys();
407 | Properties.Settings.Default.AltHotKey = true;
408 | }
409 | else
410 | {
411 | normalHotkeys();
412 | Properties.Settings.Default.AltHotKey = false;
413 | }
414 |
415 | Properties.Settings.Default.DesktopBackgroundFiles.Clear();
416 | foreach (ListViewItem item in listView1.Items)
417 | {
418 | Properties.Settings.Default.DesktopBackgroundFiles.Add(item.Tag.ToString());
419 | }
420 |
421 | Properties.Settings.Default.Save();
422 | labelStatus.Text = "Changes were successful.";
423 | }
424 |
425 | private void addFileButton_Click(object sender, EventArgs e)
426 | {
427 | openFileDialog1.CheckFileExists = true;
428 | openFileDialog1.CheckPathExists = true;
429 | openFileDialog1.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";
430 | openFileDialog1.FilterIndex = 0;
431 | openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
432 | openFileDialog1.Multiselect = true;
433 | openFileDialog1.Title = "Select desktop background image";
434 | if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
435 | {
436 | foreach (string file in openFileDialog1.FileNames)
437 | {
438 | listView1.Items.Add(NewListViewItem(file));
439 | }
440 | }
441 | }
442 |
443 | private static ListViewItem NewListViewItem(string file)
444 | {
445 | return new ListViewItem()
446 | {
447 | Text = Path.GetFileName(file),
448 | ToolTipText = file,
449 | Name = Path.GetFileName(file),
450 | Tag = file
451 | };
452 | }
453 |
454 | private void removeButton_Click(object sender, EventArgs e)
455 | {
456 | try
457 | {
458 | if (listView1.SelectedItems.Count > 0)
459 | {
460 | ListViewItem selected = listView1.SelectedItems[0];
461 | listView1.Items.Remove(selected);
462 | }
463 | }
464 | catch (Exception ex)
465 | {
466 | }
467 | }
468 | }
469 | }
470 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Form1.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 191, 17
125 |
126 |
127 | 346, 17
128 |
129 |
130 |
131 |
132 | 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
241 | rkJggg==
242 |
243 |
244 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Native.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Runtime.InteropServices;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace VirtualDesktopManager
9 | {
10 | internal static class Native
11 | {
12 | [DllImport("user32.dll", CharSet = CharSet.Auto)]
13 | internal static extern int SystemParametersInfo(
14 | uint uAction,
15 | uint uParam,
16 | string lpvParam,
17 | uint fuWinIni);
18 |
19 | public static void SetBackground(string pictureFile)
20 | {
21 | const uint SPI_SETDESKWALLPAPER = 0x0014;
22 | const uint SPIF_UPDATEINIFILE = 1;
23 | const uint SPIF_SENDWININICHANGE = 2;
24 |
25 | SystemParametersInfo(
26 | SPI_SETDESKWALLPAPER,
27 | 0,
28 | pictureFile,
29 | SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace VirtualDesktopManager
8 | {
9 | static class Program
10 | {
11 | ///
12 | /// The main entry point for the application.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 | Application.Run(new Form1());
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("VirtualDestopCycle")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("VirtualDestopCycle")]
13 | [assembly: AssemblyCopyright("Copyright © 2016")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("065f69ee-7316-4cb0-97a0-224cc1045c37")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace VirtualDesktopManager.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VirtualDesktopManager.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
65 | ///
66 | internal static System.Drawing.Icon _1 {
67 | get {
68 | object obj = ResourceManager.GetObject("_1", resourceCulture);
69 | return ((System.Drawing.Icon)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
75 | ///
76 | internal static System.Drawing.Icon _2 {
77 | get {
78 | object obj = ResourceManager.GetObject("_2", resourceCulture);
79 | return ((System.Drawing.Icon)(obj));
80 | }
81 | }
82 |
83 | ///
84 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
85 | ///
86 | internal static System.Drawing.Icon _3 {
87 | get {
88 | object obj = ResourceManager.GetObject("_3", resourceCulture);
89 | return ((System.Drawing.Icon)(obj));
90 | }
91 | }
92 |
93 | ///
94 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
95 | ///
96 | internal static System.Drawing.Icon _4 {
97 | get {
98 | object obj = ResourceManager.GetObject("_4", resourceCulture);
99 | return ((System.Drawing.Icon)(obj));
100 | }
101 | }
102 |
103 | ///
104 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
105 | ///
106 | internal static System.Drawing.Icon _5 {
107 | get {
108 | object obj = ResourceManager.GetObject("_5", resourceCulture);
109 | return ((System.Drawing.Icon)(obj));
110 | }
111 | }
112 |
113 | ///
114 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
115 | ///
116 | internal static System.Drawing.Icon _6 {
117 | get {
118 | object obj = ResourceManager.GetObject("_6", resourceCulture);
119 | return ((System.Drawing.Icon)(obj));
120 | }
121 | }
122 |
123 | ///
124 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
125 | ///
126 | internal static System.Drawing.Icon _7 {
127 | get {
128 | object obj = ResourceManager.GetObject("_7", resourceCulture);
129 | return ((System.Drawing.Icon)(obj));
130 | }
131 | }
132 |
133 | ///
134 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
135 | ///
136 | internal static System.Drawing.Icon _8 {
137 | get {
138 | object obj = ResourceManager.GetObject("_8", resourceCulture);
139 | return ((System.Drawing.Icon)(obj));
140 | }
141 | }
142 |
143 | ///
144 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
145 | ///
146 | internal static System.Drawing.Icon _9 {
147 | get {
148 | object obj = ResourceManager.GetObject("_9", resourceCulture);
149 | return ((System.Drawing.Icon)(obj));
150 | }
151 | }
152 |
153 | ///
154 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
155 | ///
156 | internal static System.Drawing.Icon mainIco {
157 | get {
158 | object obj = ResourceManager.GetObject("mainIco", resourceCulture);
159 | return ((System.Drawing.Icon)(obj));
160 | }
161 | }
162 |
163 | ///
164 | /// Looks up a localized resource of type System.Drawing.Bitmap.
165 | ///
166 | internal static System.Drawing.Bitmap mainIcoPng {
167 | get {
168 | object obj = ResourceManager.GetObject("mainIcoPng", resourceCulture);
169 | return ((System.Drawing.Bitmap)(obj));
170 | }
171 | }
172 | }
173 | }
174 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\resources\mainico.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
123 |
124 |
125 | ..\Resources\mainIco.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
126 |
127 |
128 | ..\Resources\1.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
129 |
130 |
131 | ..\Resources\2.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
132 |
133 |
134 | ..\Resources\3.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
135 |
136 |
137 | ..\Resources\4.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
138 |
139 |
140 | ..\Resources\5.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
141 |
142 |
143 | ..\Resources\6.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
144 |
145 |
146 | ..\Resources\7.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
147 |
148 |
149 | ..\Resources\8.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
150 |
151 |
152 | ..\Resources\9.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
153 |
154 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace VirtualDesktopManager.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 |
26 | [global::System.Configuration.UserScopedSettingAttribute()]
27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
28 | [global::System.Configuration.DefaultSettingValueAttribute("False")]
29 | [global::System.Configuration.SettingsManageability(System.Configuration.SettingsManageability.Roaming)]
30 | public bool AltHotKey {
31 | get {
32 | return ((bool)(this["AltHotKey"]));
33 | }
34 | set {
35 | this["AltHotKey"] = value;
36 | }
37 | }
38 |
39 | [global::System.Configuration.UserScopedSettingAttribute()]
40 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
41 | [global::System.Configuration.DefaultSettingValueAttribute("\r\n")]
43 | [global::System.Configuration.SettingsManageability(System.Configuration.SettingsManageability.Roaming)]
44 | public global::System.Collections.Specialized.StringCollection DesktopBackgroundFiles {
45 | get {
46 | return ((global::System.Collections.Specialized.StringCollection)(this["DesktopBackgroundFiles"]));
47 | }
48 | set {
49 | this["DesktopBackgroundFiles"] = value;
50 | }
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | False
7 |
8 |
9 | <?xml version="1.0" encoding="utf-16"?>
10 | <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
11 |
12 |
13 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/1.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/1.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/2.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/2.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/3.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/3.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/4.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/4.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/5.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/5.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/6.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/6.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/7.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/7.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/8.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/8.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/9.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/9.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/9plus.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/9plus.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/mainIco.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/mainIco.ico
--------------------------------------------------------------------------------
/VirtualDestopCycle/Resources/mainIco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/m0ngr31/VirtualDesktopManager/1b241dc07273d88ea0bd69e8861dd8a9ec3e7004/VirtualDestopCycle/Resources/mainIco.png
--------------------------------------------------------------------------------
/VirtualDestopCycle/VirtualDesktopManager.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {065F69EE-7316-4CB0-97A0-224CC1045C37}
8 | WinExe
9 | Properties
10 | VirtualDesktopManager
11 | VirtualDesktopManager
12 | v4.6
13 | 512
14 | true
15 |
16 | false
17 | publish\
18 | true
19 | Disk
20 | false
21 | Foreground
22 | 7
23 | Days
24 | false
25 | false
26 | true
27 | 0
28 | 1.0.0.%2a
29 | false
30 | true
31 |
32 |
33 | AnyCPU
34 | true
35 | full
36 | false
37 | bin\Debug\
38 | DEBUG;TRACE
39 | prompt
40 | 4
41 |
42 |
43 | AnyCPU
44 | pdbonly
45 | false
46 | bin\Release\
47 | TRACE
48 | prompt
49 | 4
50 |
51 |
52 |
53 | true
54 | bin\x64\Debug\
55 |
56 |
57 | full
58 | x64
59 | prompt
60 | MinimumRecommendedRules.ruleset
61 | true
62 |
63 |
64 | bin\x64\Release\
65 | TRACE
66 | true
67 | pdbonly
68 | x64
69 | prompt
70 | MinimumRecommendedRules.ruleset
71 | true
72 |
73 |
74 | Resources\mainIco.ico
75 |
76 |
77 |
78 |
79 | app.manifest
80 |
81 |
82 |
83 | ..\packages\GlobalHotKey.1.1.0\lib\GlobalHotKey.dll
84 | True
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | ..\packages\VirtualDesktop.2.0.0-beta3\lib\net46\VirtualDesktop.dll
99 | True
100 |
101 |
102 |
103 |
104 |
105 | Form
106 |
107 |
108 | Form1.cs
109 |
110 |
111 |
112 |
113 |
114 | Form1.cs
115 |
116 |
117 | ResXFileCodeGenerator
118 | Resources.Designer.cs
119 | Designer
120 |
121 |
122 | True
123 | Resources.resx
124 | True
125 |
126 |
127 | Designer
128 |
129 |
130 |
131 | SettingsSingleFileGenerator
132 | Settings.Designer.cs
133 |
134 |
135 | True
136 | Settings.settings
137 | True
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 | False
180 | Microsoft .NET Framework 4.6 %28x86 and x64%29
181 | true
182 |
183 |
184 | False
185 | .NET Framework 3.5 SP1
186 | false
187 |
188 |
189 |
190 |
197 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
52 |
53 |
54 | true
55 |
56 |
57 |
58 |
59 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/VirtualDestopCycle/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------