Click here to Skip to main content
15,943,294 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Here's the problem:

I am writing a secure kiosk style "shell" application with its own desktop and taskbar, for use in bar entertainment rental systems. For security, I need the taskbar, start menu, notification area, etc of the operating system to remain hidden from the client at all times.

It all works perfectly except for one third-party media-player app which absolutely insists on calling the windows taskbar whenever it loads. That media-player is central to the project, so I can't abandon it, its original programmer is unavailable for comment, and I don't have the source-code for it (which was written in C++ using the Bass Player Library).

Here's what I've tried so far and the results:

1) 2 different ways of hiding the Windows taskbar and Start Globe, with internal code and an external application. - The offending program "unhid" the whole lot on start-up and flashed its icon at me. (Both ways work fine for every other app in the kiosk.)

2) Embedding the app as a process in my kiosk software. - It still unhid the taskbar and flashed its icon, even though it was no longer "unowned"

3) Running the kiosk app as a shell in place of explorer (which is the way it is intended to function). - The program stalls when it gets to the point where it is trying to access the taskbar.

4) "Taskkill" windows explorer after loading the kiosk app. - The program once again stalls when it gets to the point where it is trying to access the taskbar.

I've come to the conclusion that what I need to do is somehow catch the calls from the third-party app to the taskbar and redirect or dispose them, possibly allowing the app to display its icon on my kiosk taskbar instead of the Windows taskbar, but I'm not sure how to do it. My research has thrown up something called the "Shellproc callback function", which may be the answer, but everything I can find about it relates to C++ (of which I have no experience whatsoever), nothing in VB.Net or even C#, so the more I read the more confused I'm getting! The ideal would be for my kiosk's taskbar to take over the full function of the Windows taskbar, but I don't know if that would be asking too much. The minimum acceptable workaround would be, when the Windows taskbar pops up, it does so in a locked condition, such that even though it is showing, it is "unclickable".

Can anyone tell me if what I need to do is even achievable in VB.Net, and, if so, maybe give me a bit of starter code or at least a pointer in the right direction?

Thanks.
Posted
Comments
djdynamix 27-Sep-12 9:40am    
OK, still researching here. Currently struggling through Arik Poznanski's Code Project article. "C# does shell", which is one of the few resources I've found that even approachmy level of understanding. As I understand it, I have to put my kiosk "taskbar" toolstrip into its own window and register it with the OS as an "Application Desktop Toolbar", so it is able to receive the taskbar calls from the app.

Even though Arik's article is excellent, it's still a little bit above my head, and also in C#. (I'm a VB.Net kinda guy.) I'd be REALLY grateful if someone could check it out and give me a "for dummies" translation, preferably in VB.Net. I don't need his entire project, just the bits referring to calls from top level windows to the taskbar. I do, however, need a bit more than just a VB.Net translation of the code. I can do that myself in "Sharp Develop", but I need to understand what the code is actually doing so I can adapt and implement it.

Thanks again.
djdynamix 27-Sep-12 21:27pm    
Another update... I've found a temporary workaround in order to get some machines out. (I had to, because I had clients waiting!) It's a bit convoluted, but it works for now.

First I load the kiosk with "Task Manager", instead of as a shell. Within the kiosk software I placed a fairly standard "Hide Taskbar" class, which you can easily find on here or on several other websites to download in C#. I just translated it to VB.Net with "Sharp Develop" and pasted it in. I then made sure that the kiosk called "taskbar.hide()" from that class everytime a window was opened or closed.

To deal with the one app which popped up the taskbar regardless, I then downloaded a freeware app which removes the "Always On Top" feature of the windows taskbar, and used Task Scheduler to run it at every logon. The "rogue" program now pops up the taskbar invisibly behind the kiosk. For anyone who is interested, you can obtain that app from http://www.sevenforums.com/tutorials/54842-taskbar-always-top-disable-enable.html.

Finally, to ensure that the user can't just tab through to the taskbar, I downloaded "Autohotkeys" (another fine piece of freeware) and used it to redirect Alt+Tab, Alt+Esc and a few other hotkey combinations.

I still want to do the job properly, and have my kiosk run as a proper shell with a functioning taskbar of its own, but at least the project isn't stalled until I can.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900