I need to programmatically minimize and maximize a fullscreen 16bit application. Unfortunately DosBox is not an option as this app talks to some peripherals not supported by DosBox.
I was able to write code (heavy on the Win32 API) that can set the focus, send the alt + enter keys and minimize/maximize.
Everything would work, however, some users have figured out that Alt + Enter can exit fullscreen and have started to abuse this.
I can disable Alt + Enter using the settings in a PIF, but that breaks my approach of programmatically sending those keys.
Is there a better alternative for getting NTVDM to programmatically toggle fullscreen than sending Alt + Enter?
I used Spy++ and found that to achieve fullscreen NTVDM was changing the system resolution to 640 x 480.
I attempted to call the ChangeDisplaySettings API to toggle the resolutions as needed, but when I set 640 x 480 NTVDM still runs as a windowed app.
I'm considering setting up a low level keyboard hook (http://msdn.microsoft.com/en-us/library/ms644985(v=vs.85).aspx) to filter Alt + Enter. I could disable the hook for the brief moment it takes my app to send it. This sounds like a dangerous hack that could have a lot of side-effects. I'm also not sure it would work since NTVDM doesn't seem to use a message loop for processing keyboard input. The SendMessage API doesn't produce results, and Alt + Enter had to be sent using the keybd_event API. Any thoughts?
How about a different approach--quit trying to block it. Instead, keep track of the window (say 10x second), if it's not full screen and you didn't send an Alt-Enter in the last couple of seconds, send one.
If someone hits Alt-Enter it goes into a window and immediately back to full screen.
Related
I created a keypad app that stays on top, but does not take the focus so that on a touch screen it will forward whatever keys you press to the active application via SendKeys.
It works perfectly with every application I have tried it with... except, of course, for the one I actually need it to work with which is a Point Of Sale application. The POS application lets the user type in item codes on the keyboard but it doesn't have a good keypad for touchscreens so that's why I'm trying to create an external one for it (since I don't have access to the POS application code).
It actually does work when you first try it, but then it's pretty sporadic. Using the keyboard directly always works, so I'm not sure why SendKeys only works sometimes with this application. I've tried implementing it several ways... sending the keys as they are pressed, sending them altogether when the user presses the enter button on the keypad, copying the keys to the clipboard and then using send keys to do a Ctl-V and then Enter.
What other options do I have to simulate a key press to another application? SendKeys doesn't seem to perfectly simulate key presses, so is there a lower level mechanism I can tap into?
I should mention that when it doesn't work, what happens is that I get a beep from the POS application as though I'd pressed an invalid key. So it's not that it isn't getting some kind of input but clearly it isn't getting the key I'm sending it the same way it would from an actual keyboard.
I found this Windows Input Simulator: https://inputsimulator.codeplex.com/
Super easy to use and way, way, way better than SendKeys. And as a bonus, in addition to letting you simulate input, it also lets you set low level keyboard/mouse hooks.
I would like to know if it is possible to SendMessage and PostMessage to/in other application even if it is not activated, or somehow to interact with that application without disturbing the user....
So far all I want to do is detect Pixels at specific coordinates than to Click on specific coordinates.
Note: Please do not misunderstood, the reason I want to detect Pixels and than Click, is because the button does not has Class ID.
It is possible to use SendMessage and PostMessage to send mouse clicks at specific coordinates to a window. The messages to send would be like WM_LBUTTONDOWN, WM_LBUTTONUP, and WM_LBUTTONDBLCLK. These messages can be sent with the window minimized or hidden.
If you have Visual Studio, there is an included application called Spy++ (and Spy++ 64 Bit). If you use those programs and have them monitor the window messages to your target application, you can see the exact window messages that are sent when you manually click on the button.
It is difficult if not impossible to detect pixels when the window is not visible either due to being minimized, hidden, or just covered by another window. If the application will be running in Vista or later, you might try creating a DWM Live Thumbnail of the application inside your app and scanning the pixels from there to determine the button's location.
Hopefully this information will get you started or at least let you know how complicated this may be so you can make an informed decision to continue or not.
I was hoping someone could help me with simulating a function key combination in C#, in this case FN + F4.
Here's what I'm trying to do... I have an older touchscreen netbook that I recently installed Windows 8 on. It has a swivel screen so you can fold it down and use it like a tablet. Windows 8 runs surprisingly well on it. I had a few minor issues, most of which I was able to work out, but one remains.
When you first power up the netbook or wake it from sleep, the screen is at 30% brightness, and Windows thinks that this is the max setting, so increasing the screen brightness through the normal methods does not work. On my netbook, pressing FN + F4, restores the screen to full brightness. This is a minor annoyance though, because I have to swivel the screen back and forth to fix the brightness using the physical keyboard, when I'd like to just leave it in the tablet position and minimize wear and tear.
What I'd like to do is write a little application that runs on start up, and simulates the function key combination, so the brightness is restored automatically. Any suggestions would be greatly appreciated. Thanks.
The Fn key is not a key that is sent from the keyboard to the computer. It is actually used to change the meaning of keys on the keyboard (such that the keyboard sends different scancodes when the key is pressed with Fn held down).
You should be able to easily write a simple Windows Forms program that listens to key presses and shows you what has been received. Register for the KeyDown event. The KeyEventArgs your handler receives has various properties that you can inspect to see what is being received.
The FN key isn't a real keyboard key like the other modifiers (shift, alt, ctrl) nor is it a function key like the F1 - F12. The FN key is a hardware only key that simply tells the hardware to send a different keystroke while the FN key is being pressed.
So, you are going to have to adjust the brightness manually like "m-y" stated in the comments or through some other mechanism.
Reference Link.
I have an application where the taskbar flashes if an event has occurred. This is working perfectly, and was relatively easy to implement using a Win32 API described below:
http://blogs.x2line.com/al/archive/2008/04/19/3392.aspx
However, when I stop the flashing, sometimes the application is stuck in the "highlighted" state in the taskbar. This only gets reset by clicking on the application in the taskbar, minimizing it, then re-maximizing it. Is there a way to clear this from being highlighted without any user interaction?
Maybe instead of flashing it you could put an overlay icon on it - one line of code from C# with the Code Pack. Then when you want to clear it you could take the overlay icon away - again one line of code. Windows 7 only, however.
Can you post the code that you are using to "Stop" the flashing?
Have you also considered using a different flag such as:
// flash until the window comes to the foreground
FLASHW_TIMERNOFG = 12;
You will still need to click on the applicaiton to get the flash to stop, but you should not have to minimize then re-maximize the app to get the flash to stop.
You can include the FlashTaskbar snippet and use the following code
FlashWindow(Form.Handle, FlashMode.FLASHW_STOP)
I want to create an alarm app for myself. On certain conditions (i need to poll websites) i want my app to inform me and make it HARD TO MISS. So i can take appropriate action or ignore it if i need to do something else.
I wrote a test app and using a BalloonTip (ShowBalloonTip with notifyIcon) isnt great. One of my previous apps brings the window in front of you and does a MessageBox however that doesnt always work or work well (if i somehow miss it or accidentally forget to click ok no futher messages will occur).
What are your suggestions?
You could also make it a system tray application and change the icon out if there is something which requires attention, a la a messenger application. That may not be "hard to miss" but I am trained (for better or worse) to look down at the icon tray when I see something blinking.
Where I work, we have a TimeTracker application (built in house) with which developers are supposed to log what we worked on and when. I am notorious for not using it. So, I wrote my own (Windows Forms) version for my own use which, every hour opens up and takes over my screen:
It is a frameless dialog which consumes the entire screen.
TopMost = True.
On resize, it sets WindowsState = Normal and resizes to fill the screen.
While it is open, it polls for taskmgr.exe and procexp.exe and kills them if found.
It disables the start menu to prevent cmd.exe commands from the menu in Windows 7.
The only way to close it is to enter a log, only then is the OK button shown!
So far, it's working out well - no one has been able to break it!
My less drastic suggestion would be to have a notification which pops up momentarily above the system tray. After a second or two, fade it out. Keep showing the notification every 30 seconds or so until it is dismissed.
Always-on-top window in the corner of the screen?
You could always set your window to be a top most window, make it full screen, and activate it. It would be very, very hard to miss...
Granted, it would also be very annoying, and not something I'd do to other users...
My "real" suggestion would be to use sound along with standard notification methods if this is going to be used by other people, as that's an easy way to grab attention without necessarily killing their workflow. A modeless window that appears in a corner of the screen, especially if combined with sound and color, can be very effective to grab attention.
The industry has been adopting these ambient orb devices and variations of it when such a hard-to-miss notification is required. It is used for tracking the stock-market and for broken-daily-builds.
http://www.ambientdevices.com/cat/orb/MAN_Ambient%20Orb_3-23-03.pdf
Regards