19 Mar 2017 @ 4:42 PM 

With older CRT screens, “Burn in” was when the phosphor coating was effectively “burned off” by the scanning beam. There were many examples of older computer displays that were permanently displaying the WordStart Menu or Lotus 1-2-3 Menus, for example, because people would have them open so long.

This problem was “solved” by LCD displays. But as it happens there is a similar symptom that can occur with IPS displays, it’s just not typically quite as permanent.

A few years ago I got a 2560×1440 IPS Monitor to replace the 1440×900 TN panel I was using. It has served me well, however over time I’ve noticed a “darkening” near  the top of the screen. It never matched up with images I would display- my browser or Visual Studio- for extended periods of time, so I figured it was a minor defect. It was not particularly noticable either.

More recently, though, I was able to clearly make out many Firefox icons in precisely the location they are when the Firefox Window is maximized on that screen. This is because on a few occasions I decided not to turn that screen off overnight. The image persists apparently because of electrical changes in the actual cells, which effectively result in it letting less backlight through at the same voltage level.

I’ve already ordered a new monitor, but I’ve had some success at least diminishing the afterimage by leaving a full white screen overnight a few times. (Just a quick Windows Forms program). I’ve also taken to not having Firefox maximized but instead expanded manually to fill the screen but shrunk downwards a bit so the same elements aren’t in the location that was “persisted”.

It’s interesting that the afflictions of yesterday’s technology that were purported to have been solved have at least in some way remained with us. While it allegedly can be fixed (with either a full white or full black screen, depending who you ask), it is certainly something worth avoiding to begin with. I certainly found the behaviour unexpected, thus making this quick little post on the topic.

Posted By: BC_Programming
Last Edit: 19 Mar 2017 @ 04:42 PM

EmailPermalinkComments (0)
Tags

 17 Mar 2017 @ 9:59 PM 

There has been some concern and even repudiation about Microsoft’s decision to not provide updates to Windows 7, 8, and 8.1 when run on hardware using a newer processor, such as the Intel Kaby Lake processors. This has been claimed by some as a marketing move to try to “force” users to use Windows 10.

Now, I’m not the greatest fan of some of the things introduced with Windows 10. At the same time, I have no modern systems- other than Virtual Machines- not running either Linux or Windows 10. So it’s more an annoyance at how much one has to do to appropriately assert one’s desired options with Windows 10.

Windows 7 and 8/8.1 have continued to be supported as per the Windows lifecycle; the change is for hardware that was literally introduced after the end of mainstream support for both operating systems. Extended support only applies to Security updates; however, supporting security updates on Windows 7 and 8/8.1 with those Processors would mean supporting the processor. The issue there is that while the newer chips likely run the same way as older chips did with the same code, there is no guarantee of that, and it would still require the software to be tested and bugfixed specifically for those newer chips, which means effectively, supporting the new processors.

The Updates cannot go out on an “as is” basis to systems with the new processors because hten any problems will incur support costs and bugfixes to those updates that will also effectively mean supporting the new processors on the older software.

Worth noting is that this doesn’t lock out enterprising users who are willing to take the risk that their entire Win7/Win8/8.1 system will stop functioning due to said updates. One can still workaround this, it just requires you to step off the beaten path even further, making it much more clear and far “safer” for Microsoft to tell you to basically piss off if you try to get support.

It’s likely this approach may have been adopted to try to prevent another repeat of the Windows XP diehards. Mind you, it hasn’t worked so far; Many people are now Windows 7 diehards to much the same capacity. But at least- from Microsoft’s perspective- they won’t be financing it.

Posted By: BC_Programming
Last Edit: 17 Mar 2017 @ 09:59 PM

EmailPermalinkComments (0)
Tags

 26 Feb 2017 @ 12:21 PM 

BASeCamp Network Menu, which I wrote about previously, was a handy little tool for connecting to my VPN networks. It, however, had one disadvantage- It was clearly out of place- the style was “outdated” for the OS themes:

BCNetMenu displaying available VPN connections.

As we can see above, the style it uses is more like Office 2003, Windows XP, etc. Since the program is intended for Windows 10, that was a bit of a style issue, I think. Since none of the other Renderers really fit the bill, I set about writing my own “Win10” style menu foldout ToolStrip Renderer; Since the intent was merely to provide for drawing this menu, I’ve skipped certain features as a result to make it a bit easier.

Windows 10 uses an overwhelmingly “flat” style. This worked in my favour since that makes it fairly easy to draw using that style. Windows Forms- and thus the ContextMenuStrip one attaches to the NotifyIcon, allows overriding the standard drawing logic with a ToolStripRenderer implementation; so the first step was to create a class which I derived from the ToolStripSystemRenderer. This attempts to mimic the appearance of many Windows 10 foldouts by first drawing a dark background, then drawing a color over top. However- the color over top is where things were less clear. We want to use the Accent Color that is defined in the Windows Display Properties. How do we find that?

As it happens, dwmapi.dll has us covered. However, it bears warning that this is currently an undocumented function- we need to reference it by ordinal, and since it’s undocumented, it could be problematic when it comes to future compatibility. It’s very much a “use at your own risk” function:

This function uses DWMCOLORIZATIONPARAMS, which we of course, need to define:

Once defined, we can now create a helper method that will give us a straight-up color value:

We allow for an “Opaque” parameter to specify whether the caller wants the Alpha value or not; of course, t he caller could always do this itself but the entire point of functions is to reduce code so may as well put it in this way. it takes the 32-bit integer representing the color and splits it into it’s appropriate byte-sized components through shift operators, and uses those to construct an appropriate Color to return.

Using this color to paint over an opaque dark background (the color used with the Taskbar Right-click menu, for example) gives the following Menu, using the new WIndows 10 Renderer I created:

Not a bad representation, if I say so myself! Not perfect, mind you, but certainly fits better than the Professional ToolStrip Renderer, so I don’t think calling it a success would be entirely out of band. A more interesting problem presents itself, however- When configured in the display properties to have transparency effects,The default Windows 10 Network foldout has a “Blur” effect. How can we do the same thing?

After unsuccessful experiments with DwmExtendGlassIntoFrame and related functions, I eventually stumbled on the SetWindowCompositionAttribute(). This could be used to set an accent on a window directly- including, setting Blur Behind. Of course, as with any P/Invoke, one needs to prepare yourself for the magical journey with some declarations:

If the Blur setting is enabled, then the EnableBlur function is called to enable blur; otherwise, to disable blur. In both cases, it tosses in the Handle of the ToolStrip that is opening, which, apparently, is the Window handle to the actual menu’s “Window”, so it actually works as intended:

I also found that darker colours being drawn seemed to be “more” transparent. Best I could determine was that there is some kind of transclucency key; the closer to black, the more “clear” the glass appears. References I found suggest that SetLayeredWindowAttributes() could be used to adjust the colour key, but I wasn’t able to get it to work as I intended; Since the main effect is that the “Disabled” text, which is gray, appears like more “clear” glass within the coloured blurred menu, I found it to be fine.

It will still be ideal to write additional custom draw routines in order to allow checked/selected items in the listing to be more apparent. As it stands the default “Check” draw routine appears more like an overlay on the top left of the icon, but it’s easy to miss; it would be better to custom draw the items entirely, and instead of a checkmark perhaps highlight the Icon in some fashion to indicate selection.

Posted By: BC_Programming
Last Edit: 26 Feb 2017 @ 12:21 PM

EmailPermalinkComments (0)
Tags

 16 Feb 2017 @ 5:16 PM 

I’ve adjusted the program to add more options:

  • Font settings can be customized
  • Left-clicking on the Notification Icon will now show the network menu
  • The tooltip will now display connected networks
  • implemented a new “Windows 10 Style” Menu Renderer. This is the default when installed on Windows 10, and will by default use the Windows 10 Accent Color as well. (No blur behind). It’s not precise and is more a stylistic imitation but it fits better with Win10 than the other Renderers (IMO)

As usual the latest source can always be found On github. And The Installer for 1.1 can be found Here.

Posted By: BC_Programming
Last Edit: 16 Feb 2017 @ 05:17 PM

EmailPermalinkComments (0)
Tags

 29 Jan 2017 @ 6:11 PM 

I wrote previously about manners in which the SimpleWifi library can be utilized to enumerate available wireless connections and disconnect or connect to them. As my entire reason for writing BCNetMenu, however, was for VPN connections- not for wireless connections- it was necessary to figure out that piece of the puzzle as well.

The approach I discovered may not be entirely forward compatible, however it appears to be functional going back through many versions of Windows, so it ought to keep working. I wasn’t able to find a more official, “sanctioned” method. Thje basic idea is to effectively read the configuration information directly. The Configuration information for VPN connections can be found in the file “%APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk”. I suspect it may also be in the corresponding Common Application Data folder, found set in the %PROGRAMDATA% environment variable.

Retrieving the VPN names is fairly straight forward; effectively, we just want to find the section names. We can use a straight String parse of each line, but we can also use a Regular Expression with a group to define the actual name. Matches to:

is sufficient to find all the appropriate sections, and retrieve the names via the matches. However, the name is not quite enough; we need to cross-reference this information with information available via the NetworkInterface class; then we can use appropriate properties to return a particular data object representing the VPN connection:

is a direct link to the code in question as it appears in the BCNetMenu project. I’ve been pleased with the programs performance over the past month or so in replacing the default Windows network foldout to which I have less positive affinity.

But enumerating connections is one thing- connecting or disconnecting is another. After some searching I ended up finding only one method that was suitable for my use case, as other methods either required manual password input or to have BCNetMenu manage passwords, which I felt was outside the scope of what I wanted to do. Instead, the program will basically just run rasphone.exe with the appropriate VPN name; while this will show a dialog, the saved login information is pre-populated, so, at least for my intended use, I’ve found it sufficient to improve upon the default Windows 10 VPN Foldout.

For the same of comparison, here is the “before” image:

The default Windows 10 Network Foldout

This is an entirely usable foldout- or, it appears that way. However, clicking a connection takes one to the Control Panel. For example, here is the WIndow that appears when I click the connected “Mainframe” option:

From a UI design perspective this boggles my mind. There is zero indication that I clicked “Mainframe” at all. Why are these options listed separately and clickable individually if they all lead to the same place? Clicking a connected VPN connection should disconnect it; clicking a disconnected VPN connection should connect it. The way it has been altered in Windows 10 defies good UI design as far as I’m concerned.

Not that I’m any expert on good UI design; I just know what is easy to use for myself and when a “feature” or alteration causes one to occasionally mumble to themselves angrily or laugh about how silly the feature is even months after it’s introduction it probably wasn’t for the best. As far as getting the desired behaviour, I had two alternatives; the one that I originally used was a registry adjustment which would set the foldout to use the Windows 8 implementation. This worked for some time, however I found that, since the dialog hadn’t had adjustments for Windows 10, some features didn’t work properly; I found in some cases it wouldn’t respond to clicks or refused to connect to a wireless network, but the network control panel functioned as intended. In order to bring back my own desired behaviour, I created BCNetMenu, which appears like this:

BCNetMenu displaying available VPN connections.

It’s not the fanciest thing in the world; it’s not intended to blow anybody’s mind with an amazing glass-like appearance or transparent Window blur or anything like that. It’s a relatively basic pop-up menu that just lists available connections. Clicking a connected one disconnects. Clicking a disconnected one connects.

As it should be, if you ask me!

Posted By: BC_Programming
Last Edit: 05 Feb 2017 @ 10:27 PM

EmailPermalinkComments (0)
Tags
Categories: .NET, C#

 08 Jan 2017 @ 12:10 PM 

When I wrote BCNetMenu, it was primarily for replacing Windows 10’s built in network foldout for VPN connections. However since that Network foldout also managed Wireless connections, I decided to add that in as well.

When you have a need that would be filled by a library, it’s always a good idea to look through results on NuGet and see what there is. As with most requirements there are many options when it comes to reading Access Point information. In my case, I settled on SimpleWifi

The Consumer code for SimpleWifi is, well, Simple, which is one of the reasons I opted for it. It provides the information needed and was quite easy to use. Here is an example static that provides an enumerator method that retrieves Access Points:

I found there was an odd issue with this approach. it seemed as if AP info would “trickle” in over time; the second time I opened the menu there would be more access points. I don’t know why that was, but I added a bit of extra code with the intent of providing a larger set of “seed” networks when the menu is opened for the first time. It seems like the act of inspecting Access Points causes more to be actually added. At any rate this is the logic I added to the start of the GetWirelessConnections() logic:

This appeared to rectify my problems, and the Menu that used this method was properly showing available wireless networks appropriately.

Posted By: BC_Programming
Last Edit: 08 Jan 2017 @ 12:10 PM

EmailPermalinkComments (0)
Tags
Categories: .NET, C#, Networking

 17 Dec 2016 @ 7:20 PM 

I’ve complained before about Windows 10’s rather odd VPN and even wireless connection interface, in that it has excessive levels of redirection. I went ahead and wrote a small program that appears as a notification icon which attempts to make it a bit more straightforward. It’s not fancy, but it seems to get the job done.

I’ve put it up on github, it can be found here.

Posted By: BC_Programming
Last Edit: 17 Dec 2016 @ 07:20 PM

EmailPermalinkComments (0)
Tags
Categories: .NET, C#

 05 Dec 2016 @ 10:29 PM 

I’ve not been particularly partial to Macintosh computers, having gravitated largely towards the somewhat more “open” environment that is the typical PC. However while browsing eBay I saw a reasonably priced PowerMac G5 and decided to jump on it. My only experience with Macs is limited largely to the slot-loading iMac G3 and OS 8.6; however, I also toyed with programs like MiniVMac to emulate System 7. (I also had PearPC working somewhat with OSX but it didn’t run very well).

The system itself was not working as-is; it didn’t have a Hard Disk. I threw in a spare 1TB SATA SSHD, and was able to, after some fighting with it, get OS X 10.4 (Tiger) to install to it without issue. I would have gone with OS 9 first (just to fiddle with Classic OS stuff first) but it isn’t supported. Oddly, I found I had to initialize the drive on my Windows System before the G5 could get past the “partitioning” stage.

I’ve been experimenting with the system since. It’s a relatively base G5; it’s only a single core, and it had no Airport for Wifi; as a result I’ve been sneakernetting files over to it via a 128GB USB Flash Drive. I’ve actually been rather impressed with the system- I have a Pentium 4-based system which would be it’s era-contemporary and I’d argue that while both systems are getting long in the tooth in terms of software compatibility, the G5 certainly seems to bear it better, and is incredibly responsive under most circumstances.

I found the two systems about equivalent in terms of playing videos; both can play DVDs just fine, but struggle with 1080p mpeg-4s; reducing the resolution to 480p, however, and the videos will play without any problems. I’ve not put the G5 onto the Internet yet; it lacks the connectivity to do so, as it doesn’t have an Airport card. I got one off of eBay for about 10 bucks which should provide connectivity, and I’ve got TenFourFox, a fork of Firefox, which should work on the system for browsing; so how well that will work remains to be seen. I expect capabilities at least on par with the contemporary Pentium 4 system in terms of performance; which means it should be usable for browsing forums, E-mail, writing posts here, etc.

Mac OS X Desktop

Mac OS X Desktop

I’ve loaded the system up with a bunch of software I sneakernetted across, for now; It’s got USB 2.0 so while the 128GB drives transfer more slowly than on my main desktop and laptop systems which support USB 3, it’s nowhere near the ordeal that it would be with USB 1.1. The biggest annoyance so far is finding the correct versions of software; software like Netbeans IDE for example had versions which ran on OS X 10.4 Tiger, but I’ve been unable to find the old install files and their archive only goes up to 6.0.1 which requires Java 6 or 7 which I’ve also been unable to install, so I’ve hit a wall there. Mono installed, but doesn’t work due to Library issues; I found a slightly older version (one of the early .NET 2.0 releases of the CLR) but that one just claims there is nothing to install which is odd. Currently it doesn’t have an Internet connection as the system lacked the necessary Airport Extreme (or PCI-X) add-on; however I have one on the way from Ebay; and with TenFourFox (A FireFox fork which ports it to OSX PowerPC) I think it will work at least as well as my Pentium 4 system for browsing. In fact it may work even better; I’ve found it performs very well, with even Photoshop CS2 working only slightly slower on it then Adobe CS5 does on my more modern 4770K i7 system. I’ve loaded it up with useful software such as Office 2008 for Mac and older versions of software like TextWrangler; I’ve also got svn and git on it and presume I can connect to my work VPN which could make things interesting; It would be possible to develop using it by using a text editor and svn (obviously Visual Studio isn’t going to be running on the PowerMac PPC!). I’ve also found it outperforms the Pentium 4 system with games like Quake III:Team Arena which perhaps isn’t surprisingly- the Pentium 4 CPU was a bit of a mess in terms of performance compared to both AMD and PowerPC in many ways.

I bought it as “retro” system as at this point it very nearly is. And yet I’m finding myself impressed with the OS design, something which I never really expected. Naturally there are still some things I don’t like about OSX (I’m not a fan of the traffic light window management buttons, for example) But the responsiveness of the system has been quite stellar.

Posted By: BC_Programming
Last Edit: 05 Dec 2016 @ 10:29 PM

EmailPermalinkComments (0)
Tags
Tags: , , , ,
Categories: Macintosh

 24 Nov 2016 @ 10:03 PM 

There is a seemingly common affliction affecting some users of Windows where they find that their desktop icons receive old-style focus rectangles. This seems to affect Windows Vista and later.

Dotted Focus Rectangle.

After some investigation, I found the cause to be an Accessibility setting. inside Ease of Access in Control Panel, There is a “Change how the keyboard works” option. This option takes you to another page with “Underline keyboard shortcuts and access keys”. When this option is checked, Keyboard cues are enabled. This includes the underlined text of menus and buttons- but it also includes ListView Focus Rectangles, which means with the option enabled there is a Focus rectangle shown on the desktop rather frequently.

To change this setting, toggle it and reboot.

Posted By: BC_Programming
Last Edit: 24 Nov 2016 @ 10:03 PM

EmailPermalinkComments (0)
Tags

 09 Nov 2016 @ 8:30 AM 

I’ve previously written about making adjustments to the Windows Master Volume control programmatically. I alluded to the addition of possible other features such as being able to view the volume levels of other applications. I’ve gone ahead and made those changes.

The first thing to reiterate is that this makes use of a low-level .NET Wrapper for the Windows Core Audio API. This can be found here.

The first thing I decided to define was an object to represent a single Applications Volume Session info/properties. In addition, it will be provided a reference to the IAudioSessionControl interface representing that application’s Audio session, so it can be directly manipulated by adjusting the properties of the class.

Next, we need to declare a COM import, the Multimedia Device enumerator. Specifically, we need to import the class, as the Vannatech Library only provides interfaces, which we cannot instantiate:

Now that we have a starting point, we can create an enumerator method that retrieves all active audio sessions as “ApplicationVolumeInformation” instances:

A github repository with a more… complete… implementation of a working Console program can be found here.

Posted By: BC_Programming
Last Edit: 11 Nov 2016 @ 12:29 PM

EmailPermalinkComments (0)
Tags
Categories: .NET, C#, Programming, Windows





 Last 50 Posts
 Back
Change Theme...
  • Users » 41946
  • Posts/Pages » 350
  • Comments » 104
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight

PP



    No Child Pages.

Windows optimization tips



    No Child Pages.

BC’s Todo List



    No Child Pages.