Seite 1 von 1

Eigene Anwendung in ein Spiel "einbauen bzw. drüberlege

Verfasst: 04.03.2008 04:44
von PGO
Ich möchte ein kleines Programm programmieren, was über ein Fullscreen-Spiel (z.B. WoW) ein kleines Fenster mit ein paar Tools legt, ähnlich wie bei X-Fire (nein, es soll kein Chat-Prog werden), ist so etwas mit PureBasic möglich? Hab schon lange rumprobiert und die Hilfe auf und ab studiert, bin aber zu keinem Ergebnis gekommen.

Verfasst: 04.03.2008 10:50
von Dostej
Hier im Forum gibts einen Zusatz, der so was kann:
http://www.purebasic.fr/german/viewtopi ... hlight=sgx

Damit solltest Du fenster im ScreenModus machen können

Verfasst: 04.03.2008 14:49
von Kaeru Gaman
@Dostej
ne, das ist was für Gadgets im eigenen Screen, ich glaub nicht dass er sowas gebrauchen kann.

@PGO
ich hab da nich soviel Ahnung von, wurde schon des öfteren gefragt hier im Forum,
lässt sich also auch was dazu finden.

spontan würde ich mal sagen:
wenn das Vollbild-Game mit einem maximierten Fenster arbeitet
statt mit einem klassischen Fullscreen, was unter XP eigentlich üblich ist,
dann könnte es sogar schon genügen,
wenn du deinem anwendungsfenster das AlwaysOnTop-Flag mitgibst.

Verfasst: 04.03.2008 16:48
von PGO
Mit einem AllwaysOnTopFenster funktioniert das ganze nicht. Wie könnte so etwas denn heißen? Hab schon gesucht aber nichts gefunden.

edit: hab evtl doch was: http://www.purebasic.fr/german/viewtopic.php?t=15520 nachher mal gucken, ob ich was damit anfangen kann.

Verfasst: 05.03.2008 01:14
von PGO
Leider hilft mir das nicht weiter. Das einzige was mir der Code bringt, ist dass das was im Spiel angezeigt wird nur beim Umschalten zw. Windows und den Spiel angezeigt wird.

Code: Alles auswählen

Procedure draw()
  direction = 2
  Repeat
    ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
    ;
    FlipBuffers(0) ;<-- hab ich auch alle möglichen Werte probiert
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver
EndProcedure
    If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)

  EndIf
 
  Handle = FindWindow_(#NUL, "GAME")
  SetForegroundWindow_(Handle)
 
    If OpenWindowedScreen(Handle, 0, 0, 160, 160, 0, 0, 0)
      CreateSprite(0, 20, 20)
      If StartDrawing(SpriteOutput(0))
        Box(0, 0, 20, 20, RGB(255, 0, 155))
        Box(5, 5, 10, 10, RGB(155, 0, 255))
        StopDrawing()
      EndIf
      EndIf
     
  CreateThread(@draw(),0)
 
  Repeat
     Delay(10)
     SendMessage_(Handle,#PB_Event_Repaint,0,0)
  ForEver

Verfasst: 05.03.2008 18:07
von Thorium
Das Zauberwort heisst. Direct3D- bzw. OpenGL-Hook.
Ist aber nicht so simpel. Obwohl, bei OpenGL gehts noch.

Hier ein 3 teiliges Tutorial wie man einen Direct3D9-Hook realisiert und ihn nutzt um ein eigenes Menü in in einem fremden Spiel anzuzeigen. Ich sags aber gleich: Ist nicht ganz einfach und Assemblerkenntnisse werden vorrausgesetzt.

http://gghz.de/viewtopic.php?t=145
http://gghz.de/viewtopic.php?t=147
http://gghz.de/viewtopic.php?t=151

Verfasst: 05.03.2008 18:35
von Fluid Byte
Ich steh auf son' Zeugs! Bild

Danke für den Hinweis auf diese nützlichen Tutorials.

Verfasst: 06.03.2008 01:41
von PGO
mit asm kenn ich mich leider gar nicht aus, aber danke für deine Hilfe