Not to bash your work or anything, but just a few things to point out:
1. I noticed you are using GetPixel(), this API call is blocked by XTrap when trying to call it on the device context of S4's window. To get around this, I noticed you create a DC for the whole display, and from there GetPixel() that device context with the intent of capturing S4's window's pixels. This results in a situation requiring that S4's window is not overlapped by any other windows, or this will flat-out read the wrong pixel, and fail. I do not believe you mentioned this.
2. Your bot extremely lacks error checking. You have a few checks here and there, but you could perform a lot more in places which would be beneficial, should an error occur.
3. You attempt to find S4's window an perform a few other actions upon the loading of your bot's form. Not only is this not needed, seeing as the Find Window, etc buttons are there on the form already, this was coded strangely in that if S4's window handle is not found, an Overflow Exception occurs within a GetWindowRect() call you have made in your S4 information finding function. The error occurs because of this little snippet of code:
Code:
Private Sub S4InfosFinden()
If S4Found = True Then
''Informationen finden
If GetWindowRect(S4.Handle, S4.WRect) = 0 Then
MsgBox("Error 1")
End
End If
The GetWindowRect() function overflows because you have not checked if the handle is valid before performing the operation. Another note, the value of the handle does not seem to be returning 0 when finding the handle has failed. This is not default behavior, at least not in my experience of using FindWindow() in C++. I think you are peforming improper actions on this handle variable, or otherwise performing call(s) wrong for such a strange outcome.
Again, these are just some observations, and please do not take this as a personal attack, or any form of insulting your coding abilities. Please just try to further bug-check a beta application before releasing.
EDIT: You also seem to be creating and destroying the device context you create in every call to your GetPixelColor() function. It would be very beneficial to create the device context on form load, and to destroy it when your app closes, as opposed to creating and destroying it each time the function is called.
Also, where is your changelog? Version 1.0 and 4.0 don't look all that different, and you're not supposed to increment whole version numbers that fast.
As for the hotkeys, look into the API call RegisterHotKey():
[Only registered and activated users can see links. Click Here To Register...]