Welcome to MSDN Blogs Sign in | Join | Help

Why does Ctrl+ScrollLock cancel dialogs?

Commenter Adam Russell asks why Ctrl+ScrollLock cancels dialogs.

Easy. Because Ctrl+ScrollLock is the same as Ctrl+Break, and Ctrl+Break cancels dialogs.

Okay, that answer actually raises two more questions. First, why is Ctrl+ScrollLock the same as Ctrl+Break? This is a consequence of the backward compatibility designed into the Enhanced Keyboard layout which is in widespread use today. If you go back and look at the original PC/XT keyboard layout, you'll see that many of the keys we're familiar with today simply didn't exist back then, and one key (PrtSc) existed in a very different form.

Let's start with PrtSc. Observe that it was originally a shifted key, atop the asterisk. In the PC/AT keyboard layout, the PrtSc/* key migrated into the numeric keypad, and with the introduction of the enhanced keyboard layout, the two functions PrtSc and multiplication were split into two separate keys. The asterisk stayed with the numeric keypad, while the PrtSc function moved to the top row as a function key (sharing a key with the SysRq key).

Okay, that's all nice, but what about Ctrl+ScrollLock and Ctrl+Break? Well, in the original PC/XT keyboard layout, there was no Break key. The key sequence for Break was Ctrl+ScrollLock. (And for completeness, the key sequence for Pause was Ctrl+NumLock.) Even though the enhanced keyboard moved the Pause and Break functions to their own key, pressing the Pause key internally generated scan codes that simulated a press of Ctrl+NumLock. In other words, when you pressed Pause, the keyboard hardware actually tells the computer, "The user pressed the Ctrl key and then pressed the NumLock key." Similarly, when you pressed Ctrl+Break, the keyboard hardware tells the computer, "The user pressed the Ctrl key and then pressed the ScrollLock key."

Therefore, Ctrl+ScrollLock acts like Ctrl+Break because at the hardware level, they are the same thing. That the two functions exist on separate keys is just a fake-out by the keyboard hardware.

Okay, so now that we understand why Ctrl+ScrollLock is the same as Ctrl+Break, the next question is why Ctrl+Break cancels a dialog box. If you look at the list of virtual key codes in winuser.h, you'll find lots of virtual keys that don't exist on the PC keyboard: VK_CLEAR, function keys VK_F13 through VK_F24, and the long-forgotten VK_PA1. What are all these things?

In the beginning, Windows and MS-DOS ran on more than just the IBM PC. I know for certain that it also ran on the NEC PC-98, and there were probably other architectures that were either explicitly supported or for which support was planned or reserved. The designers of the original Windows keyboard input driver model wanted to cover all of the likely bases and included support for keys beyond the basic 84-key PC/XT keyboard, keys that could be found on then-popular keyboard layouts such as the VT-100 and even the 3270. I don't know which keyboard had a Cancel key, but presumably one did, or at least the people who designed the input driver model wanted to be prepared for the possibility of one showing up.

Given that you had a Cancel key, it seemed natural for the dialog manager to support it by treating a press of the Cancel key as the same as clicking the Cancel button on a dialog.

Published Monday, February 11, 2008 7:00 AM by oldnewthing
Filed under:

Comments

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 10:34 AM by mark

"The asterisk stayed with the numeric keypad, while the PrtSc function moved to the top row as a function key (sharing a key with the SysRq key)."

What exactly was/is the SysRq key for? It's probably the only key I've never used and pressing it doesn't seem to do anything.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 10:44 AM by Dan

I bet you've never used Scroll Lock either.

Hold-over from earlier days, although I don't remember those keys doing much THEN either.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:05 AM by Mark

As I remember, one use of the scroll lock key was back in DOS days to stop the text scrolling off the top of the screen.  

Even now, some ssh programs will use this key to do the same thing on Unix boxen!

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:08 AM by ethermal

scroll lock locks the window scrolling to the arrow keys in excel.  Makes for some frantic help desk calls.  "My excel is broken, when I try to go to the next cell the whole screen moves!!!!" But it can be useful on large spreadsheets and you want to stick to keyboard navigation.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:09 AM by David Walker

I remember PA1 on a 3270 keyboard -- it was an "attention" key, which took your input window from CMS mode into the lower-level CP mode.  Not that this info will help anyone...

PA2 was another type of attention key on a 3270.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:10 AM by Trevel

I used to call it the "ScrollLock-break." I probably still would, should I have any reason to say it. I expect it would be confusing.

I never did figure out the unmodified use of it. I mean, I know what it does, I just never figured out WHY.  

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:19 AM by mschaef

@mark: SysRq was for System Request. At the time the IBM introduced the 286, memory protection was new to the line, and they probably had visions of it being used as a multi-tasking/multi-user kind of machine, needing a new key to explicitly request an OS prompt or something. Linux actually now uses SysRq key in something close to its original intent:

http://www.linuxhowtos.org/Tips%20and%20Tricks/sysrq.htm

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:22 AM by Kim

I kind of miss the final point where it says why ctrl-break acts like the (on modern systems nonexistent) cancel key. Is it because the cancel key has the same keycode as ctrl-break?

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:22 AM by Chris Hanson

Wikipedia's take on SysRq:

http://en.wikipedia.org/wiki/SysRq

(Linux makes use of it! :)

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:27 AM by Adam Russell

Thanks for the answer. It's more fascinating than I could have ever possibly imagined.

Would you mind updating the spelling of my last name to have two l's, though?

[Fixed, sorry about that. -Raymond]

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:36 AM by djmitchella

Is this related to why control+scrlk fixes DevStudio?

Sometimes, DevStudio's find-in-files gets confused, and it thinks that there are no files in the project/solution/directory. Pressing Control+ScrollLock, somehow, fixes this, and it'll start searching files again -- I picked this tip up somewhere, and it's been very helpful ever since, but I couldn't work out _why_ it works..

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:50 AM by Fredrik Nyman

The Cancel key may have come from the Wang PCs.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:51 AM by strik

The question is: Why didn't Microsoft use SysRq für BSODing the machine by keyboard (cf. http://support.microsoft.com/kb/244139/en)? It would be the "natural choice", wouldn't it, instead of having to use Right-CTRL and Scroll-lock. Perhaps, SysRq was already used in other circumstances, right?

[The clues were in the article. Every 3270 emulator would bluescreen the machine if you used SysRq as the hotkey. -Raymond]

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 12:09 PM by Neil

Interestingly, when you press Ctrl+Break TranslateMessage synthesizes a Ctrl+C character, and I was able to find both Microsoft and non-Microsoft software that mistakenly(?) copies instead of cancelling.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 12:17 PM by James Schend

I'll spare everyone my keyboard gripe, except to say that the keyboard is easily the least usable part of computing in this day and age, and also the one that has the least chance of changing. Apple did some brilliant things with their keyboard (notably, providing "return" and "enter" as separate keys), but they've actually reverted to the old behavior as their ranks are filled with Windows converts.

But even ignoring adding new functionality, there are several keys which are basically nothing but support call generators... Num Lock, Scroll Lock, Pause, Insert. The 0.05% of people who use these keys on purpose certainly don't outweigh the 99.95% of people who use them on accident, then think their computer is broken.

Vista gave us the ability to disable Caps Lock (FINALLY!) When will we get the ability to disable Num Lock? (Does anybody have a program/hack to disable the function of NumLock while keeping the key working? I like to use it for some functions in video games, but I always want the keypad to be numbers, not arrows. Any ideas?)

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 12:26 PM by El Guapo

I must have missed something in this blog post. I believe the question was never actually answered. Yep, just double-checked it. What's the answer to the question in the title of the post?

[Ctrl+ScrollLock maps to the hypothetical Cancel key, and the hypothetical Cancel key cancels dialogs. -Raymond]

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 12:47 PM by Steve C.

OK, I'm missing something. You've explained why Ctrl-ScrollLock and Ctrl-Break are equivalent. And you've explained that VK_CANCEL will cancel a dialog. But why does Ctrl-Break map to VK_CANCEL?

[What would you map it to? -Raymond]

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 1:16 PM by Larry Tellerman

>[Ctrl+ScrollLock maps to the Cancel key, and >the Cancel key cancels dialogs. -Raymond]

Yes, but why does Ctrl+Break map to VK_CANCEL?

[More proof that nobody reads the existing comments (and answers to comments) before posting their own comments. The response is right there immediately above your repeat. -Raymond]

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 1:26 PM by James Birdsall

IIRC, IBM sold XT and AT configurations which came with a 3270 emulator board and a 3270-style keyboard.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 1:51 PM by Evan

Congratulations Raymond. You made me feel like I'm getting gypped by my keyboard manufacturer.

101 keys? More like 100.5. :-)

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 2:14 PM by Michael

To answer the question that Raymond already answered:

CTRL+Break maps to VK_CANCEL because on some obscure and long-forgotten but once popular keyboard layout that was used on a machine where MS-DOS Run, there was a cancel key, which the developers used to cancel dialogs.

To make sure everything is compatible/equal on all platforms, they needed to "emulate" the cancel key and mapped it to CTRL+Break/CTRL+ScrollLock.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 3:47 PM by mh

I seem to remember F13-F24 on an old DOS machine sometime back in the 80s.  I think GW-BASIC used them...

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 5:02 PM by Steve

OK so now I have to ask another obvious question, if all this stems from the DOS days why does VK_CANCEL not map to CTRL+C? CTRL+C  was used quite often in DOS to "break out"/stop programs, TSR's and other things.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 5:11 PM by Jeffrey Altman

One keyboard of interest was the DEC LK-450 which came with the Alpha NT systems.  The LK-450 provided NT with a full VT-520 keyboard complete with 20 function keys, Help, Do, Find, Insert, Remove, Prev, Next, Compose, and PF1 to PF4 keys.

This was a great keyboard.  Its a shame that drivers are not available for more recent versions of Windows.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 5:40 PM by Jim

Yes indeed. I loved my old DEC Rainbow LK keyboard, Cancel and all...

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 5:54 PM by Enno

So why doesn't it cancel all dialogs, for example the Visual Studio "Open File..." dialog?

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 6:16 PM by Dean Harding

"So why doesn't it cancel all dialogs, for example the Visual Studio "Open File..." dialog?"

I would have thought the answer to that was pretty obvious... Visual Studio implements it's own File->Open dialog (you can tell because it doesn't get the new Vista style when running on Vista -- also, take a look at it in Spy++). They obviously didn't re-implement all of the features of the window manager when they did it.

# Excuse me but...

Monday, February 11, 2008 8:02 PM by Igor Levicki

Raymond,

There are MANY dialogs in Windows itself which do not respond to the Escape and Enter keys. I would really prefer to know why those dialogs ignore those keys then to know all this about Ctrl+ScrollLock.

[I answered this question over three years ago. -Raymond]

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 9:27 PM by Jon

See thats why Sun keyboards are awesome. They have cool keys like Props :)

http://glasstheplanet.org/graphics/sun_keyboard_left.jpg

# re: Why did Windows not use SysRq?

Monday, February 11, 2008 10:25 PM by SteveD

For a long time I wondered why SysRq remained redundant while we persisted with the 'three-fingered-salute' of Ctrl-Alt-Delete.  Why not summon the system with one key instead of a strange combination that seems only to discriminate against amputees (underlying interrupt structures notwithstanding, of course)?

And then the Caps Lock that does not get cancelled by the Shift key, like any decent typewriter, but perhaps that's really one for another day...

# re: Why does Ctrl+ScrollLock cancel dialogs?

Monday, February 11, 2008 11:11 PM by ntl

Steve: "why does VK_CANCEL not map to CTRL+C? CTRL+C  was used quite often in DOS to "break out"/stop programs, TSR's and other things."

CTRL+C and CTRL+BREAK were not the same thing under DOS. The rule was that if CTRL+C would not break then CTRL+BREAK would work (as a last resource, but often enough).

If I remember correctly, you could make a batch file ignore CTRL+C (something like "BREAK=OFF") but couldn't make it ignore CTRL+BREAK.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 1:40 AM by Worf

<blockquote>For a long time I wondered why SysRq remained redundant while we persisted with the 'three-fingered-salute' of Ctrl-Alt-Delete.  Why not summon the system with one key instead of a strange combination that seems only to discriminate against amputees (underlying interrupt structures notwithstanding, of course)?<blockquote>

Easy. I think it was IBM that needed a soft-reset keystroke. Since you lost all your data when this occurred, it must be a keystroke you intend on putpose. CTRL and ALT on one hand, and DEL on the other side of the keyboard. Far apart so it's hard to hit accidentally.

Of course, badly behaved DOS programs crashed a lot, so people started hitting CTRL-ALT-DEL when things went awry. (There's a joke that went "IBM invented Ctrl-Alt-Del, and Microsoft popularized it").

Windows comes along, and hey, what would people do with a non-responsive Windows app? Ctrl-Alt-Del. So thus, it was sort of ingrained in years of hitting those three keys...

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 3:36 AM by Mike Dunn

Ah yes, the PC-98. Gotta love a computer where the hard drive is A:

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 3:41 AM by Morten

"function keys VK_F13 through VK_F24"

I remember working on an IBM terminal in the late 80s and it had 24 function keys, all used as shortcuts to different panels of the application. All of a sudden I remember why I love my mouse and my GUI... ;-) Nostalgia isn't what it used to be.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 3:41 AM by Morten

"function keys VK_F13 through VK_F24"

I remember working on an IBM terminal in the late 80s and it had 24 function keys, all used as shortcuts to different panels of the application. All of a sudden I remember why I love my mouse and my GUI... ;-) Nostalgia isn't what it used to be.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 5:32 AM by Bill

>Windows comes along, and hey, what would people do with a non-responsive Windows app? >Ctrl-Alt-Del. So thus, it was sort of ingrained in years of hitting those three keys...

Except that in the NT line, CAD is no longer used for (just) killing an unresponsive app, it brings up the "Windows Security" (GINA) screen/dialog/menu (except on XP with FUS enabled, then it maps to "please start the task manager, if it's not too much trouble").

It would make much more sense for CAD to be "bring up a priority-boosted task manager" and SysRq to be the "Windows Security" button, although I'm sure that's impossible these days. (But surely giving the task manager a priority boost by default isn't so hard...)

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 7:28 AM by Neil

ntl, BREAK=OFF (which is the default) only checks for Ctrl+C or Ctrl+Break during screen I/O while BREAK=ON checks during all I/O so for instance when using dir/s to find a file, you can Ctrl+C after the first hit.

Interestingly Ctrl+Break doesn't seem to break a dir/s/p properly on Windows 2000/XP.

# re: Scroll lock in excel

Tuesday, February 12, 2008 8:38 AM by JG

> scroll lock locks the window scrolling to the arrow keys in excel.  Makes for some frantic help desk calls.  "My excel is broken, when I try to go to the next cell the whole screen moves!!!!" But it can be useful on large spreadsheets and you want to stick to keyboard navigation.

Took me a while to figure this one out after I got my KVM switch as it uses double scroll lock as the shortcut key for switching terminals.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 12:02 PM by Yuhong Bao

"(But surely giving the task manager a priority boost by default isn't so hard...)"

In fact I think Windows already does that.

BTW, the Mac keyboard I am using right now have 16 function keys.

BTW, Ctrl+Alt+SysRq was a common key for entering debuggers.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 7:47 PM by Mark

Neil: this is probably because dir uses some internally blocking function to wait for a keypress, but Ctrl+Break is still queued up to the input buffer...

The only other question (that I think was confusing other people above) is why Break on its own doesn't cancel dialogs.  It does.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Tuesday, February 12, 2008 8:04 PM by Matt M

The old Wang micro/mini keyboards had a "Cancel" key.  They also had "Execute" and "Help" keys, both of which seem to have a VK_ shortcuts.

The Wang systems were PC-compatible (with a special board) and it's possible that Windows might have run on them.  This was 8086-era and I was still running DOS at the time, so I'm not sure on that point.  

I found a pic with a blurry version:

http://home.planet.nl/~janvdv/images/WangClassic.JPG

Help is on the top left, cancel on the top right (or was that reversed) and execute is either the big button above the arrows or the small one below it.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Wednesday, February 13, 2008 1:14 PM by MadQ

Sorta off-topic, sorry.

@James Schend: You can remap the keyboard scan codes. See http://support.microsoft.com/kb/Q181348 or google "Scancode Map".

The scan code for the NumLock key is 0x45. CapsLock is 0x3a. However, if I understand you correctly, then you'll probably want to remap all the keys on the numeric pad with NumLock off. Wouldn't be hard to do, just tedious. You can use Spy++ to figure out which scan codes you need.

Other than that, you're on your own.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Thursday, February 14, 2008 12:11 AM by Igor Levicki

"I answered this question over three years ago."

Oh but I read that. Problem is that those dialogs that don't work look like regular message boxes. How is user supposed to distinguish between real dialog with IDOK and IDCANCEL or IDYES and IDNO, and some fake which looks identical but ignores the keys?

What is even worse for Yes/No they do not make the buttons with &Yes/&No so you can't dismiss it with Alt+Y/Alt+N.

As for boosting Task Manager -- that doesn't work.

Few days ago I mistakenly set the real-time priority on Prime95 benchmark which was running on both cores of my dual-core system.

I immediately tried to hit Alt+E to End Task but it was too late. Keyboard didn't respond anymore and even Ctrl+Alt+Del didn't do anyrhing even though I waited for 5 minutes. Window manager stopped repainting the desktop and it has gone black (because it actually tried to bring up the Task Manager). After a while I figured out I will have to reboot.

I wonder now how could the keyboard input get ignored? Isn't the input thread running at realtime priority itself? After all user input is a realtime event.

I believe that such a spectacular hang should've never happened in a system with a properly designed multitasking and with scheduler using fixed 20ms time slices.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Saturday, February 16, 2008 2:20 PM by Gabe

I believe that such a spectaculr hand is exactly what should happen in a system with a properly designed scheduler when a process with realtime priority uses 100% of the CPU(s).

# re: Why does Ctrl+ScrollLock cancel dialogs?

Saturday, February 16, 2008 10:22 PM by Yuhong Bao

>there are several keys which are basically nothing but support call generators... Num Lock, Scroll Lock, Pause, Insert.

Num Lock and Caps Lock in my opinion aren't too bad, but you are right that for a while, I did not even know what the Insert and Scroll Lock keys are for. In fact only now I know that the Pause key were intended to stop console output. Ctrl-S and Ctrl-Q were also intended to stop console output.

>Apple did some brilliant things with their keyboard (notably, providing "return" and "enter" as separate keys), but they've actually reverted to the old behavior as their ranks are filled with Windows converts.

On the other hand, Mac keyboards have backspace labeled as "delete". Plus the Apple logo on the  Command key lasted far longer than it should have lasted. For those interested, the first Apple computer to use ADB was the Apple IIgs. Later ADB was used on the Mac with Mac SE and II. ADB allowed the Apple IIgs and Mac to share the same keyboard, thus a key that could act as both an Apple key on the Apple IIgs and the Command key on the Mac was needed, thus the presence of both the cloverleaf and the apple on the Apple/Command key. Even Apple's USB keyboard, which would not work on the IIgs without an USB-to-ADB adapter, had the Apple logo on the Command key. Apple finally got rid of the Apple logo on the Command key and labeled it as "Command" with the recent Apple Aluminum Keyboards. On the Control/Command key confusion on Windows/Mac: Microsoft copied the Command key on the Mac as the Control key, and then Apple added a Control key on the ADB keyboard to support the Apple IIgs.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Saturday, February 16, 2008 11:03 PM by GreaseMonkey

SysRq/PrtSc and Pause/Break spew out really weird sequences. Here's some screwy stuff I've found:

- SysRq: e0 2a e0 37 (LShift + PrtSc)

- {Shift | Ctrl} + SysRq: e0 37 (PrtSc)

- Alt + SysRq: 54

It makes some sense that Shift+PrtSc is SysRq; after all, it is the same key on most keyboards these days.

- Break (none on release): e1 1d 45 e1 9d c5 (a third - Ctrl key + NumLock, instantly released)

- Ctrl + Break (none on release): e0 46 e0 c6 (a second ScrollLock, instantly released)

Ctrl+Break does not need to be the same as Ctrl+ScrollLock, because it is treated as a second ScrollLock when pressed, and should be detectable.

I hate those AT keys...

# re: Why does Ctrl+ScrollLock cancel dialogs?

Saturday, February 16, 2008 11:04 PM by Yuhong Bao

On the other hand however, Apple's ADB keyboards replaced NumLock with a Clear key (Mac OS did not support the arrow mode at all and the numeric keypad did not have arrows), and replaced the Insert key with a Help key. And the keys SysRq/PrtSc, Scroll Lock, and the Pause/Break were replaced with the additional function keys F13-F15. On the Apple Extended Keyboard, the corresponding PC keys were written in smaller letters and there were the normal NumLock/CapsLock/ScrollLock lights for use in, for example, PC emulation.

# re: Why does Ctrl+ScrollLock cancel dialogs?

Saturday, February 16, 2008 11:08 PM by Yuhong Bao

On the later Apple USB keyboards, the *lock lights were removed.

# als de zoek-functie in Visual Studio niet meer werkt

Tuesday, June 10, 2008 5:39 AM by Jo-wen Mei

Ok. Op een gegeven moment kon ik niet meer op strings zoeken in visual studio. Ik kreeg de melding: &quot;No

New Comments to this post are disabled
 
Page view tracker