Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Guild Wars > GW Bots
You last visited: Today at 10:45

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



keycodes per sendmessage schicken

Discussion on keycodes per sendmessage schicken within the GW Bots forum part of the Guild Wars category.

Reply
 
Old   #1
 
tonitusch666's Avatar
 
elite*gold: 0
Join Date: Feb 2008
Posts: 147
Received Thanks: 184
keycodes per sendmessage schicken

Hallo,

also ich wollte das ControlSend für einfache Fälle durch nen user32.dll call ersetzen, da grad das shift, alt, control handling etwas speziell ist (und ichs auch nicht brauch).

EDIT: ok knapp vorbei ist halt auch daneben, hab jetzt im AutoIt source gespickt und dabei noch gelernt, dass es naben Vk noch scancode gibt und das ist nicht immer der gleiche Wert...

Code:
Func KeySend($inkey, $evt ="pressed")
	$user32 = DllOpen("user32.dll")
	if $user32 = -1 Then
		ConsoleWrite("KeySend: cannot open user32.dll")
		Exit
	EndIf
	
	$WM_KEYDOWN = 0x100
	$WM_KEYUP   = 0x101

	If StringUpper($inkey) = "RETURN" Then
		$skey = 0x0D
	ElseIf StringUpper($inkey) = "SPACE" Then
		$skey = 0x20
	Else
		$key = DllCall($user32, "int", "VkKeyScan", "int", Asc(StringLower($inkey)))
		$skey = $key[0]
	EndIf
	$ret = DllCall($user32, "int", "MapVirtualKey", "int", $skey, "int", 0)
	$lparam = BitShift($ret[0], -16)
	$lparam = BitOr($lparam, 1)
	
	Select
	Case $evt = "pressed"
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_KEYDOWN, "int", $skey, "int", $lparam)
		Sleep(15)
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_KEYUP, "int", $skey, "int",   BitOR($lparam, 0xC0000000))
	Case $evt = "down"
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_KEYDOWN, "int", $skey, "int", $lparam)
	Case $evt = "up"
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_KEYUP, "int", $skey, "int",   BitOR($lparam, 0xC0000000))
	EndSelect

	DllClose($user32)
EndFunc
So klappt es jetzt für einfache Anwendungen...

mfg
tonitusch666 is offline  
Thanks
2 Users
Old 01/11/2009, 13:28   #2
 
blauwiggle's Avatar
 
elite*gold: 0
The Black Market: 123/0/1
Join Date: Apr 2006
Posts: 1,722
Received Thanks: 476
Da hab ich auch schon im AutoIT.de Forum nachgefragt ... . Mal schauen was die klugen Leute dort rausfinden.
blauwiggle is offline  
Old 01/11/2009, 20:05   #3
 
tonitusch666's Avatar
 
elite*gold: 0
Join Date: Feb 2008
Posts: 147
Received Thanks: 184
gelöst, siehe oben
tonitusch666 is offline  
Old 01/12/2009, 06:05   #4
 
blauwiggle's Avatar
 
elite*gold: 0
The Black Market: 123/0/1
Join Date: Apr 2006
Posts: 1,722
Received Thanks: 476
Hmm, funktioniert denn damit ein '@' bzw. wie könnte man denn noch ein @ machen? ^^
blauwiggle is offline  
Old 01/12/2009, 16:46   #5
 
Gabba2's Avatar
 
elite*gold: 0
Join Date: Jan 2008
Posts: 1,403
Received Thanks: 918
Ja das geht da müsst dann aber denke ich den ASCII Code manuell dir raussuchen (64 für @) oder gibt es in AutoIT eine Möglichkeit sich direkt den ASCII für zB. {space} sich ausgeben zu lassen?
Gabba2 is offline  
Old 01/12/2009, 20:33   #6
 
tonitusch666's Avatar
 
elite*gold: 0
Join Date: Feb 2008
Posts: 147
Received Thanks: 184
Jo also aktueller Stand s.o., also alles für das es einen VKEY definiert gibt, kann man so einfach lösen. Das sleep(xx) ist notwendig damit die msg Reihenfolge passt, da WM_KEYDOWN zerlegt wird in eine KEYDOWN und eine CHAR msg. Wenn man den sleep weglässt geht es für single events, jedoch kann man nicht in textinput felder senden, da dann der CHAR erst nach dem UP kommt. Das dürfte dem keydowndelay entsprechen, muss man probieren, ob das schon so passt für jeden Rechner/Windows.
tonitusch666 is offline  
Old 01/16/2009, 00:10   #7
 
tonitusch666's Avatar
 
elite*gold: 0
Join Date: Feb 2008
Posts: 147
Received Thanks: 184
Also hab jetzt nochmal probiert, ob man so was wie CTRL+ALT+q = @ schicken kann, habs aber nicht hinbekommen. Hab dann noch mit WM_SYSKEYDOWN experimentiert, hat aber auch nicht geklappt. Alle Lösungen die scheinbar funktioneren (so wie AutoIt das macht) modifizieren die KeyBoardState Struktur und schreiben sie danach wieder zurück. In dem
Moment wo die verbogen ist, wirkt sich das auch auf den normalen Keyboard Input aus und dadurch ensteht diese "lustige" Groß-/Kleinschreibung.
Beim testen mit dem @ über ControlSend() ist mir allerdings eine spannende Sache aufgefallen, nämlich dass es das als ASCII Zeichen gibt 0x40 und Autoit interessanter Weise das gar nicht als CTRL-ALT q verschickt sonder als char code 0x40, daraus ist nun folgende Lösung entstanden mit der ich meine e-mail adresse testhalber in den chat window geschickt habe:
Code:
$skey = 0x40
$lparam = 0x00100001
DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_KEYDOWN, "int", 0x71, "int", $lparam)
DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_CHAR, "int", $skey, "int", $lparam)
Sleep(20)
DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_KEYUP, "int", 0x71, "int", BitOR($lparam, 0xC0000000))
mfg
tonitusch666 is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
C++ SendMEssage Problem
12/11/2010 - C/C++ - 53 Replies
Hey Comunity, bin C++ Anfänger und hab da ein Problem. Und zwar möchte ich Tastendrücke mithilfe meines Programms simulieren, da hab ich mir gedacht, dass ich SendMessage benutze. Mein Problem ist jetzt, dass ich nicht weiß, wo ich das Parameter für die "zu drückende" Taste hinschreiben soll bzw. in welcher Form; als Hex oder VK_KEY_? . Der Bot soll einfach nur ununterbrochen "w" drücken, jedoch krig ich es einfach nicht hin. Bei Google hab ich nix gefunden, MSDN hab ich nicht...
C++ SendMessage Problem
08/02/2010 - C/C++ - 1 Replies
Also ich versuche gerade in C++ einen kleinen Spammer zu programmieren habe aber leider ein Problem. Mein Code: #include <iostream> #include <windows.h> #include <string> using namespace std;
delphi sendmessage
07/27/2010 - General Coding - 3 Replies
hallo leute ich hab mal eine frage ob mir jemand kurz erläutern könnte wie ich mit sendmessage eine mausbewegung in einem minimierten fenster ausgebe ich habe embarcadero rad studio 2010 hier ist der bisherige "source": uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm)
[Help] C# SendMessage()
05/11/2010 - CO2 Programming - 19 Replies
I'm currenty trying to use the SendMessage Function with CO. According to msdn I need to use this: static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); My question is: How do I find the hWnd? What are the wParam and lParam? And what can I use as wParam and lParam? Any help will be greatly appreciated.
sendmessage?
12/26/2008 - CO2 Programming - 0 Replies
just wondering how it works in C# tried few tutorials with notepad in it and it doesnt send the letters/close it even it finds the window this is how i got it so far (pretty much copypasted, just to see how it works...) private static extern IntPtr FindWindow(string winClass, string WinName); private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); private static extern IntPtr PostMessage(IntPtr hWnd,...



All times are GMT +1. The time now is 10:48.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.