2016-05-20 4 views
0

Ich versuche eine Anwendung zu erstellen, die meinen Bildschirm mit einem transparenten Bild in der Mitte überlagern kann. Mein Ziel ist es, ein Fadenkreuz für ein Spiel ohne Fadenkreuz zu erstellen. Ich denke nach, ob der Titel des aktiven Fensters mit dem Namen des Spiels übereinstimmt und wenn ja, zeige das überlagernde Fadenkreuz an. Wie würde ich ein Bildschirm-Overlay machen? Dies ist mein aktueller Code:Transparent Overlay

Private Function GetCaption() As String 
    Dim Caption As New System.Text.StringBuilder(256) 
    Dim hWnd As IntPtr = GetForegroundWindow() 
    GetWindowText(hWnd, Caption, Caption.Capacity) 
    Return Caption.ToString() 
End Function 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    If GetCaption() = "Game NameOf" Then 
     'Display Crosshair 
    End If 
End sub 

Antwort

2

Diese Methode funktioniert für die meisten Spiele, aber nur in Fenstermodus!

  1. Platz ein picturebox auf dem Formular und maximieren yout picturebox
  2. Ihre Windowboarders Deaktivieren:

    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

  3. Stellen Sie Ihren transperency Schlüssel zu schwarz. Th

    Me.TransparencyKey = Color.Black

  4. Set Hintergrundfarbe schwarz:

    Me.PictureBox1.BackColor = Color.Black

  5. Stellen Sie Ihre Fenster in den Vordergrund:

    Me.TopMost = true

  6. Maximieren Sie Ihre Fenster:

    Me.WindowState = FormWindowState.Maximized

Jetzt können Sie auf Ihrem Picturebox in einem Timer1_Tick oder Form1_Paint Ereignis ziehen. Alles, was nicht schwarz ist, wird auf Ihren Desktop gezeichnet.

Dim g As = GraphicsPictureBox1.CreateGraphics 
... 
g.DrawLine(Pens.Red, 10, 10, 200, 200) 

Wichtig:

Zur Eingabe von Maus und Tastatur durch das Fenster passieren, Sie haben die WS_EX_TRANSPARENT Flags hinzuzufügen, während .net Formular erstellt. Dies kann durch overriding CreateParams proterty erfolgen:

Const WS_EX_TRANSPARENT As Long = &H20 
... 
Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams 
Get 
    Dim SecPerm As New SecurityPermission(SecurityPermissionFlag.UnmanagedCode) 
    SecPerm.Demand() 
    Dim cp As CreateParams = MyBase.CreateParams 
    cp.ExStyle = cp.ExStyle Or WS_EX_TRANSPARENT 
    Return cp 
End Get 
End Property 

Hoffe, dass ich Ihnen helfen könnte.

enter image description here

+0

Hej Al-aex! Ich danke dir sehr! Der WS_EX_TRANSPARENT hat den Job gemacht! Ich übersprang die Bildbox und ging mit einem einfachen '+' Symbol in einem Etikett als Zielfernrohr. – TobiasKnudsen