Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Guild Wars
You last visited: Today at 13:43

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

Advertisement



keine reaktion auf Postmessage

Discussion on keine reaktion auf Postmessage within the Guild Wars forum part of the MMORPGs category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2009
Posts: 33
Received Thanks: 1
[SOLVED]keine reaktion auf Postmessage

Einen wunderschönen guten Morgen,
ich hoffe nicht das euch das thema zum halse raus hängt, aber leider habe ich nichts passendes in andern Threads gefunden.

Vorabinfo:
Sprache: VB2008
System: WinXP Prof SP2

Mein Problem ist das GW das Postmessage nicht "an nimt"
( Auch Sendmessage geht nicht )

Die sache ist das ich es erreichen will das GW die Skills durch "Tastendruck" ausführen will, den ich durch Postmessage/Sendmessage sende ( Taste 1,2,3,4 .... 8 )
Info:
Wenn ich das Programm mit dem handle vom Editor starte, dann schreibt das programm auch schön alles im Editor auf, aber wie gesagt, sobald es an GW gerichtet ist geht es nicht.

Hier mal der wie ich denke entscheidene Code:
PHP Code:
Private Declare Ansi Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntegerByVal wMsg As IntegerByVal wParam As IntegerByVal lParam As String) As Integer
    
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As IntegerByVal hWnd2 As IntegerByVal lpsz1 As StringByVal lpsz2 As String) As Integer
    
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As StringByVal lpWindowName As String) As Integer
    
Private Declare Ansi Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As LongByVal wMsg As LongByVal wParam As LongByVal lParam As Long) As Long
   

    
Public Const WM_CHAR = &H102
    
Const WM_KEYDOWN = &H100 : Const WM_KEYUP = &H101

Dim hwnd 
As Integer FindWindow(vbNullString"Guild Wars")
Dim hwn As Integer FindWindowEx(hwnd0NothingvbNullString)
[...]
                    
PostMessage(hwnWM_KEYDOWN49vbNullString)
                    
PostMessage(hwnWM_CHAR49vbNullString)
                    
PostMessage(hwnWM_KEYUP49vbNullString)
                    
' Habe hier verschiedene Sachen versucht
                    ' 
nur Keydownkeydown und keyupnur charwMsg = &H31 ...
                    
' aber nichts hat hingehauen
[...] 
wäre nett wenn ihr mir helfen könntet

MFG
xachimx is offline  
Old 03/02/2009, 08:54   #2
 
Valvepro's Avatar
 
elite*gold: 0
Join Date: Mar 2008
Posts: 374
Received Thanks: 198
Moin Moin, das ist normal... du kannst so nur in den Chat schreiben!
Weil games wie wir denke ich mal wissen, mit dem DirectInput arbeiten...DirectInput liegt 'über' der WindowsApi und fängt alle Eingabe Event's ab..Du kannst es höchstens mit sendinput versuchen.
Valvepro is offline  
Old 03/02/2009, 09:49   #3
 
elite*gold: 0
Join Date: Mar 2009
Posts: 33
Received Thanks: 1
danke für die schnelle Antwort,
ich werde das mal ausprobieren, mal sehen ob das was wird
ansonsten schreib ich nochmal

MFG
xachimx is offline  
Old 03/02/2009, 19:27   #4
 
elite*gold: 0
Join Date: Mar 2009
Posts: 33
Received Thanks: 1

.... hmmm jetzt habe ich es zwar geschaft den tastenanschlag an gw zu schicken, ABER
es geht nur im chat, sprich die skills werden nicht ausgeführt .... *cry*
mein code ist ziemlich an diesem "tut" angepasst:

wüste jemand rat?,
oder sind das zu wenig infos ?
xachimx is offline  
Old 03/02/2009, 19:52   #5
 
elite*gold: 0
Join Date: Nov 2008
Posts: 576
Received Thanks: 191
soweit mirs erklärt wurde und ich es hoffe einigermasen richtig verstanden habe, sind das zwei unterschiedliche sachen.
postmessage ist ein befehl für textverarbeitung, und skills casten, etc. sind user verarbeitungen.
schau dir mal den tt6 code an, da wurde es gelöst.
__wadim is offline  
Old 03/02/2009, 21:10   #6
 
elite*gold: 0
Join Date: Mar 2009
Posts: 33
Received Thanks: 1
hmmm, wenn ich das richtig gesehen habe, dann haben die bei tt6 einfach ein befehl namens KeySend(...)
den kann ich ja nicht so in vb übernehmen.
habe auch das ganze bei mir auch nochmal mit zb
SendKeys.Send("{UP}") ausprobiert,
oder SendKeys.Send("1"), aber da hängt sich gw auf, bzw freezed.
und auf autoit wollte ich jetzt eigentlich nicht umsteigen.
xachimx is offline  
Old 03/02/2009, 21:20   #7
 
elite*gold: 0
Join Date: Nov 2008
Posts: 576
Received Thanks: 191
Quote:
Originally Posted by xachimx View Post
hmmm, wenn ich das richtig gesehen habe, dann haben die bei tt6 einfach ein befehl namens KeySend(...)
den kann ich ja nicht so in vb übernehmen.
habe auch das ganze bei mir auch nochmal mit zb
SendKeys.Send("{UP}") ausprobiert,
oder SendKeys.Send("1"), aber da hängt sich gw auf, bzw freezed.
und auf autoit wollte ich jetzt eigentlich nicht umsteigen.
löl..

musst dir auch anschauen, wie er die funktion aufgebaut hat.
hab auch keine ahnung aus was sich in vb die funktion SendKeys.Send("{UP}") zusammensetzt.

postmessage msdn??? nicht nur copy & pase :P bitte.
__wadim is offline  
Old 03/02/2009, 21:31   #8
 
NBA's Avatar
 
elite*gold: 0
Join Date: Apr 2008
Posts: 1,874
Received Thanks: 213
Seh ich das richtig? Mit diesem PostMessage kann man etwas vollständig in den Chat schrieben? Wenn mans in Au3 scripts einbinden kann wäre bestimmt geil für eine Resign Func...
NBA is offline  
Old 03/02/2009, 21:35   #9
 
Jacob_G's Avatar
 
elite*gold: 0
Join Date: Aug 2006
Posts: 515
Received Thanks: 95
OMQ, was ist wohl in der TT6 enthalten? Eine Resign - Funktion!
Jacob_G is offline  
Old 03/02/2009, 22:05   #10
 
elite*gold: 0
Join Date: Mar 2009
Posts: 33
Received Thanks: 1
@__wadim
die funktion sendkeys.send(...) ist eine in vb integrierte funktion, falls du das meinst

und postmessage und sendmessage und sendinput habe ich ja auch schon ausprobiert
und ich mach nicht nur copy & paste, ich denke mir auch was dabei was ich da mache.
die sache ist halt das bei sendkey gw freezed, und sendinput nur im chat schreibt, alles andere geht garnicht, jedenfalls bei mir nicht.
weis denn jemand wie das in autoit umgesetzt wird ?
xachimx is offline  
Old 03/02/2009, 22:24   #11
 
tonitusch666's Avatar
 
elite*gold: 0
Join Date: Feb 2008
Posts: 147
Received Thanks: 184
hiho,

also weil ich autoit nich so ganz toll find hab ich die komplette tt6 1.4 nach VB.net portiert, inklusive einer PixelChecksum in einer low level c++ dll und ReadMems (btw .ini handling hab ich über nini.dll gelöst), ABER weil ich net so viel Zeit hab, ist das alles noch ungetestet und weis auch nicht ob ich das public machen will (die meisten hier nutzen ja autoit). Aber zumindest für Dein Problem sollten folgende Codeschnipsel weiterhelfen...
Code:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As UInteger
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As UInteger, ByVal uMsg As UInteger, ByVal wParam As UInteger, ByVal lParam As UInteger) As UInteger
    Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As UInteger, ByVal wMapType As UInteger) As UInteger
    Private Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal cChar_Renamed As Byte) As Short


        'get process and window infos
        pid = GetPID(name)
        hwnd = FindWindow(Nothing, name)

    Private Function GetPID(ByVal name As String) As UInteger
        Dim proc As Process
        Dim procs() As Process
        Dim pid As UInteger
        procs = Process.GetProcesses()
        For Each proc In procs
            If proc.MainWindowTitle = name Then
                pid = proc.Id
            End If
        Next
        Return pid
    End Function


    ' send single keyboard event to non active window
    ' event = pressed, down, up
    ' kdown = key down delay
    ' note: supports only lower case keys + NUMx, Fx, some special keys and @
    Public Sub KeySend(ByVal inkey As String, Optional ByVal evt As String = "pressed", Optional ByVal kdown As UInteger = 50)
        Dim skey, lparam, ret As UInteger
        Const WM_KEYDOWN As UInteger = &H100
        Const WM_KEYUP As UInteger = &H101
        Const WM_CHAR As UInteger = &H102
        Const FLAG As UInteger = &HC0000000UI

        'handling for special keys
        Select Case inkey.ToUpper
            Case "@"
                skey = &H40
                lparam = &H100001
                PostMessage(hwnd, WM_KEYDOWN, &H71, lparam)
                PostMessage(hwnd, WM_CHAR, skey, lparam)
                Thread.Sleep(20)
                PostMessage(hwnd, WM_KEYUP, &H71, lparam Or FLAG)

            Case "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"
                skey = &H6F + UInteger.Parse(inkey.Substring(1))
                ret = MapVirtualKey(skey, 0)
                lparam = (ret << 16) Or &H1
                PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                Thread.Sleep(kdown)
                PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)

            Case "NUM0", "NUM1", "NUM2", "NUM3", "NUM4", "NUM5", "NUM6", "NUM7", "NUM8", "NUM9"
                skey = &H60 + UInteger.Parse(inkey.Substring(3))
                ret = MapVirtualKey(skey, 0)
                lparam = (ret << 16) Or &H1
                PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                Thread.Sleep(kdown)
                PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)

            Case "RETURN", "SPACE", "TAB", "BACK", "END", "HOME", "SNAPSHOT", "INSERT", "DELETE", "LEFT", "RIGHT", "UP", "DOWN"
                Select Case inkey.ToUpper
                    Case "RETURN"
                        skey = &HD
                    Case "SPACE"
                        skey = &H20
                    Case "TAB"
                        skey = &H9
                    Case "BACK"
                        skey = &H8
                    Case "END"
                        skey = &H23
                    Case "HOME"
                        skey = &H24
                    Case "SNAPSHOT"
                        skey = &H2C
                    Case "INSERT"
                        skey = &H2D
                    Case "DELETE"
                        skey = &H2E
                    Case "LEFT"
                        skey = &H25
                    Case "RIGHT"
                        skey = &H27
                    Case "UP"
                        skey = &H26
                    Case "DOWN"
                        skey = &H28
                End Select

                ret = MapVirtualKey(skey, 0)
                lparam = (ret << 16) Or &H1
                PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                Thread.Sleep(kdown)
                PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)

            Case Else 'default lower case key handling

                skey = VkKeyScan(Asc(inkey))
                ret = MapVirtualKey(skey, 0)
                lparam = (ret << 16) Or &H1

                Select Case evt
                    Case "pressed"
                        PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                        Thread.Sleep(kdown)
                        PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)
                    Case "down"
                        PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                    Case "up"
                        PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)
                End Select
        End Select
    End Sub
weis jetzt nicht obs schon vollständig ist, sollte aber so in etwa zum laufen zu bringen sein ...

mfg
tonitusch666 is offline  
Thanks
2 Users
Old 03/02/2009, 22:32   #12
 
elite*gold: 0
Join Date: Nov 2008
Posts: 576
Received Thanks: 191
tonitusch da ihr hier gerade mal dabei seid, hab ich auch ne frage. bis jetzt nutz ich bei meinen bots autoitx.dll und controlsend fürs skill casten. würde aber gerne nun mit postmessage machen. hättest du da ein beispiel in cpp für mich?
__wadim is offline  
Old 03/02/2009, 23:08   #13
 
tonitusch666's Avatar
 
elite*gold: 0
Join Date: Feb 2008
Posts: 147
Received Thanks: 184
leider nicht fertig rumliegen aber wenn man windows.h includiert hat man alle win32 calls schon direkt zur Verfügung, also den vb code nach c++ zu portieren sollte nicht so das Problem sein, ggf. MSDN spicken

Zu beachten ist natürlich, dass man mit der vereinfachten routine nicht alle chars insb. keine Großbuchstaben schicken kann. Aber btw. gibts den AutoIt 3.1.0 source zum runterladen und rumstöbern...
tonitusch666 is offline  
Old 03/02/2009, 23:18   #14
 
elite*gold: 0
Join Date: Mar 2009
Posts: 33
Received Thanks: 1
thx tonitusch,
aber kannst du mir sagen wieso vb mir eine divided bx 0 exception wirft wenn das prog hier hin kommt: ret = MapVirtualKey(skey, 0) ( dieses beispiel ist bei den normalen tasten )
und denn noch eine andere frage,
warum/wofür brauch ich die process id ?
xachimx is offline  
Old 03/03/2009, 15:06   #15
 
elite*gold: 0
Join Date: Dec 2007
Posts: 680
Received Thanks: 141
Quote:
Originally Posted by tonitusch666 View Post
hiho,

also weil ich autoit nich so ganz toll find hab ich die komplette tt6 1.4 nach VB.net portiert, inklusive einer PixelChecksum in einer low level c++ dll und ReadMems (btw .ini handling hab ich über nini.dll gelöst), ABER weil ich net so viel Zeit hab, ist das alles noch ungetestet und weis auch nicht ob ich das public machen will (die meisten hier nutzen ja autoit). Aber zumindest für Dein Problem sollten folgende Codeschnipsel weiterhelfen...
Code:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As UInteger
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As UInteger, ByVal uMsg As UInteger, ByVal wParam As UInteger, ByVal lParam As UInteger) As UInteger
    Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As UInteger, ByVal wMapType As UInteger) As UInteger
    Private Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal cChar_Renamed As Byte) As Short


        'get process and window infos
        pid = GetPID(name)
        hwnd = FindWindow(Nothing, name)

    Private Function GetPID(ByVal name As String) As UInteger
        Dim proc As Process
        Dim procs() As Process
        Dim pid As UInteger
        procs = Process.GetProcesses()
        For Each proc In procs
            If proc.MainWindowTitle = name Then
                pid = proc.Id
            End If
        Next
        Return pid
    End Function


    ' send single keyboard event to non active window
    ' event = pressed, down, up
    ' kdown = key down delay
    ' note: supports only lower case keys + NUMx, Fx, some special keys and @
    Public Sub KeySend(ByVal inkey As String, Optional ByVal evt As String = "pressed", Optional ByVal kdown As UInteger = 50)
        Dim skey, lparam, ret As UInteger
        Const WM_KEYDOWN As UInteger = &H100
        Const WM_KEYUP As UInteger = &H101
        Const WM_CHAR As UInteger = &H102
        Const FLAG As UInteger = &HC0000000UI

        'handling for special keys
        Select Case inkey.ToUpper
            Case "@"
                skey = &H40
                lparam = &H100001
                PostMessage(hwnd, WM_KEYDOWN, &H71, lparam)
                PostMessage(hwnd, WM_CHAR, skey, lparam)
                Thread.Sleep(20)
                PostMessage(hwnd, WM_KEYUP, &H71, lparam Or FLAG)

            Case "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"
                skey = &H6F + UInteger.Parse(inkey.Substring(1))
                ret = MapVirtualKey(skey, 0)
                lparam = (ret << 16) Or &H1
                PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                Thread.Sleep(kdown)
                PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)

            Case "NUM0", "NUM1", "NUM2", "NUM3", "NUM4", "NUM5", "NUM6", "NUM7", "NUM8", "NUM9"
                skey = &H60 + UInteger.Parse(inkey.Substring(3))
                ret = MapVirtualKey(skey, 0)
                lparam = (ret << 16) Or &H1
                PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                Thread.Sleep(kdown)
                PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)

            Case "RETURN", "SPACE", "TAB", "BACK", "END", "HOME", "SNAPSHOT", "INSERT", "DELETE", "LEFT", "RIGHT", "UP", "DOWN"
                Select Case inkey.ToUpper
                    Case "RETURN"
                        skey = &HD
                    Case "SPACE"
                        skey = &H20
                    Case "TAB"
                        skey = &H9
                    Case "BACK"
                        skey = &H8
                    Case "END"
                        skey = &H23
                    Case "HOME"
                        skey = &H24
                    Case "SNAPSHOT"
                        skey = &H2C
                    Case "INSERT"
                        skey = &H2D
                    Case "DELETE"
                        skey = &H2E
                    Case "LEFT"
                        skey = &H25
                    Case "RIGHT"
                        skey = &H27
                    Case "UP"
                        skey = &H26
                    Case "DOWN"
                        skey = &H28
                End Select

                ret = MapVirtualKey(skey, 0)
                lparam = (ret << 16) Or &H1
                PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                Thread.Sleep(kdown)
                PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)

            Case Else 'default lower case key handling

                skey = VkKeyScan(Asc(inkey))
                ret = MapVirtualKey(skey, 0)
                lparam = (ret << 16) Or &H1

                Select Case evt
                    Case "pressed"
                        PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                        Thread.Sleep(kdown)
                        PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)
                    Case "down"
                        PostMessage(hwnd, WM_KEYDOWN, skey, lparam)
                    Case "up"
                        PostMessage(hwnd, WM_KEYUP, skey, lparam Or FLAG)
                End Select
        End Select
    End Sub
weis jetzt nicht obs schon vollständig ist, sollte aber so in etwa zum laufen zu bringen sein ...

mfg
hmm... also ich finde vb / vb.net voll fürn arsch ...
macht es nicht sinn es in c++ zu transformieren?
xSharkoonX is offline  
Reply


Similar Threads Similar Threads
PostMessage UDF
06/27/2017 - AutoIt - 48 Replies
Benötigt wird mindestens AutoIt v3.3.8.1. Die UDF beinhaltet 9 Funktionen: _PostMessage_Send($hWnd, $Key, $Delay = 10) _PostMessage_SendDown($hWnd, $Key, $Delay = 10) _PostMessage_SendUp($hWnd, $Key, $Delay = 10) _PostMessage_Click($hWnd, $X = -1, $Y = -1, $Button = "left", $Clicks = 1, $Delay = 10) _PostMessage_ClickDown($hWnd, $X = -1, $Y = -1, $Button = "left") _PostMessage_ClickUp($hWnd, $X = -1, $Y = -1, $Button = "left") _PostMessage_ClickDrag($hWnd, $X1, $Y1, $X2, $Y2, $Button...
[c++]postmessage problem
07/03/2010 - C/C++ - 7 Replies
hi ich hab wieder mal ein problem ich versuche mit c++ einen bot zu schreiben und möchte einen tastendruck zum gewünschten fenster senden (nostale) mit postmessage aber wie?? ich habs mal so probiert #include <iostream> #include <windows.h>
[TUTORIAL] PostMessage mit AutoIT
06/16/2009 - Flyff Hacks, Bots, Cheats, Exploits & Macros - 0 Replies
Ich habe eine Anfrage bekommen wie man mit AutoIT Tasten und Mausklicks an ein Flyff Fenster sendet. Ich denke da das mehrere Leute interessieren könnte, poste ich hier meine ausführliche Antwort auf die Frage. Ob die Assembler Erklärung korrekt ist weiß ich nicht, sollte soweit auch unwichtig sein. Ich werde keine weiteren Fragen dazu beantworten. Die benötigte .dll findet ihr hier:



All times are GMT +1. The time now is 13:44.


Powered by vBulletin®
Copyright ©2000 - 2026, 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 ©2026 elitepvpers All Rights Reserved.