Coder Social home page Coder Social logo

virtualdesktop's People

Contributors

denniskae avatar linqlover avatar mscholtes avatar nyamisty avatar zoynels avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

virtualdesktop's Issues

Request: Plain Verbose Mode

Get Plain Information, like Cuerrent Desktop number or things like that.
This would help me to use this inside AutoHotkey, to store the desktop number.

Example:
"3" instead of "Current desktop: 'Games’ (desktop number 3)"

Provide "Toggle" option, to toggle between 2 virtual Desktops

Great project this.
Actually found because I needed to switch quickly between two virtual desktop with the same shortcut.
But this feature seems to be lacking.

So my feature request is to add an option (maybe call it "Toggle") to actually toggle between 2 Virtual Desktops.
So if the current desktop is the first, then the second will be selected and vice-versa.
Unsure what to do if there are 3 or more desktops.

I implemented this myself (in less than 10 lines) and it works great.
Implemented this in pipeline mode, changing rc variable.
So in order to use this feature: VirtualDesktop /gcd /toggle /s

What do you think?

[question] Cursor question

Hi,

Will every desktop, created by your utility, be having a separate cursor / focus management (similar to xvfb)?

Or, lets say, if a text field in desktop1 receives focus then focus will be gone from the desktop2?

I'd like to use this utility to run several Selenium tests in parallel, but "focus fighting" is problem that prevents it.

Thank you, Nickolay

Select window after changing virtual desktop

If I go from desktop 1 to desktop 2 and desktop 1 has browser active and desktop 2 has notepad active, after the desktop switch I'm still writing in the browser in the initial desktop, even thought I don't see it anymore.

Feature Request: Cycle/wrap to next right/left desktop

Foremost: Love it, almost exactly what I needed, thanks for sharing!

I wanted to have a commandline tool that I can bind to some other hot-corner GUI to quickly switch between virtual desktops. I was able to build it by wrapping yours: https://gist.github.com/cb109/7d3d4ad6d3a3267ac0e1ced64cc9982e#file-cycle_virtual_desktops-py-L45-L56

Since your tool is focused on virtual desktops and moving/switching already it would be nice to have that feature included, I'm certain there are other people that would be happy abut it as well.

Cheers!

Split VirtualDesktop in CLI and library

Hi Markus,

I use parts of your great work in https://gitlab.com/korpa/virtdeskbar

image

Sadly maintaining this for every Windows version will be a mess. Therefore would it be possible to split your CLI and the library. Your CLI and virtdeskbar then could use the library. Furthermore it would be really great if this library would have a proper Windows version detection. Don't know if this possible as I'm a totally C# noob.

Windows 1809 - Broken API

Just upgraded to 1809 and it seems as if the API is once broken again. If you find the time to fix this, my workflow would be foxed, too and I'd be very thankful ;-)

Is it possible to open an application TO a Virtual Desktop?

Wondering if my question is out of the scope of this project, but figured I'll ask it anyway.

I'm trying to open up programs on start up to specific virtual desktop.

I know I could set them to auto start via windows and just move them, but preferably, I'd like to do it via the script.

Thanks!

Request:OnDesktopChange

As I don't know a lot of c#, I don't know if this is possible.
Request: A parameter to specify an exe (or any program) and run it on Virtual Desktop Change.
I want this feature, because I'm comming from another library for Virtual Desktops on AutoHotkey, that is not compatible anymore with the lastest builds (and Windows 11). I'm trying to recreate all their functions with this repo and I can't make this one.
Thank You.

Trigger Task View

Hi,

I'm curious if there is an switch to trigger task view? i.e. Win-Tab

Wrapper fails after update from Win11 21H2 to 22H2

With User privs:

C:\Users\USERNAME\AppData\Local\VirtualDesktopWrapper>VirtualDesktop11-21H2.exe /LIST

Unhandled Exception: System.Runtime.InteropServices.COMException: A null reference pointer was passed to the stub. (Exception from HRESULT: 0x800706F4)
at VirtualDesktop.IVirtualDesktopManagerInternal.GetDesktops(IntPtr hWndOrMon, IObjectArray& desktops)
at VirtualDesktop.DesktopManager.GetDesktopIndex(IVirtualDesktop desktop)
at VirtualDesktop.Desktop.FromDesktop(Desktop desktop)
at VDeskTool.Program.Main(String[] args)

C:\Users\USERNAME\AppData\Local\VirtualDesktopWrapper>VirtualDesktop11-21H2.exe /RIGHT
Switching to right virtual desktop
Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at VirtualDesktop.IVirtualDesktopManagerInternal.GetAdjacentDesktop(IVirtualDesktop from, Int32 direction, IVirtualDesktop& desktop)
at VirtualDesktop.Desktop.get_Right()
at VDeskTool.Program.Main(String[] args)

C:\Users\USERNAME\AppData\Local\VirtualDesktopWrapper>VirtualDesktop11-21H2.exe /LEFT
Switching to left virtual desktop
Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at VirtualDesktop.IVirtualDesktopManagerInternal.GetAdjacentDesktop(IVirtualDesktop from, Int32 direction, IVirtualDesktop& desktop)
at VirtualDesktop.Desktop.get_Left()
at VDeskTool.Program.Main(String[] args)

C:\Users\USERNAME\AppData\Local\VirtualDesktopWrapper>VirtualDesktop11-21H2.exe "-Switch:Media"
Could not find virtual desktop with name containing 'Media'
Error in parameter '-Switch:Media'


With Admin privs:

C:\Users\USERNAME\AppData\Local\VirtualDesktopWrapper>VirtualDesktop11-21H2.exe /LIST

Unhandled Exception: System.Runtime.InteropServices.COMException: A null reference pointer was passed to the stub. (Exception from HRESULT: 0x800706F4)
at VirtualDesktop.IVirtualDesktopManagerInternal.GetDesktops(IntPtr hWndOrMon, IObjectArray& desktops)
at VirtualDesktop.DesktopManager.GetDesktopIndex(IVirtualDesktop desktop)
at VirtualDesktop.Desktop.FromDesktop(Desktop desktop)
at VDeskTool.Program.Main(String[] args)

C:\Users\USERNAME\AppData\Local\VirtualDesktopWrapper>VirtualDesktop11-21H2.exe /RIGHT
Switching to right virtual desktop
Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at VirtualDesktop.IVirtualDesktopManagerInternal.GetAdjacentDesktop(IVirtualDesktop from, Int32 direction, IVirtualDesktop& desktop)
at VirtualDesktop.Desktop.get_Right()
at VDeskTool.Program.Main(String[] args)

C:\Users\USERNAME\AppData\Local\VirtualDesktopWrapper>VirtualDesktop11-21H2.exe /LEFT
Switching to left virtual desktop
Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at VirtualDesktop.IVirtualDesktopManagerInternal.GetAdjacentDesktop(IVirtualDesktop from, Int32 direction, IVirtualDesktop& desktop)
at VirtualDesktop.Desktop.get_Left()
at VDeskTool.Program.Main(String[] args)

C:\Users\USERNAME\AppData\Local\VirtualDesktopWrapper>VirtualDesktop11-21H2.exe "-Switch:Media"
Could not find virtual desktop with name containing 'Media'
Error in parameter '-Switch:Media'

Move active window to desktop

Hi there, this is really great tool that fills missing features in win 10. One thing that you could add is option to move active window to any desktop. I've implemented that by adding following code and command option (Based on your moveWindow method) :

	[DllImport("user32.dll")]
	static extern IntPtr GetForegroundWindow();
	public void MoveActive()
	{
		IntPtr hWnd = GetForegroundWindow();
		int processId;
		if (hWnd == IntPtr.Zero) throw new ArgumentNullException();
		GetWindowThreadProcessId(hWnd, out processId);

		if (System.Diagnostics.Process.GetCurrentProcess().Id == processId)
		{ // window of process
			try // the easy way (if we are owner)
			{
				DesktopManager.VirtualDesktopManager.MoveWindowToDesktop(hWnd, ivd.GetId());
			}
			catch // window of process, but we are not the owner
			{
				IApplicationView view;
				DesktopManager.ApplicationViewCollection.GetViewForHwnd(hWnd, out view);
				DesktopManager.VirtualDesktopManagerInternal.MoveViewToDesktop(view, ivd);
			}
		}
		else
		{ // window of other process
			IApplicationView view;
			DesktopManager.ApplicationViewCollection.GetViewForHwnd(hWnd, out view);
			DesktopManager.VirtualDesktopManagerInternal.MoveViewToDesktop(view, ivd);
		}
	}

Feature Request: Move or insert virtual desktop

To insert a new virtual desktop between existing virtual desktops, I used to add a new virtual desktop at the end and then move all windows manually by one desktop to the right. However, this is a workaround, and since virtual desktop can be labeled, it gets even more complicated. This tool could be upgraded significantly if it provided an argument to insert a new desktop at a specific position, by moving all windows and labels automatically.

Moving window by handle fails but move by PID works fine

Encountered this issue when attempting to move a window of this program: https://github.com/transmission-remote-gui/transgui

Invoking the executable as .\VirtualDesktop Verbose GetDesktop:0 mw:<PID> works fine, but invoking it as .\VirtualDesktop Verbose GetDesktop:0 maw (after a delay and switching to the same window) results in an error:

Verbose mode enabled
Virtual desktop 0 selected
Moving active window to virtual desktop 0
No active window or move failed

The exception given was:

Exception: System.Runtime.InteropServices.COMException (0x8007139F): The group or resource is not in the correct state to perform the requested operation. (Exception from HRESULT: 0x8007139F)
   at VirtualDesktop.IVirtualDesktopManagerInternal.MoveViewToDesktop(IApplicationView view, IVirtualDesktop desktop)
   at VirtualDesktop.Desktop.MoveWindow(IntPtr hWnd)
   at VDeskTool.Program.Main(String[] args)

Edit: same issue occurs when trying .\VirtualDesktop GetDesktop:0 mwh:<handle>

HWND $var Issue

I'm writing a script to pin an app using a stored hwnd value.
I can do this by entering the hwnd value however when using a $var I am unable to and I receive this error:
image

image

PS Script
image

Machine Info: Windows 10
image

Thanks in advance for your help, I'm most definitely over looking some simple :3

VD not working for me (on Windows 11 Insider build 25252)

Hi, first off thanks for doing this. It's a cool project, and needed!

VD doesn't seem to be working for me, though. None of the methods triggering anything useful.

I noticed that VD.getCount() returns 0, and that my build (Windows 11 Insider 25252) may be later than the last that I saw commented at one point in the code).

I totally understand the nature of this project. If you happen to know what's up here, much appreciated!

Feature request: Get desktop name

Win the latest builds from the Windows Insider slow ring, you can new NAME your virtual desktops. Please add the capability for /GetCurrentDesktop or /GetDesktop to return a name instead of an index or something.

Also, I wonder if you can switch to a desktop by name.
image

[Feature Request] Option to list all windows running in current desktop

I want to close them before switching to another one, otherwise they will be brought over when the this desktop is closed. Getting a list of all the windows only on the current desktop would be very helpful.

Not sure if it's an easy implementation but always thanks for the great job, it helped me a lot.

Windows 1809

Hello, if I try to move an app, how can I get the name for the process to move? Tried it with different programms, only Essential PIM could moves with mv:EssentialPIM and the tool WInLister, mw:firefox e.g. failed. What went wrong?

Thanks in advance

cu
Friedrich

Flagged by Virus Scanner

I've been using VirtualDesktop11.exe for about a month and this morning my Virus Scanner (Vipre Enterprise) flagged it as malicious, any idea why?

The content of this page has been identified as malicious : Gen:Variant.Lazy.352990.

Windows 11 update breaks app

After I installed Version 22H2, it errors when trying to get desktops.

System.Runtime.InteropServices.COMException: 'A null reference pointer was passed to the stub. (Exception from HRESULT: 0x800706F4)'

internal static IVirtualDesktop GetDesktop(int index)
{
...
VirtualDesktopManagerInternal.GetDesktops(IntPtr.Zero, out desktops);
...
}

move or start a program

hello,
thank you first of all for the great program. I would like to start or move a program with the name "123.exe" on the second desktop. Is this possible? Could you give me the code for it, since I don't really know my way around?

Thanks for your help.

greetings

Focus when switching to desktop

To reproduce:

  1. Create two virtual desktops, open notepad on each.
  2. On the first desktop, click the notepad window to bring it to the foreground
  3. Use the windows short cut "ctrl+winkey+right arrow key" to go to second desktop
  4. Use Get-Desktop 0 | Switch-Desktop to go back to first virtual desktop

Focus isn't restored to the notepad window. Let me know if you are able to reduce this, it is somewhat intermittent.

Feature request: Action by title?

Hi,

No hurry for this.
I'm trying to move virtual boxes individually, i.e. pin/unpin etc but could not as they share the same application name. Using title could be one possibility, perhaps a titles that contain the "search term" option.

Thank you.

SetDesktopName

Hello, I'm having issues when trying to rename the virtual desktop, by calling SetDesktopName.

The method do some marshalling on the name string, but it uses the HString type. According to this link, HSTRING marshalling is not supported in .NET 5 or newer, so I'm not sure how the renaming should be conducted in this case.

"When using a WinRT-based API, you may need to marshal a string as an HSTRING. Using the UnmanagedType.HString value, you can marshal a string as a HSTRING. HSTRING marshalling is only supported on runtimes with built-in WinRT support. WinRT support was removed in .NET 5, so HSTRING marshalling is not supported in .NET 5 or newer."

I've tried to change it from UnmanagedType.HString to UnmanagedType.LPWStr, but I then get a "System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt". Even though my knowledge is not that deep on marshalling objects, I was able to use UnmanagedType.LPWStr marshalling in this past with no protected memory issues. Obviously and unfortunately, I couldn't figure out what is the issue in this case

Could you please assist?

Anyone have the .exe?

is there anywhere I could download the .exe?

I really would like to be able to pint some shortcuts to my taskbar on Windows Server 2019 so I click them to go the left or right virtual desktop.

Execute a Program on Specific Desktop in Windows 11 (Willing to payfor this)

I am using Virtual Desktops as a productivity tool.
However, I can't find anywhere a working solution in Windows 11 for the following:

I want to launch a shortcut or app
in specific Virtual Desktops in Windows 11.

A way to take a path to exe and add
a desktop parameter such as
"path/to/exe" -additional-parameters" -desktop 4

This would dramatically improve my daily organization.
This is the most comprehensive project around Virtual Desktops I've seen for Windows 11 so

Please, If you develop such feature, I would be willing to financially contribute

Windows 11 exception when calling GetDesktops()

Hi
Getting below exception in Windows 11 application, works fine in Windows 10. Using nuget package in a WPF application.
System.Collections.Generic.KeyNotFoundException: The given key 'IApplicationView' was not present in the dictionary.
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at WindowsDesktop.Interop.ComInterfaceAssemblyBuilder.CreateAssembly()
at WindowsDesktop.Interop.ComInterfaceAssemblyBuilder.GetAssembly()
at WindowsDesktop.VirtualDesktop.InitializeCore()
at WindowsDesktop.VirtualDesktop.InitializeIfNeeded()
at WindowsDesktop.VirtualDesktop.GetDesktops()

Any help will be much appreciated

Changing desktop focus openening file on other desktop

Hello!
Thanks for all your effort. I am starting to work more and more with Virtual Desktops on Windows. There is only one thing i really do not like. Lets say i have the file hello.pdf open on the first desktop. I am currently working on the 3 desktop. On this desktop i open with the explorer also the file hello.pdf, cause i forgot that i had i open on desktop 1. Windows will autmatically switch to the desktop 1 (I know about the multiple instance possibility for applications, therefore i made it with the file example).
I am know suddenly on desktop 1 without realizing it. That confuses me everytime.
There are two possible solutions:

  1. Windows (or ahk) would autmaticaly move the open hello.pdf to desktop 3.-- Everyone (me) would be happy. Seems quite difficult
  2. A Notification when there is a switch of desktops, which is not done with your ahk script. Pop up that would ask me, if i would like to move the open file do desktop 3 or leave it at desktop 1. would also make me really happy!

I am normally not asking for new features, cause I have really big respect, what guys like you are offering with your code to the world. But you said you are curious, so I wanted to do you this favour and tell you what would be a great feature ;-). greets

Issue with /GetDesktop:<n|s> in VirtualDesktop11Insider.cs

I used the getdesktop to move the active window to another desktop as such:
VirtualDesktop11Insider.cs.exe /getdesktop:desktopname | VirtualDesktop11Insider.cs.exe /moveactivewindow
It mover the active window always to desktop nr 0. In other words getdesktop passes 0 in the pipe instead of the desktop number.
What goes wrong? or what do i do wrong.
Thanks

Can't run on Windows Version 10.0.21327.1000+

I got the following error when tried to run on Windows Version 10.0.21327.1000+

Unhandled Exception: System.TypeInitializationException: The type initializer for 'VirtualDesktop.DesktopManager' threw an exception. ---> System.InvalidCastException: Specified cast is not valid.
at VirtualDesktop.IServiceProvider10.QueryService(Guid& service, Guid& riid)
at VirtualDesktop.DesktopManager..cctor()
--- End of inner exception stack trace ---
at VDeskTool.Program.Main(String[] args)

Broken on Win11 build 22581

...from Windows beta channel, but I guess as they have changed the taskbar quite heavily it will affect also the release version, once out.

And the problem description: no visible errors, just does not change the desktop.

Move All Windows of ahk_exe

F10::VD.MoveWindowToDesktopNum("ahk_exe Firefox.exe",3)

How to make this move all windows? right now only 1 of the windows moves to the specified desktop.

Error Message Compiling

Hey there.

im having problem compiling the file getting following message insice the console:

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240

Im still not sure this is what I need. Does it "add" new commands to the command line? Like if I can create a .bat or .cmd with this that allows me to switch desktops this would be wonderful.
Im trying to create a Rainmeter skin that allows to switch desktops by moving the mouse to the display edge either left or right. Only problem: haven't found a way yet to switch virtual Desktops with the command line

[ANN] Videfix

Hi @MScholtes, thank you again for this helpful project! I just wanted to inform you or any other person who might matter that I just published Videfix, which uses your API in a small GUI to save and restore window arrangements automatically. I needed to copy and rearrange the source files as your repo is not really implemented as a library, please feel absolutely free to copy back the rearrangement as you would like to do. Hope you like it!

Sorry for spamming your issues, you can safely close this issue at any time. :-)

can not change desktop

thank you first for your great tool!

I only have one issue and i do not know if i am doing wrong or if it should work that way.
I open the example file. I then select a window, which is not shared on all desktops. The script produces a short blink in the screen an i stay on the orignal desktop. I only can change between the desktops if the active Windwo is shared between all desktops. Is this intended to be like that?

I would be happy if I could switch direktly to any desktop regardless which windwo is active.

greets Daniel

Error when create new desktop Windows Insider 25290

I'm using Windows Insider build 25290. When create new Desktop I encounter this error:

Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at VirtualDesktop.IVirtualDesktopManagerInternal.CreateDesktop(IntPtr hWndOrMon)
   at VirtualDesktop.Desktop.Create()
   at VDeskTool.Program.Main(String[] args)

Switch desktop transition effect

A small thing, I'm running Win 10 1909, when I switch desktops using the default shortcut keys (i.e. CTRL+WIN+RIGHT), there is a transition effect; the windows will slide to the next desktop.

When I use /Left or /Right this transition effect is missing, it would be nice if the behaviour was the same as the shortcut keys.

Not working on Win11 Insider Preview 22489.1000

Hi,

I was really happy to find this tool, as VDesk was not updated to Win11 yet: eksime/VDesk#92

On my Windows 11 Pro 21H2 (OS build: 22000.258) this runs really great. But sadly on my test machine with Win11 Insider Preview (OS build 22489.1000) it doesn't work.

I really would like to fix this and create an Pull Request, but as I'm a complete newbie to C# and windows development I have no idea were to start. I understood that MS is changing the API for virtual desk a couple of times in the last windows versions. Therefore I would start there. Could you give me a hint where to start researching about these API changes.

Many thanks

Exception with Windows Insider

Using Windows Insider Windows 2004 OS Build 20257.1 Windows Feature Experience Pack 120.27509.10291.0
When running VirtualDesktop to move to a virtual desktop, exception is received:
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : TypeInitializationException

In briefly reviewing the code it appears to be some missing GUIDs in this section:
#region COM API internal static class Guids { public static readonly Guid CLSID_ImmersiveShell = new Guid("C2F03A33-21F5-47FA-B4BB-156362A2F239"); public static readonly Guid CLSID_VirtualDesktopManagerInternal = new Guid("C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B"); public static readonly Guid CLSID_VirtualDesktopManager = new Guid("AA509086-5CA9-4C25-8F95-589D3C07B48A"); public static readonly Guid CLSID_VirtualDesktopPinnedApps = new Guid("B5A399E7-1C87-46B8-88E9-FC5747B171BD");
Hopefully, this can be fixed by replacing hard coded GUIDs with a GUID lookup to prevent this in the future.

Error in Windows 11 22H2

It doesn't work in Windows 11 version 22H2 as it throws a System.InvalidCastException.

Could you please add an updated file for this?

cmd-error-Win11-22H2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.