tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
960
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    flashgod flashgod ist offline Mitglied Silber
    Registriert seit
    Jan 2002
    Beiträge
    90
    Das wär der Code


    Option Explicit

    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

    Public Const WM_CLOSE = &H10
    Public Const WM_DESTROY = &H2


    Private Sub main()
    Dim win
    Dim msg
    win = FindWindow("ThunderRT6FormDC", "CraXMc")
    MsgBox (win)
    'msg = DefWindowProc(win, WM_CLOSE)
    'msg = SendMessage(win, WM_CLOSE)
    MsgBox (msg)
    End Sub

    Das mit FindWindow Funktioniert auch ohne Probleme
    Nun will ich aber dieses "gefundene" Fenster schließen
    Ich hab es schon mit allen möglichen Variationen von
    DefWindowProc und SendMessage -- mit -- WM_CLOSE, WM_DESTROY, WM_QUIT etc.

    Versucht aber ich bekomm immer den Fehler
    Argument nicht Optional.

    Was mach ich falsch****?
    Danke schon mal
     

  2. #2
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Public Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    ---> 4 parameter

    msg = DefWindowProc(win, WM_CLOSE)
    ---> 2 parameter

    und bei der MsgBox solltest du die parameter nur einklammern, wenn du einen rückgabewert brauchst.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  3. #3
    flashgod flashgod ist offline Mitglied Silber
    Registriert seit
    Jan 2002
    Beiträge
    90
    jo das hab ich auch gesehen
    ABER
    laut MSDN braucht man bei WM_CLOSE nur diese 2 Parameter
    die letzten 2 werden nicht benötigt

    und das letzte ist keine MsgBox sonder nur eine Variable die msg heißt


    aber wie löse ich mein problem nun?
    könnte mir einer nur den aufruf hinschreiben?
    danke
     

  4. #4
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    auch wenn die letzten beiden parameter keine informationen enthalten sollen, müssen die übergeben werden. zahlen ohne wert gibt's aber nicht, also haben die den wert 0:

    DefWindowProc(win, WM_CLOSE, 0, 0)



    MsgBox (msg)
    wenn das keine MsgBox ist, was ist das dann?
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  5. #5
    flashgod flashgod ist offline Mitglied Silber
    Registriert seit
    Jan 2002
    Beiträge
    90
    o sorry bin nur durcheinander gekommen weil du was anderes zitiert hast

    das mit den "0"len werd ich gleich mal versuchen Danke

    Aber wegen den Rückgabe wert mit der MsgBox hab ich noch nie gehört
    werd s mir auch gleich mal in der MSDN anschaun

    noch ne gute nacht!
     

  6. #6
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    naja.. ist halt ein unterschied, ob du eine msgbox benutzt, um eine meldung auszugeben...
    Code :
    1
    
    MsgBox "Meldung", vbQuestion + vbYesNo, "Bla"
    ...oder ob du damit eine bestätigung vom benutzer haben willst...
    Code :
    1
    
    Antwort = MsgBox("Meldung", vbQuestion + vbYesNo, "Bla")

    der unterschied zwischen einer normalen methode und einer funktion ist der, dass eine funktion irgendetwas zurückgibt. bei funktionen müssen die parameter eingeklammert werden, bei methoden nicht.

    im ersten fall ist die MsgBox nur eine normale methode, die eine meldung ausgibt und nichts weiter.
    im zweiten fall ist die MsgBox eine funktion, die einen wert zurückgibt, der den button definiert den der benutzer anklickt.

    du kennst bestimmt auch diese meldungen "möchten sie jetzt speichern? ja, nein, abbrechen", und so weiter.
    da kann man eben eine menge mit machen.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  7. #7
    flashgod flashgod ist offline Mitglied Silber
    Registriert seit
    Jan 2002
    Beiträge
    90
    jo ist mir schon klar
    danke das trotzdem so gut erklärt hast
    ich habs aber immer so gelöst
    will ich eine eingabe vom user immer InputBox
    und nur so schnell was zum debuggen MsgBox in ein fertiges programm kommt die eher selten.

    aber was noch super wär
    könntest du mir erklären warum ich
    hier die "0"len brauche?
    msg = DefWindowProc(win, WM_CLOSE,0,0)
    p.s Funktioniert SUPER

    ist das nur bei API funktionen so?
    oder hab ich bis jetzt was verpennt?
     

  8. #8
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    also normalerweise müsste der compiler sich beschweren, wenn man einfach nur
    Code :
    1
    
    MsgBox("test")
    schreibt. bei mir nimmt der die klammern nur, wenn ich nachher einen rückgabewert davon brauche.
    die MsgBox ist zwar prima zum debuggen, aber in so ziemlich jedem _fertigen_ programm kommen mehr von diesen funktionen vor, als du denkst. beispielsweise notepad: beim beenden gibt's eine abfrage, ob man änderungen speichern will - das ist eine MessageBox (oder MsgBox).
    im übrigen ist eine MessageBox was ganz anderes als eine InputBox, aber egal.

    die nullen brauchst du, weil die parameter in _der_ funktion eben nicht optional sind. wie die funktion selbst genau implementiert ist, kann ich dir nicht sagen.
    aber im grunde kann man sagen: überall, wo man als parameter wParam oder lParam übergeben muss, sollte man das auch tun. die eigentliche nachricht, die an das handle geschickt wird, ist ja WM_CLOSE, aber es gibt andere nachrichten, die noch zusätzliche informationen enthalten können - und die brauchen dann einfach noch die beiden anderen parameter.
    Geändert von Dario Linsky (18.07.02 um 00:22 Uhr)
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

Ähnliche Themen

  1. this-Probleme
    Von flashsi im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 05.09.09, 12:39
  2. Probleme mit dem IE6
    Von UncleB im Forum CSS
    Antworten: 3
    Letzter Beitrag: 10.01.09, 15:02
  3. 2 Probleme
    Von weightwatcher im Forum PHP
    Antworten: 22
    Letzter Beitrag: 30.01.05, 17:41
  4. Premiere Pro Export probleme / Projekt Probleme
    Von DanielT im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 5
    Letzter Beitrag: 31.10.03, 17:48
  5. Antworten: 6
    Letzter Beitrag: 21.05.03, 12:49