Keresés

Új hozzászólás Aktív témák

  • pmonitor

    aktív tag

    válasz lenkei83 #16474 üzenetére

    Ez esetben a belépésnél el kell küldened a PID-et, vagy a Fő form Handle-jét, és rögzíted az adatbázisban, ha nincs benne. Én a fő form Handle-jét küldeném el, mert ebből is utána lehet nézni a PID-nek. A következő lépés attól függ, hogy mit rögzítesz az adatbázisban. Ha a Fő form Handle-jének WM_DESTROY üzenetet küldesz a SendMessage-el, akkor ugyanazt éred el, mint az application.exit-el(ez "mindent visz"). Ha WM_CLOSE üzenetet küldesz neki, akkor lefut pl. a form Form_Closing eseménye(ebből akár meg is akadályozhatod, hogy bezáródjon a form). Példaként megcsinálhatod a következőt(ha 64 bites wined van). Letöltöd innen a Processx64.rar-t.
    Ezután készítesz egy winform alkalmazást, amire rádobsz egy textbox-ot, egy button-t, és egy combobox-ot. Design nézetben elrendezed őket úgy, ahogy akarod. A Form1.vb-ben lévő dolgokat lecseréled erre:
    Imports System.Runtime.InteropServices

    Public Class Form1
    Const WM_CLOSE = &H10
    Const WM_DESTROY = &H2
    Const WM_GETTEXTLENGTH = &HE

    <DllImport("user32.dll", CharSet:=CharSet.Auto)>
    Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As IntPtr
    End Function

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    Button1.Text = "Bezárás"
    ComboBox1.Items.AddRange(New Object() {"WM_CLOSE", "WM_DESTROY"})
    ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
    ComboBox1.SelectedIndex = 0
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If IsNumeric(TextBox1.Text) Then
    Dim WM As Integer
    If SendMessage(TextBox1.Text, WM_GETTEXTLENGTH, 0, IntPtr.Zero) Then
    If ComboBox1.SelectedIndex = 0 Then
    WM = WM_CLOSE
    Else
    WM = WM_DESTROY
    End If
    SendMessage(TextBox1.Text, WM, 0, IntPtr.Zero)
    Else
    MsgBox("Az ablaknak nincs címe!")
    End If
    End If
    End Sub
    End Class

    Ezt lefordítod. Ha minden jól megy akkor le is fordul. Majd megnyitsz egy notepad-ot, és írsz bele valamit. Megnyitod a Processx64.rar-ban lévő .exe-t és megkeresed azt a notepad-ot. Jobb klikk->Ablakok kiválasztása. A megnyíló ablakban megkeresed a Class mezőben a "Notepad"-ot. Ebben a sorban a Hwnd-t átmásolod a lefordított programod textbox-ába. Kiválasztod a combobox-ban a műveletet, majd klikk a button-ra. Itt láthatod a különbséget a WM_CLOSE és a WM_DESTROY között.

    Neked ugyanezt kellene csinálnod, csak az adatbázisban tárolt Handle-nek küldeni ezeket.

Új hozzászólás Aktív témák

Hirdetés