• Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.
  • The forums have been upgraded with support for dark mode. By default it will follow the setting on your system/browser. You may override it by scrolling to the end of the page and clicking the gears icon.

Zippy! Automatic Button Pressing program.

FordGT90Concept

"I go fast!1!11!1!"
Joined
Oct 13, 2008
Messages
26,263 (4.33/day)
Location
IA, USA
System Name BY-2021
Processor AMD Ryzen 7 5800X (65w eco profile)
Motherboard MSI B550 Gaming Plus
Cooling Scythe Mugen (rev 5)
Memory 2 x Kingston HyperX DDR4-3200 32 GiB
Video Card(s) AMD Radeon RX 7900 XT
Storage Samsung 980 Pro, Seagate Exos X20 TB 7200 RPM
Display(s) Nixeus NX-EDG274K (3840x2160@144 DP) + Samsung SyncMaster 906BW (1440x900@60 HDMI-DVI)
Case Coolermaster HAF 932 w/ USB 3.0 5.25" bay + USB 3.2 (A+C) 3.5" bay
Audio Device(s) Realtek ALC1150, Micca OriGen+
Power Supply Enermax Platimax 850w
Mouse Nixeus REVEL-X
Keyboard Tesoro Excalibur
Software Windows 10 Home 64-bit
Benchmark Scores Faster than the tortoise; slower than the hare.
Warning: This application may be considered malicious by some anti-virus software and the like because it operates using a keylogger and can simulate keystrokes and mouse clicks.

Warning 2: Some anti-cheat software like Punkbuster and/or Valve Anti-Cheat (VAC) may flag this application as a hack, cheat, or otherwise unwanted. This application should be off (not in the system tray) when playing anti-cheat protected games.

Zippy! basically either holds keys/mouse buttons or pushes them rapidly. It is very useful in games like Minecraft where you have to hold a key frequently in order to perform an action.

zippy_1_0_0.png


On/Off Key: When pressed, activates and deactivates the selected profile.

Profile Up Key: When pressed, selects the next profile. If "On" it will automatically deactivate previous and activate the newly selected profile.

Profile Down Key: When pressed, selects the previous profile. If "On" it will automatically deactivate previous and activate the newly selected profile.

Start in Tray: When checked, will automatically hide Zippy! in the system tray.

Add/Remove Profile: Adds or removes a profile. All actions under a single profile will be activated when the profile is activated.

Add Row: Adds a row to the selected row.

To delete a row, click on the row in the left-most column (where the arrow is) and then hit the delete key.

Device & Key/Button Name: Double click on either column to bring up the "Get Input" dialog. Press the key or click the mouse button you want to use in box (key doesn't have to be in box but mouse does) to assign it.

Delay: 0 is the same as holding a key down. Any number greater than 0 causes a cycling pattern. For example, if it is 5000, it will press and release the key, wait 5 seconds, press and release the key, wait 5 seconds, press and release the key, etc.


It saves/loads all settings when opening/closing the application.
 

Attachments

Last edited:
Are you actually using a keyboard hook, SetWindowsHookEx() for this?

Mouse 4 / 5 should have Win32 virtual key codes, don't think you should have problem with them depending on how you send the keystrokes. I've just used SendInput() before and it worked ok.


This might fail in programs using DirectInput too, need to send DI scan codes instead of Win32 VK ones.
 
I updated it and completely changed the key/mouse monitoring code. The good news: XButton1 and XButton2 now work. The bad news: There is a 3-4 second hang when you close the Zippy main form because of an apparent bug in Windows API in mouse clicks.


This application should work in all applications on Windows 2000 and newer.
 
Uploaded 1.1.1. I worked around the hang by removing the Control Box (and thus, the problematical "X") and replacing it with a "Close" button. I also fixed support for the Middle mouse button. All buttons should now work.

You can still switch between fullscreen/window mode by double clicking on the title bar of the open form.
 
I usually use macro programs for these kinds of stuff
 
So when you hit the on/off key (pause in your OP) the selected profile key immediately begins to repeat until the on/off key is pressed again?
 
Yup. It keeps going until told to stop. When delay = 0, that means the key is held down. When delay > 0, that means it will keep pushing it every x milliseconds. I have used a delay value as low as 1ms and it worked great. :D
 
Wouldn't it have been more expedient to ditch the GUI and make Zippy! a hot key activated app?
(Similar to how TPUCapture works)
For instance ... Zippy! is running in the background. The user presses a key combo (say Alt-Z) to tell Zippy! to repeat the next key/mouse click it sees until the hot key combo is pressed again?
So Alt+Z and then left mouse click tells Zippy! to repeat the left mouse click until Alt+Z is pressed again.
That would completely eliminate the need for profiles.

Just a suggestion for version 2.0 ;)
As always, good work Ford. Definitely useful with Minecraft. :toast:
 
Hmm, I didn't think of that but the situation for which I programmed it (Minecraft and games in general), profiles (only requring 3 bound keys total, 2 minimum) are more useful than memorizing and pressing multiple key combos. Think of it like switching guns in an FPS game rather than running a macro. It basically adds another dimension to input options when more options aren't given in the software itself.

Sure, profile switching is likely to get a bit dodgy with 5+ profiles. If it becomes an issue, I'll add support for having multiple Zippy Config Files (zcf) so users can create and use specific profile sets (e.g. one for each game).
 
All actions under a single profile will be activated when the profile is activated.

Say I have left click as the top entry and then right click as the next in a single profile.

What exactly happens here?
If you have multiple keys in one profile are they each fired off sequentially and then the profile repeats?
 
Nope, all are activated simutaneously. For example, if you have W in the first slot and Left Mouse in the second, both with a delay of 0, W and Left Mouse will be held down when the profile is enabled. When the profile is deactivated (either by on/off or changing profile), it will send the "Up" equivilent for both releasing the W key and Left Mouse button.

With left and right click in there, when the profile is activated, it would be the same as holding both left and right buttons down at the same time--hands free. xD
 
So ... if someone's roommate left their computer on, and you (as the nefarious roomate) installed Zippy! on their computer and created a profile that repeated 20 or so key presses, when the roomate unknowingly hit pause to try to stop their game Zippy! would repeat all 20 keys as fast as it could if the delay is set to zero?

I think I like this program ... a lot. :laugh:
 
Has this been tested with Punkbuster?
 
If the delay were set to 1, yes. 0 means the button is held. If you had A, B, and C on one profile and it was turned on, for example, when someone clicks on an input form, it would randomly type those three letters until it were stopped.

Example (A B and C set to 1ms, ran for about a second--I trimmed it though so it isn't ridiculously long):
acbcbacabacbacbbaccabacbacbabcbaccabacbacbacbacbacbbacbacbacacbbacacbabcbcaabccabcabcabcbacbacbabacabccabacbabcacbbacabcabcabcacbcbaabcabcacbcabacbacb
acbabccababcacbcabcabcabacbacbcababcacbbcaabcbacacbacbabccababcabcabcacbabccabcabcabacbcabcabacbacbacbacbcabbcaacbabcacbacbacbabccabacbacbacbbacacbbac
etc.

If you were to do, for example, H every 5 seconds and A every 5 second it would:
randomlyha add a "ha" ha to whatah you ah are typing.ahha

Which is meant to say:
Randomly add a "ha" to what you are typing.

Of course, sometimes, it can get them backwards as demonstrated by the end there with the "ah" then "ha." Good fun. XD
 
Ford said:
Good fun. XD

Indeed. :D

I'm thinking the company President's computer may be a good "testbed" for Zippy!
 
No. I suspect it will flag it as bad though because it uses the standard Windows calls to user32.dll.

It maybe a good idea to add this to the OP for those that may want to use this in PB enabled online games.
 
It maybe a good idea to add this to the OP for those that may want to use this in PB enabled online games.
Done.


I'm thinking the company President's computer may be a good "testbed" for Zippy!
I cannot be held liable for reckless and/or criminal use of this application (or any other for that matter). :p
 
I updated it and completely changed the key/mouse monitoring code. The good news: XButton1 and XButton2 now work. The bad news: There is a 3-4 second hang when you close the Zippy main form because of an apparent bug in Windows API in mouse clicks.


This application should work in all applications on Windows 2000 and newer.

What bug is this? A Windows API flaw is pretty unlikely.

Also if you're using Sleep() for the delay, you might need to set the resolution on some systems for small amounts like 1ms to work. Might be a good idea to query it first: http://msdn.microsoft.com/en-us/library/ms712708(v=vs.85).aspx
 
The hook misbehaves when it catches a left mouse click on a Form's "X." I am using a modified version of HookManager. I quote:
Question

I have a long delay when closing applications using hooks by clicking the x button in the titlebar. If I close the application via another event (button click) for example, that works fine.

Answer

It's a known bug of Microsoft. It has to do with the Windows themes. If you disable the Windows themes, the problem goes away. Another choice is to have the hook code run in a secondary thread.
Hooking in a secondary thread would be a major PITA and raise performance issues. It also wouldn't fix the inherit issue--you just won't see it. XD

I'm sure it could be overcome if the mouse events had a Handled flag but they don't. Ah well, my workaround works well enough.


It only uses Thread.Sleep() when delay > 0 and it creates one thread per key so they have no impact on GUI performance.
 
Are you only using the hook to catch the key to use for sending input?

I can think of a couple ways to grab input without the hook. Maybe you can run through the virtual key list with GetAsyncKeyState() and flag what's pressed. From there you can just build your list of keys to mash and fire them off with SendInput(). Some food for thought, probably get you out of AV flag territory.
 
I was using GetAsyncKeyState for keyboard input but you have to use the hook for mouse (now both hook). It's the mouse that is causing problems too.
 
Last edited:
so its really just a home made macro program?
 
Yes and no. Yes, in that you push a key/button and it does something. No, in that it can do things that most macro programs can't (like push a key/button inhumanly fast or hold multiple keys down indefinitely).
 
Yes and no. Yes, in that you push a key/button and it does something. No, in that it can do things that most macro programs can't (like push a key/button inhumanly fast or hold multiple keys down indefinitely).

well my logitech and razor macro programs let me set the delay in ms, so they can both do what you've mentioned there. once they reach a certain speed however, games tend to stop recognising them as distinct presses. there is also toggles to not let them go.



Of course, those are locked to specific hardware - so even if you're just matching what other programs can do, its now possible for everyone to use.
 
Back
Top