09-19-2008 10:23 AM - edited 10-21-2015 04:15 PM
10-30-2008 05:47 AM
Wow, this is really great work. Thank you so much for that library. It came just in time for our projects.
I immeditately tried it on LV 8.5.1 on a x86 third party Touch Panel (Syslogic) running win ce5.0 and it works phantastic.
Now that we have this great features available some questions come to my mind:
Is this library also running on ARM and did you try it on LV 8.6?
If I got it right your library does not require something like a function RegSave.exe like it was published in http://digital.ni.com/public.nsf/allkb/03EBFA9BE4718CEE8625722F0009C396
to safe the settings. But it requires a reboot. Although the helper executables of above link provide a reboot it does not work on my x86 target. It would help very much to be able to reboot even third party Touch Panels with such a reboot call. How can that be done?
Thank you again for this really great library.
Franz
11-04-2008 05:49 PM - edited 11-04-2008 05:54 PM
Hi Franz,
Glad you found it useful. I have tested it on LabVIEW 8.6, but have only tested on NI's touch panels. Since it uses standard Windows CE API calls that are pretty constant across CE versions, it should work on most hardware as long as it has a full implementation of CE.
As for programatically rebooting, I believe you can do it with the KernelIOControl function, but I haven't actually written a LabVIEW routine to do so. It's good feedback to know that you need it though, I'll put it on my list of things to do in the future, although I cannot give an estimate on how long it will take me to get to it.
Thanks for the feedback!
Ryan King
NI Systems Engineer
11-13-2008 12:46 PM
Thank you for providing this functionality!
Currently (as happens all-too-often), I am designing code without the hardware. In this case, the code is a UI and the target will be a TPC-2012, once we get one in house. I have been developing a LV project with UI pages inside the a NI TPC-2012 Device target, but I need to keep at least one vi in My Computer target (otherwise I am asked to compile the code to the TPC target, which we don't have!). This has worked fine up till now.
However the Windows Manipulation vi's throw up an error dialog at runtime "Supported only on PDAs". Is this due to the inline C code? More impotantly, is there anyway to emulate their functionality on my development PC while we wait for the hardware?
Thank you.
11-13-2008 01:34 PM
Unfortunately, there is not a way to emulate the inline C node on Windows targets. I'm hoping at some point they will implement it for Windows targets, since it is much easier for doing this sort of thing than the CLF nodes are, but it's currently a new feature and is supported only on PDAs, touch panels, and embedded targets.
I can think of a couple of possible solutions:
1. Make the same calls using Call Library Function nodes. This should work on both Windows and the Touch Panel, but it's going to be a lot of work.
2. Use a conditional disable around the inline C nodes and perform similar operations. In Windows, most of the functions are available through VI server. This has the drawback that you won't really be testing the code, but will at least allow you to test the rest of your code.
3. Look into setting up an emulator for the hardware. I've never done this with a touch panel, but I've done it with PDAs before. It's usually a pain to get it all set up, but if you find a good emulator it's the most accurate way to test code.
Regards,
Ryan King
NI Systems Engineer
12-01-2008 03:33 AM
I found the Window Manipulation library useful for my TPC-2106 application - thank you very much. However, the Hide/ Show Taskbar VIs didn't work until I debugged and modified the line:
if(!(hwnd = FindWindow(_T("HHTaskBar"), _T("")))) - the original was: if(!(hwnd = FindWindow(_T("HHTaskBar"), "")))
It's also a shame that after hiding the Taskbar I have to mess with all my HMI "pages" (20 off, add Maximize VI window). The same inconvenience applies to Hide Mouse Cursor.
Regards
Boyko Bejaniyski
12-01-2008 11:11 AM
Thanks for the feedback Boyco,
The _T, is interesting. I haven't tested on a 2106, my 2012 worked without specifying a wide character for empty strings, but you are correct that they really should be wide. I'll make an update to the library.
I was a little confused about the second part of your post. The Hide Taskbar VI should automatically Maximize the window if you pass it the name of your VI, and the Hide Mouse Cursor shouldn't require maximizing the window.
Regards,
Ryan King
Systems Engineer
National Instruments
12-02-2008 02:25 AM
Dear Ryan
To clarify the second part of my message: Once you hide the task bar in the first window, which of course maximizes this first window of the application (in my case an HMI with "pages" and HNE), you have to maximize every other "page" window, otherwise they don't fill the space of the missing task bar. I probably had to explain also: Prior to discovering your new libraries, I was hiding the taskbar by setting its properties accordingly.
I didn't mean that hiding the mouse cursor needs maximizing the windows - it's labour-intensive to put it in every window, same as with the maximizing for the taskbar.
Regards
Boyko
12-02-2008 10:03 AM
Ahh, now I understand. As far as maximizing the windows, you should be able to maximize all open windows by calling the VI in a for loop with the Window names. Of course, if you are opening and closing windows, you'll still need to have a way to handle that. As you mention, an alternate way to hide the taskbar is just to modify its settings in the registry. You can do that programmatically using the registry access library that is also covered in this thread, I think I even included an example with the correct key names. The disadvantage of that aproach is that you generally have to reboot for the registry settings to take effect. As for the mouse, it's a window specific setting, so I haven't found a way to get around running the hide mouse cursor VI on each window.
Regards,
Ryan King
Systems Engineer
National Instruments
12-02-2008 11:09 AM
Thanks, Ryan
Indeed in my HMI applications I close each old page before opening the next. I may be better off with the registry settings for the task bar, it's a good option to do it programmatically and not rely on production engineers to do the settings for each unit.
Regards
Boyko Bejaniyski