# Zippy! Automatic Button Pressing program.



## FordGT90Concept (Apr 8, 2011)

*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.







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.


----------



## ctrain (Apr 9, 2011)

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.


----------



## FordGT90Concept (Apr 10, 2011)

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.


----------



## FordGT90Concept (Apr 10, 2011)

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.


----------



## n-ster (Apr 10, 2011)

I usually use macro programs for these kinds of stuff


----------



## Kreij (Apr 10, 2011)

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?


----------



## FordGT90Concept (Apr 10, 2011)

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.


----------



## Kreij (Apr 10, 2011)

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.


----------



## FordGT90Concept (Apr 10, 2011)

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).


----------



## Kreij (Apr 10, 2011)

FordGT90Concept said:


> 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?


----------



## FordGT90Concept (Apr 10, 2011)

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


----------



## Kreij (Apr 10, 2011)

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.


----------



## EastCoasthandle (Apr 10, 2011)

Has this been tested with Punkbuster?


----------



## FordGT90Concept (Apr 10, 2011)

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


----------



## Kreij (Apr 10, 2011)

Ford said:
			
		

> Good fun. XD



Indeed. 

I'm thinking the company President's computer may be a good "testbed" for Zippy!


----------



## FordGT90Concept (Apr 10, 2011)

EastCoasthandle said:


> Has this been tested with Punkbuster?


No.  I suspect it will flag it as bad though because it uses the standard Windows calls to user32.dll.


----------



## EastCoasthandle (Apr 10, 2011)

FordGT90Concept said:


> 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.


----------



## FordGT90Concept (Apr 10, 2011)

EastCoasthandle said:


> 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.




Kreij said:


> 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).


----------



## ctrain (Apr 11, 2011)

FordGT90Concept said:


> 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


----------



## FordGT90Concept (Apr 11, 2011)

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.
> 
> ...


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.


----------



## ctrain (Apr 12, 2011)

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.


----------



## FordGT90Concept (Apr 12, 2011)

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.


----------



## Mussels (Apr 12, 2011)

so its really just a home made macro program?


----------



## FordGT90Concept (Apr 12, 2011)

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).


----------



## Mussels (Apr 12, 2011)

FordGT90Concept said:


> 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.


----------



## FordGT90Concept (Apr 12, 2011)

Correct, it should work with any hardware (maybe even no hardware at all) and any application.


----------



## ctrain (Apr 12, 2011)

FordGT90Concept said:


> 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.



Hmm, I've used GetAsyncKeyState() before with the mouse before and it was fine. I double checked and it's alright.

Make sure your defines are right, the mouse buttons are:
VK_LBUTTON  0x01
VK_RBUTTON  0x02
VK_MBUTTON  0x04
VK_XBUTTON1 0x05
VK_XBUTTON2 0x06


----------



## FordGT90Concept (Dec 31, 2011)

Just uploaded Zippy 1.1.2.  It has support for MouseWheelUp and MouseWheelDown (only one "notch").


----------



## natedawg42 (Aug 13, 2019)

i want it to hold down w and have it set to 0 but it only presses it once instead of holding it down.
with zippy: w
without zippy: wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww


----------



## FordGT90Concept (Aug 13, 2019)

I think that's because the operating system causes an actual key press to repeat in keyboard settings.  Operating system knows the program isn't a keyboard so it doesn't apply the same pulsing logic.  If you want wwwwwwwwwww then change delay to something like 5.  Every 5 ms it will pulse the key making it mimic what operating systems do.


----------



## natedawg42 (Aug 14, 2019)

I actually found another program many days ago that will basically just hold it and it acts like a keyboard in game but it was just a demo and only held for a minute. I just want to use it to gain speed on a roblox game. I will try that though. Thanks.


----------



## CBM4880 (Nov 9, 2019)

Ok man I may be retarded, but I set my enter key to press O once and then went to grab a snack and came back to my p.c. auto shut down. i opened the  program back up but changes weren't visible, and now, every time i press enter, the letter O is entered at the end of whatever i just wrote. I've searched thru every nook and cranny to find the code and remove the file but can't stop it and this is a cry for help even though you made this program 8 fucking years ago.


----------



## DeathtoGnomes (Nov 9, 2019)

FordGT90Concept said:


> 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).


LGS can press and hold multiple keys but its tricky to set up. keypress speed is insanely fast too.


----------



## FordGT90Concept (Nov 9, 2019)

CBM4880 said:


> Ok man I may be retarded, but I set my enter key to press O once and then went to grab a snack and came back to my p.c. auto shut down. i opened the  program back up but changes weren't visible, and now, every time i press enter, the letter O is entered at the end of whatever i just wrote. I've searched thru every nook and cranny to find the code and remove the file but can't stop it and this is a cry for help even though you made this program 8 fucking years ago.


Delete settings.zcf which should be the same folder as Zippy.exe
If you stop Zippy from running then it can't do anything.  It is only Zippy.exe which produces settings.zcf and that's it.  Don't think there's even code in there to auto start.  It makes no persistent changes to the computer other than settings.zcf.

So if you got rid of Zippy entirely and it's still doing it...the key combination may have triggered one of Windows sticky key features.  If you search for "sticky keys" it'll bring up Keyboard which has all of these settings as well as the checkboxes under reach for automatically enabling them via keystrokes.  One of those shortcuts may have caused Windows to do whatever it is that it is doing.


----------



## LieutenantD (May 7, 2020)

I'm trying to remove your program from my computer but it says that it is open in another program and can't be removed. I can't figure out how to uninstall it, help please?


----------

