Youtube Suchfunktion

  • Ich wollte ein kleines Gui erstellen wo ich nur eine Input Box habe
    und wenn ich nun ein Wort eingebe und Enter drücke das, dies auf Youtube gesucht wird.
    Soweit so gut
    nun möchte ich aber das bei meinem GUI auch die Vorschläge wenn man etwas hineinschreibt
    wie eben bei google oder youtube die Begriffe welche oft gesucht werden
    Ich hänge ein Bild dazu damit ihr wisst was ich meine
    Hättet ihr eine Idee wie ich dies realisieren könnte ?

    [autoit]

    #include <GUIConstants.au3>
    #include <FF.au3>

    [/autoit][autoit][/autoit][autoit]

    $Window = GUICreate("Youtube Suche", 381, 43, 193, 115)
    $Label = GUICtrlCreateLabel("Suche:", 8, 8, 41, 17)
    $Input = GUICtrlCreateInput("", 56, 8, 217, 21)
    $Go = GUICtrlCreateButton("Go!", 280, 8, 89, 25, 0)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $Go
    ShellExecute("http://www.youtube.com/results?search_query=" & GUICtrlRead($Input))

    Case $Input
    ShellExecute("http://www.youtube.com/results?search_query=" & GUICtrlRead($Input))
    EndSwitch
    WEnd

    [/autoit]
  • Auch keine schlechte Idee, aber ich hätte an etwas anderes gedacht.
    Kann man nur einen bestimmten Teil einer Internetseite in einem GUI anzeigen lassen?
    (In meinem Fall die Youtube Suchleiste)

  • Ich habe mir den Artikel durchgelesen.
    Aber da ich noch ziemlich ein Anfänger auf dem Gebiet AutoIT bin, weiß ich
    jz nicht genau wie ich dies in mein Programm einbauen soll/kann.

  • Die API kannst du wie folgt abfragen. Du musst dir aber immer noch überlegen, wie du die Liste in der GUI darstellen willst.

    Spoiler anzeigen
    [autoit]

    $suche = "..."

    [/autoit] [autoit][/autoit] [autoit]

    $suche_enc = _URLEncode($suche)
    $ergebnis = BinaryToString(InetRead('http://suggestqueries.google.com/complete/search?hl=de&ie=utf-8&oe=utf-8&ds=yt&json=t&q=' & $suche_enc), 4)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, '', $ergebnis)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _URLEncode($sData)
    Local $aData = StringToASCIIArray($sData, Default, Default, 2)
    Local $sOut
    For $i = 0 To UBound($aData) - 1
    Switch $aData[$i]
    Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
    $sOut &= Chr($aData[$i])
    Case 32
    $sOut &= "+"
    Case Else
    $sOut &= "%" & Hex($aData[$i], 2)
    EndSwitch
    Next
    Return $sOut
    EndFunc ;==>__WinHttpURLEncode

    [/autoit]
  • Die Idee von BugFix mit der IntelliSenseBox hat mir schon nicht schlecht gefallen
    Nun habe ich die zwei Vorschläge zusammengeschmissen und leider nicht das ergebnis bekommen welches ich mir erhofft hatte
    Denn ich sehe bei der Auswahl nichts mehr
    Liegt höchstwahrscheinlich daran das ich $aData einfach das zuweiße was ich von Youtube bekommen.
    Komme aber irgendwie nicht wirklick zurecht

    Spoiler anzeigen
    [autoit]

    #include<GUIConstantsEx.au3>
    #include<ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIListBox.au3>
    #Include <WinAPI.au3>
    #include <Misc.au3>
    Opt("GUICloseOnESC", 0)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #region - Deklarationen für Sense
    Global $show = False
    Global $indexB = -1
    Global $SenseGui, $SenseCtrl, $guiBox, $box
    Global $POSSenseGui[2]
    $suche = GUICtrlRead($guiBox)

    [/autoit] [autoit][/autoit] [autoit]

    $suche_enc = _URLEncode($suche)
    #Region Box
    ; Hier die Auswahldaten (braucht nicht sortiert sein):
    Global $aData[10] = [BinaryToString(InetRead('http://suggestqueries.google.com/complete/search?hl=de&ie=utf-8&oe=utf-8&ds=yt&json=t&q=' & $suche_enc), 4)]
    $guiBox = GUICreate('', 150, 85, 0, 0, BitOR($WS_SIZEBOX,$WS_POPUP), $WS_EX_TOPMOST)
    $box = _GUICtrlListBox_Create($guiBox, '', 0, 0, 150, 86, BitOR($LBS_SORT, 0x00B00002))
    ; ListBox muß 1 Pixel höher als GUI sein - sonst fehlerhafte Darstellung
    For $i = 0 To UBound($aData) -1 ; falls Daten mit _FileReadToArray gelesen werden: StartIndex=1
    _GUICtrlListBox_AddString($box, $aData[$i])
    Next
    #EndRegion Box
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    GUIRegisterMsg($WM_MOVE, "_WM_MOVE")
    GUIRegisterMsg(0x231, "_WM_ENTERSIZEMOVE")
    #EndRegion - Deklarationen Sense

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region Main
    $Form1 = GUICreate('Intelli Sense Box', 200, 50, 200, 50)
    $SenseGui = $Form1 ; <== Für Allgemeingültigkeit Zuweisung an $SenseGui
    $Input = GUICtrlCreateInput('', 10, 10, 180, 21)
    $SenseCtrl = $Input ; <== Für Allgemeingültigkeit Zuweisung an $SenseCtrl
    $hInput = GUICtrlGetHandle($Input)
    GUISetState()
    #EndRegion Main

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While True
    _ChooseBox()
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    #region - SenseFuncs

    [/autoit] [autoit][/autoit] [autoit]

    Func _URLEncode($sData)
    Local $aData = StringToASCIIArray($sData, Default, Default, 2)
    Local $sOut
    For $i = 0 To UBound($aData) - 1
    Switch $aData[$i]
    Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
    $sOut &= Chr($aData[$i])
    Case 32
    $sOut &= "+"
    Case Else
    $sOut &= "%" & Hex($aData[$i], 2)
    EndSwitch
    Next
    Return $sOut
    EndFunc ;==>__WinHttpURLEncode

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _ChooseBox()
    If Not $show Then Return
    If _IsPressed('0D') Then ; ENTER
    ControlSetText($SenseGui, '', $SenseCtrl, _GUICtrlListBox_GetText($box, $indexB))
    GUISetState(@SW_HIDE, $guiBox)
    $show = False
    ElseIf _IsPressed('1B') Then ; ESC
    GUISetState(@SW_HIDE, $guiBox)
    $show = False
    ElseIf _IsPressed('26') Then ; UP
    If $indexB > 0 Then
    $indexB -= 1
    _GUICtrlListBox_SetCurSel($box, $indexB)
    Sleep(90)
    EndIf
    ElseIf _IsPressed('28') Then ; DOWN
    If $indexB < _GUICtrlListBox_GetCount($box)-1 Then
    $indexB += 1
    _GUICtrlListBox_SetCurSel($box, $indexB)
    Sleep(90)
    EndIf
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $hCtrl = $lParam
    Local $hSenseCtrl = $SenseCtrl
    If Not IsHWnd($hSenseCtrl) Then $hSenseCtrl = GUICtrlGetHandle($hSenseCtrl)
    If ($nNotifyCode = 1024 Or $nNotifyCode = 6) And $hCtrl = $hSenseCtrl Then
    Local $str = ControlGetText($SenseGui, '', $SenseCtrl)
    $indexB = _GUICtrlListBox_FindString($box, $str)
    _GUICtrlListBox_SetCurSel($box, $indexB)
    $caret = _CaretPos()
    If Not @error And Not $show Then
    If $caret[3] + $caret[4] - 95 < 0 Then ; Platz für Liste über dem Ctrl ausreichend?
    WinMove($guiBox, '', $caret[0], $caret[1] +25) ; Versatz 25 (Ctrlhöhe+5) unter y vom Ctrl
    Else
    WinMove($guiBox, '', $caret[0], $caret[1] -95) ; Versatz 95 (Boxhöhe+10) über y vom Ctrl
    EndIf
    GUISetState(@SW_SHOWNOACTIVATE, $guiBox)
    $show = True
    EndIf
    ElseIf $hCtrl = $box And $nNotifyCode = 1 Then
    $indexB = _GUICtrlListBox_GetCurSel($box)
    ControlSetText($SenseGui, '', $SenseCtrl, _GUICtrlListBox_GetText($box, $indexB))
    GUISetState(@SW_HIDE, $guiBox)
    $show = False
    ElseIf $show And $nNotifyCode = 512 And $hCtrl = $lParam And Not $hCtrl = $box Then
    GUISetState(@SW_HIDE,$guiBox)
    $show = False
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_ENTERSIZEMOVE($hWnd)
    If $hWnd = $SenseGui Then $POSSenseGui = WinGetPos($SenseGui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_MOVE($hWnd)
    If $hWnd = $SenseGui Then
    Local $pos = WinGetPos($guiBox)
    Local $postemp = WinGetPos($SenseGui)
    WinMove($guiBox,"",$pos[0]-($POSSenseGui[0]-$postemp[0]),$pos[1]-($POSSenseGui[1]-$postemp[1]))
    $POSSenseGui = WinGetPos($SenseGui)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CaretPos()
    Local $old = Opt("CaretCoordMode", 0) ;relative mode
    Local $c = WinGetCaretPos() ;relative caret coords
    Local $w = WinGetPos("") ;window's coords
    Local $f = ControlGetFocus("","") ;text region "handle"
    Local $e = ControlGetPos("", "", $f) ;text region coords
    Local $h = ControlGetHandle("", "", $f) ;Ctrl-Handle
    Local $t[5]
    If IsArray($c) and IsArray($w) and IsArray($e) Then
    If _WinAPI_IsClassName($SenseCtrl, 'Edit') Then ; Input wird als Edit-Class erkannt
    $t[0] = $c[0] + $w[0] + $e[0]
    ElseIf _WinAPI_IsClassName($SenseCtrl, 'ComboBox') Then
    $t[0] = $w[0] + $e[0]
    EndIf
    $t[1] = $c[1] + $w[1] + $e[1]
    $t[2] = $h
    $t[3] = $w[1]
    $t[4] = $e[1]
    Opt("CaretCoordMode", $old)
    Return $t ;absolute screen coords of caret cursor
    Else
    Opt("CaretCoordMode", $old)
    SetError(1)
    EndIf
    EndFunc
    #endregion - SenseFuncs

    [/autoit]

    Edit Oscar: Bitte Spoiler benutzen! Hinzugefügt...

    Einmal editiert, zuletzt von Oscar (28. Oktober 2011 um 04:34)

  • Hab mir das nocheinmal angeschaut und glaube das ich nur diese Zeile umändern muss

    [autoit]

    Global $aData[10] = ['Birne','Alligator','Auto','Dank','Automat','Bett','Garten','Bettler','Danke','Danksagung']

    [/autoit]

    Das Problem ist nun das ich von Youtube eine lange Kette von Zeichen bekommen und die irgendwie splitten muss
    damit sie in das Array aData passen.
    Nur weiß ich leider nicht wie ich das anstelle muss.
    Bitte um Hilfe :(

  • so habe jz noch ein wenig was ausprobiert
    habe mir tutorials zur arrays angeschauen
    habe trotzdem noch ein paar probleme
    $aData wird zwar erneuert aber nicht ausgegeben bei der Vorschlagtabelle
    und die Liste wird alphabetisch sortiert obwohl ich die Sort funktion schon weggelöscht habe
    und ich such noch eine Funktion die erkennt das man eine Taste gedruckt hat
    egal welche

    Spoiler anzeigen
    [autoit]

    #include<GUIConstantsEx.au3>
    #include<ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIListBox.au3>
    #Include <WinAPI.au3>
    #include <Misc.au3>
    #include <array.au3>
    #include <string.au3>
    Opt("GUICloseOnESC", 0)

    [/autoit] [autoit][/autoit] [autoit]

    #region - Deklarationen für Sense
    Global $show = False
    Global $indexB = -1
    Global $SenseGui, $SenseCtrl, $guiBox, $box
    Global $POSSenseGui[2]
    Global $Youtube[10]

    [/autoit] [autoit][/autoit] [autoit]

    $suche = GuiCtrlRead($SenseCtrl)
    $string = BinaryToString(InetRead('http://suggestqueries.google.com/complete/search?hl=de&ie=utf-8&oe=utf-8&ds=yt&json=t&q=' & $suche))
    $abda = """"
    $bisda = """"
    $Youtube = _StringBetween($string, $abda, $bisda)

    [/autoit] [autoit][/autoit] [autoit]

    MSGBOX(4096,"",$string)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region Box
    ; Hier die Auswahldaten (braucht nicht sortiert sein):
    ;~ Global $aData[10] = [$Youtube[1],$Youtube[2],$Youtube[3],$Youtube[4],$Youtube[5],$Youtube[6],$Youtube[7],$Youtube[8],$Youtube[9],$Youtube[10]]
    $guiBox = GUICreate('', 150, 85, 0, 0, BitOR($WS_SIZEBOX, $WS_POPUP), BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    ;~ $box = _GUICtrlListBox_Create($guiBox, '', 0, 0, 150, 86)
    ; ListBox muß 1 Pixel höher als GUI sein - sonst fehlerhafte Darstellung
    ;~ For $i = 0 To UBound($aData) -1 ; falls Daten mit _FileReadToArray gelesen werden: StartIndex=1
    ;~ _GUICtrlListBox_AddString($box, $aData[$i])
    ;~ Next
    #EndRegion Box
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    GUIRegisterMsg($WM_MOVE, "_WM_MOVE")
    GUIRegisterMsg(0x231, "_WM_ENTERSIZEMOVE")
    #EndRegion - Deklarationen Sense

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region Main
    $Form1 = GUICreate('Intelli Sense Box', 400, 300, 200, 50)
    $SenseGui = $Form1 ; <== Für Allgemeingültigkeit Zuweisung an $SenseGui
    $Input = GUICtrlCreateInput('', 10, 10, 380, 21)
    $SenseCtrl = $Input ; <== Für Allgemeingültigkeit Zuweisung an $SenseCtrl
    $hInput = GUICtrlGetHandle($Input)
    GUISetState()
    #EndRegion Main

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While True
    _ChooseBox()
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    #region - SenseFuncs
    Func _ChooseBox()
    If Not $show Or ControlGetText($SenseGui, '', $SenseCtrl) = "" Then
    GUISetState(@SW_HIDE, $guiBox)
    $show = False
    Return
    EndIf

    [/autoit] [autoit][/autoit] [autoit]




    ;~ $suche = GUICtrlRead($SenseCtrl)
    ;~ $string = BinaryToString(InetRead('http://suggestqueries.google.com/complete/search?hl=de&ie=utf-8&oe=utf-8&ds=yt&json=t&q=' & $suche))
    ;~ $abda = """"
    ;~ $bisda = """"
    ;~ $Youtube = _StringBetween($string, $abda, $bisda)
    ;~
    ;~ Global $aData[10] = [$Youtube[1],$Youtube[2],$Youtube[3],$Youtube[4],$Youtube[5],$Youtube[6],$Youtube[7],$Youtube[8],$Youtube[9],$Youtube[10]]
    ;~
    ;~ _ArrayDisplay($Youtube)
    ;~

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $guiBox = GUICreate('', 150, 85, 0, 0, BitOR($WS_SIZEBOX, $WS_POPUP), BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    ;~ $box = _GUICtrlListBox_Create($guiBox, '', 0, 0, 150, 86, BitOR($LBS_SORT, 0x00B00002))
    ;~ ; ListBox muß 1 Pixel höher als GUI sein - sonst fehlerhafte Darstellung
    ;~ For $i = 0 To UBound($aData) -1 ; falls Daten mit _FileReadToArray gelesen werden: StartIndex=1
    ;~ _GUICtrlListBox_AddString($box, $aData[$i])
    ;~ Next
    ;~
    ;~ GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    ;~ GUIRegisterMsg($WM_MOVE, "_WM_MOVE")
    ;~ GUIRegisterMsg(0x231, "_WM_ENTERSIZEMOVE")


    $suche = GuiCtrlRead($SenseCtrl)
    $string = BinaryToString(InetRead('http://suggestqueries.google.com/complete/search?hl=de&ie=utf-8&oe=utf-8&ds=yt&json=t&q=' & $suche))
    $abda = """"
    $bisda = """"
    $Youtube = _StringBetween($string, $abda, $bisda)

    [/autoit] [autoit][/autoit] [autoit]


    #Region Box
    ; Hier die Auswahldaten (braucht nicht sortiert sein):
    Global $aData[10] = [$Youtube[1],$Youtube[2],$Youtube[3],$Youtube[4],$Youtube[5],$Youtube[6],$Youtube[7],$Youtube[8],$Youtube[9],$Youtube[10]]


    $guiBox = GUICreate('', 150, 85, 0, 0, BitOR($WS_SIZEBOX, $WS_POPUP), BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    $box = _GUICtrlListBox_Create($guiBox, '', 0, 0, 150, 86)
    For $i = 0 To UBound($aData) -1 ; falls Daten mit _FileReadToArray gelesen werden: StartIndex=1
    _GUICtrlListBox_AddString($box, $aData[$i])
    Next

    _ArrayDisplay($box)

    #EndRegion Box
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    GUIRegisterMsg($WM_MOVE, "_WM_MOVE")
    GUIRegisterMsg(0x231, "_WM_ENTERSIZEMOVE")
    #EndRegion - Deklaratgionen Sense

    sleep(2000)

    [/autoit] [autoit][/autoit] [autoit]

    $hInput = GUICtrlGetHandle($Input)
    GUISetState()


    [/autoit] [autoit][/autoit] [autoit]

    If _IsPressed('0D') Then ; ENTER
    If _GUICtrlListBox_GetText($box, $indexB) <> 0 Then
    ControlSetText($SenseGui, '', $SenseCtrl, _GUICtrlListBox_GetText($box, $indexB))
    EndIf
    GUISetState(@SW_HIDE, $guiBox)
    $show = False
    ElseIf _IsPressed('1B') Then ; ESC
    GUISetState(@SW_HIDE, $guiBox)
    $show = False
    ElseIf _IsPressed('26') Then ; UP
    If $indexB > 0 Then
    $indexB -= 1
    _GUICtrlListBox_SetCurSel($box, $indexB)
    Sleep(90)
    EndIf
    ElseIf _IsPressed('28') Then ; DOWN
    If $indexB < _GUICtrlListBox_GetCount($box)-1 Then
    $indexB += 1
    _GUICtrlListBox_SetCurSel($box, $indexB)
    Sleep(90)
    EndIf
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $hCtrl = $lParam
    Local $hSenseCtrl = $SenseCtrl
    If Not IsHWnd($hSenseCtrl) Then $hSenseCtrl = GUICtrlGetHandle($hSenseCtrl)
    If ($nNotifyCode = 1024 Or $nNotifyCode = 6) And $hCtrl = $hSenseCtrl Then
    Local $str = ControlGetText($SenseGui, '', $SenseCtrl)
    $indexB = _GUICtrlListBox_FindString($box, $str)
    _GUICtrlListBox_SetCurSel($box, $indexB)
    $caret = _CaretPos()
    If Not @error And Not $show Then
    If $caret[3] + $caret[4] - 95 < 0 Then ; Platz für Liste über dem Ctrl ausreichend?
    WinMove($guiBox, '', $caret[0], $caret[1] +25) ; Versatz 25 (Ctrlhöhe+5) unter y vom Ctrl
    Else
    WinMove($guiBox, '', $caret[0], $caret[1] -95) ; Versatz 95 (Boxhöhe+10) über y vom Ctrl
    EndIf
    GUISetState(@SW_SHOWNOACTIVATE, $guiBox)
    $show = True
    EndIf
    ElseIf $hCtrl = $box And $nNotifyCode = 1 Then
    $indexB = _GUICtrlListBox_GetCurSel($box)
    ControlSetText($SenseGui, '', $SenseCtrl, _GUICtrlListBox_GetText($box, $indexB))
    GUISetState(@SW_HIDE, $guiBox)
    $show = False
    ElseIf $show And $nNotifyCode = 512 And $hCtrl = $lParam And Not $hCtrl = $box Then
    GUISetState(@SW_HIDE,$guiBox)
    $show = False
    EndIf
    Return $GUI_RUNDEFMSG


    [/autoit] [autoit][/autoit] [autoit]




    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_ENTERSIZEMOVE($hWnd)
    If $hWnd = $SenseGui Then $POSSenseGui = WinGetPos($SenseGui)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_MOVE($hWnd)
    If $hWnd = $SenseGui Then
    Local $pos = WinGetPos($guiBox)
    Local $postemp = WinGetPos($SenseGui)
    WinMove($guiBox,"",$pos[0]-($POSSenseGui[0]-$postemp[0]),$pos[1]-($POSSenseGui[1]-$postemp[1]))
    $POSSenseGui = WinGetPos($SenseGui)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CaretPos()
    Local $old = Opt("CaretCoordMode", 0) ;relative mode
    Local $c = WinGetCaretPos() ;relative caret coords
    Local $w = WinGetPos("") ;window's coords
    Local $f = ControlGetFocus("","") ;text region "handle"
    Local $e = ControlGetPos("", "", $f) ;text region coords
    Local $h = ControlGetHandle("", "", $f) ;Ctrl-Handle
    Local $t[5]
    If IsArray($c) and IsArray($w) and IsArray($e) Then
    If _WinAPI_IsClassName($SenseCtrl, 'Edit') Then ; Input wird als Edit-Class erkannt
    $t[0] = $c[0] + $w[0] + $e[0]
    ElseIf _WinAPI_IsClassName($SenseCtrl, 'ComboBox') Then
    $t[0] = $w[0] + $e[0]
    EndIf
    $t[1] = $c[1] + $w[1] + $e[1]
    $t[2] = $h
    $t[3] = $w[1]
    $t[4] = $e[1]
    Opt("CaretCoordMode", $old)
    Return $t ;absolute screen coords of caret cursor
    Else
    Opt("CaretCoordMode", $old)
    SetError(1)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]


    EndFunc
    #endregion - SenseFuncs

    [/autoit]

    Edit Oscar: Bitte Spoiler benutzen! Hinzugefügt...

    Einmal editiert, zuletzt von Oscar (28. Oktober 2011 um 04:35)

  • (C) by ProgAndy

    Spoiler anzeigen
    [autoit]

    ; by ProgAndy
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIListBox.au3>
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $fShowing = False
    #region - GUI Create
    $hGUI = GUICreate('test', 300, 300)
    $inp = GUICtrlCreateInput("", 10, 10, 200, 20)
    $hInp = GUICtrlGetHandle(-1)
    $selection = GUICtrlCreateList("", 10, 30, 200, 100)
    $hList = GUICtrlGetHandle(-1)
    GUICtrlSetState($selection, $GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateButton("button", 260, 20, 40, 30)

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUISetState()
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    If $fShowing Then
    If _IsPressed("28") And _WinAPI_GetFocus() = $hInp Then
    GUICtrlSetState($selection, $GUI_FOCUS)
    _GUICtrlListBox_SetCurSel($hList, 0)
    ElseIf _IsPressed("26") And _WinAPI_GetFocus() = $hList And _GUICtrlListBox_GetCurSel($hList) = 0 Then
    GUICtrlSetState($inp, $GUI_FOCUS)
    EndIf
    EndIf
    WEnd
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_COMMAND($hWnd, $uMsg, $wParam, $lParam)
    ; by ProgAndy
    Local $lo = BitAND($wParam, 0xFFFF)
    Local $hi = BitShift($wParam, 16)
    If $lo = $inp And $hi = $EN_CHANGE Then
    $suche_enc = _URLEncode(GUICtrlRead($inp))
    If $suche_enc Then
    $ergebnis = BinaryToString(InetRead('http://suggestqueries.google.com/complete/search?hl=de&ie=utf-8&oe=utf-8&ds=yt&json=t&q=' & $suche_enc), 4)
    ConsoleWrite($ergebnis & @LF)
    $ergebnis = StringRegExp($ergebnis, '"((?:(?<!\\)\\(?:\\\\)*"|[^"])*)"', 3)
    $max = (UBound($ergebnis)-1)/2
    $s = ""
    For $i = 1 To $max
    $s &= "|" & StringRegExpReplace($ergebnis[$i], '\\([\\"])', "\1")
    Next
    GUICtrlSetData($selection, $s)
    GUICtrlSetState($selection, $GUI_SHOW)
    $fShowing = True
    Else
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    EndIf
    ElseIf $lo = $inp And $hi = $EN_KILLFOCUS And _WinAPI_GetFocus() <> GUICtrlGetHandle($selection) Then
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    ElseIf $lo = $selection And $hi = $LBN_KILLFOCUS And _WinAPI_GetFocus() <> GUICtrlGetHandle($inp) Then
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _URLEncode($sData)
    ; by ProgAndy
    Local $aData = StringToASCIIArray($sData, Default, Default, 2)
    Local $sOut
    For $i = 0 To UBound($aData) - 1
    Switch $aData[$i]
    Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
    $sOut &= Chr($aData[$i])
    Case 32
    $sOut &= "+"
    Case Else
    $sOut &= "%" & Hex($aData[$i], 2)
    EndSwitch
    Next
    Return $sOut
    EndFunc ;==>__WinHttpURLEncode

    [/autoit]
  • @ Progandy , es Fehlen noch 2 Includes .. jetzt gehts :)

    [autoit]


    #include <ListBoxConstants.au3>
    #include <Misc.au3>

    [/autoit]
    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListBox.au3>
    #include <ListBoxConstants.au3>
    #include <Misc.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    ; by ProgAndy

    [/autoit] [autoit][/autoit] [autoit]

    $fShowing = False
    #region - GUI Create
    $hGUI = GUICreate('test', 300, 300)
    $inp = GUICtrlCreateInput("", 10, 10, 200, 20)
    $hInp = GUICtrlGetHandle(-1)
    $selection = GUICtrlCreateList("", 10, 30, 200, 100)
    $hList = GUICtrlGetHandle(-1)
    GUICtrlSetState($selection, $GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateButton("button", 260, 20, 40, 30)

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUISetState()
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    If $fShowing Then
    If _IsPressed("28") And _WinAPI_GetFocus() = $hInp Then
    GUICtrlSetState($selection, $GUI_FOCUS)
    _GUICtrlListBox_SetCurSel($hList, 0)
    ElseIf _IsPressed("26") And _WinAPI_GetFocus() = $hList And _GUICtrlListBox_GetCurSel($hList) = 0 Then
    GUICtrlSetState($inp, $GUI_FOCUS)
    EndIf
    EndIf
    WEnd
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_COMMAND($hWnd, $uMsg, $wParam, $lParam)
    ; by ProgAndy
    Local $lo = BitAND($wParam, 0xFFFF)
    Local $hi = BitShift($wParam, 16)
    If $lo = $inp And $hi = $EN_CHANGE Then
    $suche_enc = _URLEncode(GUICtrlRead($inp))
    If $suche_enc Then
    $ergebnis = BinaryToString(InetRead('http://suggestqueries.google.com/complete/search?hl=de&ie=utf-8&oe=utf-8&ds=yt&json=t&q=' & $suche_enc), 4)
    ConsoleWrite($ergebnis & @LF)
    $ergebnis = StringRegExp($ergebnis, '"((?:(?<!\\)\\(?:\\\\)*"|[^"])*)"', 3)
    $max = (UBound($ergebnis)-1)/2
    $s = ""
    For $i = 1 To $max
    $s &= "|" & StringRegExpReplace($ergebnis[$i], '\\([\\"])', "\1")
    Next
    GUICtrlSetData($selection, $s)
    GUICtrlSetState($selection, $GUI_SHOW)
    $fShowing = True
    Else
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    EndIf
    ElseIf $lo = $inp And $hi = $EN_KILLFOCUS And _WinAPI_GetFocus() <> GUICtrlGetHandle($selection) Then
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    ElseIf $lo = $selection And $hi = $LBN_KILLFOCUS And _WinAPI_GetFocus() <> GUICtrlGetHandle($inp) Then
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _URLEncode($sData)
    ; by ProgAndy
    Local $aData = StringToASCIIArray($sData, Default, Default, 2)
    Local $sOut
    For $i = 0 To UBound($aData) - 1
    Switch $aData[$i]
    Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
    $sOut &= Chr($aData[$i])
    Case 32
    $sOut &= "+"
    Case Else
    $sOut &= "%" & Hex($aData[$i], 2)
    EndSwitch
    Next
    Return $sOut
    EndFunc ;==>__WinHttpURLEncode

    [/autoit]
  • Funktioniert fast genau so wie ich es mir vorgestellt habe.
    Danke :)
    Nur das auswählen der vorgeschlagenen Wörter mit Enterist jetzt nicht mehr möglich
    Die Wörter werden zwar so blau markiert aber werden nicht mehr in das Fenster eingetragen

    Dazu muss man bei Zeile 36 noch den Befehl

    [autoit]

    ElseIf _IsPressed('0D') And _WinAPI_GetFocus() = $hList Then

    [/autoit]


    einfügen aber ich weis dann irgendwie nicht wie man das ausgewählte in die Box überträgt

    Und mir ist auch aufgefallen das die Ergebnisse alpaphetisch angezeigt werden
    Kann man sie rückgängig machen ?
    Ich möchte es so gelistet haben wie ich es von youtube bekommen da ja die Reihe der Vorschläge auf die Häufigkeit des gesuchten Begriffes
    basiert.

    3 Mal editiert, zuletzt von Amateur (30. Oktober 2011 um 17:11)

  • Habe jz noch ein wenig programmiert und es funktioniert alles gut
    Bis auf die Tatsache das die Vorschläge alpabetisch sortiert sind
    was ich eigentlich nicht wil
    möchte einfach nur wie die Daten von Youtube kommen wieder ausgeben.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIListBox.au3>
    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $fShowing = False
    #region - GUI Create
    $hGUI = GUICreate('Youtube-Suche', 220, 140,@DesktopWidth-230, @DesktopHeight-212)
    $inp = GUICtrlCreateInput("", 10, 10, 200, 20)
    $hInp = GUICtrlGetHandle(-1)
    $selection = GUICtrlCreateList("", 10, 30, 200, 100)
    $hList = GUICtrlGetHandle(-1)
    GUICtrlSetState($selection, $GUI_HIDE)
    Global $indexB = -1
    $Flanke26 = 1
    $Flanke28 = 1

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUISetState()
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect

    If $fShowing Then
    If _IsPressed("28") And _WinAPI_GetFocus() = $hInp Then
    GUICtrlSetState($selection, $GUI_FOCUS)
    _GUICtrlListBox_SetCurSel($hList, 0)


    ElseIf _IsPressed("26") And _WinAPI_GetFocus() = $hList And _GUICtrlListBox_GetCurSel($hList) = 0 Then
    GUICtrlSetState($inp, $GUI_FOCUS)


    ElseIf _IsPressed('0D') And _WinAPI_GetFocus() = $hList Then

    If $indexB = -1 Then
    ShellExecute("http://www.youtube.com/results?search_query="& GUICtrlRead($inp))
    ExitLoop
    ElseIf $indexB > -1 Then
    ShellExecute("http://www.youtube.com/results?search_query="&_GUICtrlListBox_GetText($selection, $indexB))
    ExitLoop
    EndIf


    ElseIf _IsPressed('0D') And _WinAPI_GetFocus() = $hInp Then
    If $indexB = -1 Then ShellExecute("http://www.youtube.com/results?search_query="& GUICtrlRead($inp))

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    EndIf

    If winactive($hGUI)=0 Then
    GuiDelete ($hGUI)
    ExitLoop
    EndIf

    If _IsPressed("26") Then
    If $Flanke26 Then
    $IndexB =$IndexB - 1
    $Flanke26 = 0
    EndIf
    EndIf

    If _IsPressed("26")=0 Then
    $Flanke26=1
    EndIf


    If _IsPressed("28") Then
    If $Flanke28 Then
    $IndexB =$IndexB + 1
    $Flanke28 = 0
    EndIf
    EndIf

    If _IsPressed("28")=0 Then
    $Flanke28=1
    EndIf

    WEnd
    #endregion

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_COMMAND($hWnd, $uMsg, $wParam, $lParam)
    ; by ProgAndy
    Local $lo = BitAND($wParam, 0xFFFF)
    Local $hi = BitShift($wParam, 16)
    If $lo = $inp And $hi = $EN_CHANGE Then
    $suche_enc = _URLEncode(GUICtrlRead($inp))
    If $suche_enc Then
    $ergebnis = BinaryToString(InetRead('http://suggestqueries.google.com/complete/search?hl=de&ie=utf-8&oe=utf-8&ds=yt&json=t&q=' & $suche_enc), 4)
    ConsoleWrite($ergebnis & @LF)
    $ergebnis = StringRegExp($ergebnis, '"((?:(?<!\\)\\(?:\\\\)*"|[^"])*)"', 3)
    $max = (UBound($ergebnis)-1)/2
    $s = ""
    For $i = 1 To $max
    $s &= "|" & StringRegExpReplace($ergebnis[$i], '\\([\\"])', "\1")
    Next
    GUICtrlSetData($selection, $s)
    GUICtrlSetState($selection, $GUI_SHOW)
    $fShowing = True
    Else
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    EndIf
    ElseIf $lo = $inp And $hi = $EN_KILLFOCUS And _WinAPI_GetFocus() <> GUICtrlGetHandle($selection) Then
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    ElseIf $lo = $selection And $hi = $LBN_KILLFOCUS And _WinAPI_GetFocus() <> GUICtrlGetHandle($inp) Then
    GUICtrlSetState($selection, $GUI_HIDE)
    $fShowing = False
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _URLEncode($sData)
    ; by ProgAndy
    Local $aData = StringToASCIIArray($sData, Default, Default, 2)
    Local $sOut
    For $i = 0 To UBound($aData) - 1
    Switch $aData[$i]
    Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
    $sOut &= Chr($aData[$i])
    Case 32
    $sOut &= "+"
    Case Else
    $sOut &= "%" & Hex($aData[$i], 2)
    EndSwitch
    Next
    Return $sOut
    EndFunc ;==>__WinHttpURLEncode

    [/autoit]
  • Da musst du mal bei der Listbox in der Hilfe schauen, da gibt es bestimmt ein paar Styles zu setzen ;)

  • Das Problem is das hier irgendwie keine Styles gestzt worden sind aber trotzdem
    kommt es alpabtisch raus.
    Kenne mich leider bei dem Script nicht ganz gut aus weil ich es von mehreren THemen zusammen "gebastelt" habe