Hi Moombas,
auch Dir danke für Deine Mühe.
Hi Moombas,
auch Dir danke für Deine Mühe.
Hi Kanashius,
man bist Du gut.
Wahnsinn da werde ich mich ersteinmal durcharbeiten müssen.
Melde mich dann noch einmal.
Erst einmal vielen vielen Dank.
ja, die Whileschleife lauft bis zum Schluss.
Tja, bei der MsgBox kommt nichts an.
Schade das Du das anhand eine mp4 Datei nicht testen kannst.
Ok danke, aber die GUI schliesst sich immer noch.
Habe festgestellt wenn man Opt('MustDeclareVars', 1) auskommentiert oder auf 0 bleibt die GUI sichtbar.
Vieleicht noch einmal zu Verständniss:
In dem Input $laufendeabspielzeit soll die laufende Abspielzeit dargestellt werden.
In dem Input $Filmdauer wird die gesamte Filmdauer dargestellt die ich ja schon mit ...
Global $sFilmlaenge = StringRegExpReplace($filmlength, ".*Duration:(\d+:\d+:\d+).*", "$1") ; Extrahiere die Filmlänge
GUICtrlSetData($Filmdauer, $sFilmlaenge)
... erfasse.
Dann steht im Inputfeld $Filmdauer: 01:47:31
Vielleicht sollten wir überprüfen ob überhaupt die Konsole im Editfeld ausgegeben wird, deswegen habe ich das Editfeld zur Kontrolle gemacht als Zwischenschritt, wird später wieder entfernt.
Aber da kommt nichts an.
Hier die Daten die in der Konsole geschrieben werden:
ffplay version 2023-04-12-git-1179bb703e-full_build-http://www.gyan.dev Copyright (c) 2003-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 58. 6.100 / 58. 6.100
libavcodec 60. 9.100 / 60. 9.100
libavformat 60. 4.101 / 60. 4.101
libavdevice 60. 2.100 / 60. 2.100
libavfilter 9. 5.100 / 9. 5.100
libswscale 7. 2.100 / 7. 2.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Eigene-Programme\von-ulf\Filmarchiv-2024\autoit\film1.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2020-12-01T10:10:09.000000Z
Duration: 01:47:31.39, start: 0.000000, bitrate: 427 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 480x256 [SAR 1:1 DAR 15:8], 360 kb/s, 29.95 fps, 29.95 tbr, 2396 tbn (default)
Metadata:
creation_time : 2020-12-01T10:10:09.000000Z
handler_name : Ì?
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default)
Metadata:
creation_time : 2020-12-01T10:11:09.000000Z
handler_name : Ì?
vendor_id : [0][0][0][0]
-0.02 A-V: -0.100 fd= 0 aq= 9KB vq= 21KB sq= 0B f=0/0
0.02 A-V: -0.096 fd= 0 aq= 9KB vq= 21KB sq= 0B f=0/0
0.05 A-V: -0.049 fd= 0 aq= 9KB vq= 20KB sq= 0B f=0/0
0.10 A-V: -0.046 fd= 0 aq= 9KB vq= 20KB sq= 0B f=0/0
0.13 A-V: -0.025 fd= 0 aq= 8KB vq= 20KB sq= 0B f=0/0
0.16 A-V: -0.027 fd= 0 aq= 9KB vq= 20KB sq= 0B f=0/0
0.20 A-V: -0.028 fd= 0 aq= 9KB vq= 20KB sq= 0B f=0/0
0.24 A-V: -0.015 fd= 0 aq= 9KB vq= 19KB sq= 0B f=0/0
Alles anzeigen
usw.
Das geht so lange wie der Film lang ist.
In der letzte Zeile steht = 6446.60 A-V: -5.189 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Es sollen ja nur die Werte vor A-V: im Inputfeld $laufendeabspielzeit dann ausgegeben werden.
Wenn ich das mache wird die GUI geschlossen und die Ausgabe an der Konsole brechen nach ca. 1 Sekunde ab, owohl der ffplay Player weiterläuft.
Hallo Moombas,
vielen Dank,
ja, aber ich muss doch erst einmal an die Daten von der Konsole rankommen.
Führe ich das zum testen aus: GUICtrlSetData($Edit1, StdoutRead($iPID)) werden kein Daten in das Editfeld übertragen.
Die Zahlen vor A-V: ändern sich auch ständig wie oben schon erwähnt.
Hallo,
ich habe folgendes Problem, vielleicht könnt Ihr mir helfen.
Ich habe diesen Code mit dem ich per ffprobe die Duration der mp4 ermittle und in das Imputfeld $sFilmlaenge schreibe.
Mit ffplay stelle ich das Video dar.
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>
Global $hGUI = GUICreate("Spieldauer anzeigen", 1000, 500, -1, -1)
Global $StartButton = GUICtrlCreateButton("Video Wählen", 10, 10, 100, 30)
Global $laufendeabspielzeit = GUICtrlCreateInput("", 120, 15, 100, 20, $ES_READONLY)
Local $Filmdauer = GUICtrlCreateInput("", 230, 15, 100, 20, $ES_READONLY)
Global $Edit1 = GUICtrlCreateEdit("", 10, 50, 980, 440)
GUICtrlSetData(-1, "")
_GUICtrlEdit_SetLimitText($Edit1, -1) ;kein Limit -1
GUISetState(@SW_SHOW, $hGUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $StartButton
_Filmlaenge()
Case $laufendeabspielzeit
Case $Filmdauer
Case $Edit1
EndSwitch
WEnd
Func _Filmlaenge()
Global $sinput = @ScriptDir & "\film1.mp4" ; FileOpenDialog("Wähle ein Video aus", @ScriptDir, "Datei (*.mp4;*.*;*;)", 1)
Local $iPID = Run(@ComSpec & ' /c ffplay -stats ' & """" & $sinput & """", @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
$filmlength = ""
Local $cmd = 'ffprobe.exe ' & '"' & $sinput & '"' & ' 2>&1 | findstr Duration' ; ermittelt die Filmlänge des Filmes
$handle = Run(@ComSpec & ' /c ' & $cmd, '', @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While True
$line = StdoutRead($handle)
If @error Then ExitLoop
$filmlength &= StringStripWS($line, 8)
$line &= StdoutRead($handle)
GUICtrlSetData($Edit1, StdoutRead($line))
WEnd
ProcessWaitClose($handle)
Global $sFilmlaenge = StringRegExpReplace($filmlength, ".*Duration:(\d+:\d+:\d+).*", "$1") ; Extrahiere die Filmlänge
GUICtrlSetData($Filmdauer, $sFilmlaenge)
;~ GUICtrlSetData($Edit1, StdoutRead($iPID))
EndFunc
Alles anzeigen
Mein Problem ist, das ich die Daten in der Autoikonsole, die, während das Video läuft, nicht erfassen kann.
Als Test wollte ich dies in dem Editfeld darstellen, funktioniert aber nicht.
Mein Anliegen ist, dass ich nur Zahlen vor A-V: erfassen will und in das Imputfeld $laufendeabspielzeit einlese.
Sinn und Zweck ist, das man dann im Inputfeld laufendeabspielzeit die bereits abgelaufende Zeit des Videos sieht.
Wenn man die rechte/linke Pfeiltaste drückt springt das Video 10 Sekunden vor/zurück.
Man kann auch mit der rechten Maustaste sich durch das Video bewegen.
Ausschnitt aus der Autoitkonsole:
0.88 A-V: -0.021 fd= 0 aq= 9KB vq= 11KB sq= 0B f=0/0
0.93 A-V: -0.021 fd= 0 aq= 9KB vq= 10KB sq= 0B f=0/0
0.97 A-V: -0.018 fd= 0 aq= 9KB vq= 8KB sq= 0B f=0/0
1.02 A-V: -0.017 fd= 0 aq= 9KB vq= 8KB sq= 0B f=0/0
1.07 A-V: -0.016 fd= 0 aq= 9KB vq= 7KB sq= 0B f=0/0
1.11 A-V: -0.016 fd= 0 aq= 9KB vq= 7KB sq= 0B f=0/0
16.72 A-V: -0.062 fd= 0 aq= 9KB vq= 35KB sq= 0B f=0/0
16.75 A-V: -0.059 fd= 0 aq= 8KB vq= 35KB sq= 0B f=0/0
16.80 A-V: -0.012 fd= 0 aq= 8KB vq= 35KB sq= 0B f=0/0
16.84 A-V: -0.022 fd= 0 aq= 9KB vq= 53KB sq= 0B f=0/0
16.87 A-V: -0.023 fd= 0 aq= 9KB vq= 53KB sq= 0B f=0/0
16.90 A-V: -0.024 fd= 0 aq= 8KB vq= 50KB sq= 0B f=0/0
16.95 A-V: -0.011 fd= 0 aq= 8KB vq= 49KB sq= 0B f=0/0
usw...
Alles anzeigen
Vielen Dank schon einmal für Eure Hilfe
Hi autoBert,
danke für den Hinweis.
Schaue ich mir an.
Überlege mir evtl. aber das ohne Abfrage der Listbox $hLB3 zu machen.
Das dauert doch recht lange.
Ich habe es jetzt so gelöst:
For $n = 0 To 30; $iCnt2 - 1
$klick = _GUICtrlListBox_ClickItem($hLB2, $n, "", False)
Sleep(500)
;~ $sMsg2 &= $n & ": " & _GUICtrlListBox_GetText($hLB2, $n) & $klick & @CRLF
$sMsg2 &= $n & ": " & _GUICtrlListBox_GetText($hLB2, $n) & ": " & _GUICtrlListBox_GetText($hLB3, 0) & @CRLF
;~ $sMsg2 &= $n & ": " & _GUICtrlListBox_GetText($hLB2, $n) & @CRLF
_GUICtrlListBox_SetCurSel($hLB2, $n)
Next
ConsoleWrite($sMsg2 & @CRLF)
Alles anzeigen
Mit _GUICtrlListBox_SetCurSel bleibt der Focus in der Listbox.
Nur das man fast eine 500ms warten muss bis er was findet ist nicht so gut.
Vielleicht gibt es ja da was
Hallo,
danke für die Antwort.
Ich hatte evtl. an sowas gedacht, aber bei über 400 Einträge verliert man den Focus. Warum?
Ich habe das mal mit 20 Einträgen getestet und das funktioniert, aber danach geht es nicht mehr, da rutscht die Maus aus der Listbox.
0: Camera/Field of View: 0
1: Camera/Image Igloo: I
2: Camera/Look Around: 0
3: Camera/Match New Photo...: 0
4: Camera/Next: 0
5: Camera/Orbit: O
6: Camera/Pan: H
7: Camera/Parallel Projection: 0
8: Camera/Perspective: 0
9: Camera/Position Camera: 0
10: Camera/Previous: 0
11: Camera/Standard Views /Back: 0
12: Camera/Standard Views /Bottom: 0
13: Camera/Standard Views /Front: 0
14: Camera/Standard Views /Iso: 0
15: Camera/Standard Views /Left: 0
16: Camera/Standard Views /Right: 0
17: Camera/Standard Views /Top: 0
18: Camera/Two-Point Perspective: 0
19: Camera/Walk: 0
20: Camera/Zoom: 0
...
Vielleicht gibt es doch noch eine Lösung!
Danke schon einmal für Eure Hilfe.
For $n = 0 To 20;$iCnt2 - 1
$klick = _GUICtrlListBox_ClickItem($hLB2, $n, "", True)
;~ $sMsg2 &= $n & ": " & _GUICtrlListBox_GetText($hLB2, $n) & $klick & @CRLF
$sMsg2 &= $n & ": " & _GUICtrlListBox_GetText($hLB2, $n) & ": " & _GUICtrlListBox_GetText($hLB3, 0) & @CRLF
;~ $sMsg2 &= $n & ": " & _GUICtrlListBox_GetText($hLB2, $n) & @CRLF
Next
ConsoleWrite($sMsg2 & @CRLF)
Alles anzeigen
Hallo ich brauche mal wieder Eure Hilfe.
Mit unten stehenden Code lese ich die Listbox $cidList2 aus.
Das sieht so aus:
0: Camera/Field of View 0
1: Camera/Image Igloo 0
2: Camera/Look Around 0
3: Camera/Match New Photo... 0
4: Camera/Next 0
5: Camera/Orbit 0
6: Camera/Pan 0
7: Camera/Parallel Projection 0
8: Camera/Perspective 0
9: Camera/Position Camera 0
10: Camera/Previous 0
...
439: Window/Show Tags 0
In der zweiten Listbox $cidList3 unter "Assigned" stehen manchmal auch Werte drin, wenn man z.B. den Eintrag "Camera/Image Igloo" in der Listbox 2 anklickt, erscheint in der Listbox $cidList3 ein "I", bei "Camera/Orbit" würde ein "O" stehen, bei "Camera/Zoom Extents" steht "Ctrl+Shift+E" und "Shift+Z".
Mein Lösungsansatz das ich einfach _GUICtrlListBox_GetText($hLB3, 0) mit Abfrage geht nicht, da erst immer ein Focus auf einem Wert in der zweiten Listbox stehen muss damit man dann den dazu passenden Wert in der dritten Listbox sieht.
Ein einfache _GUICtrlListBox_GetText($hLB2, $n) reicht nicht aus um auch den dazu passenden Wert aus Listbox3 zu holen.
Was kann man da machen?
#include <GuiListBox.au3>
Dim $ttlWindow
Dim $hdlWindow
Dim $cidList2, $cidList3
$ttlWindow = "SketchUp Preferences"
$cidList2 = "[CLASS:ListBox; INSTANCE:2]"
$cidList3 = "[CLASS:ListBox; INSTANCE:3]"
$hdlWindow = WinGetHandle($ttlWindow)
Local $hLB2 = ControlGetHandle($hdlWindow, "", $cidList2)
Local $hLB3 = ControlGetHandle($hdlWindow, "", $cidList3)
Local $iCnt2 = _GUICtrlListBox_GetCount($hLB2)
Local $iCnt3 = _GUICtrlListBox_GetCount($hLB3)
Local $sMsg2 = ""
Local $sMsg3 = ""
For $n = 0 To $iCnt2 - 1
;~ $sMsg2 &= $n & ": " & _GUICtrlListBox_GetText($hLB2, $n) & @CRLF
$sMsg2 &= $n & ": " & _GUICtrlListBox_GetText($hLB2, $n) & " " & _GUICtrlListBox_GetText($hLB3, 0) & @CRLF
Next
ConsoleWrite($sMsg2 & @CRLF)
Alles anzeigen
Hallo Velted,
vielen Dank für die ausführliche Erklärung, jetzt habe ich es einigermaßen verstanden
Aahhh, und ich dachte es wäre ein Qulitätsmerkmal, wie doof von mir.
Es macht hier immer wieder Spaß.
Der kürzeste Programmierer Witz: Gleich bin ich fertig!
In diesem Sinne, kann dies hier geschlossen werden.
Hallo Moombas,
danke für den Hinweis, ich muss ersteinmal den Code mit
; ListView füllen
For $Line In StringSplit($rdatei, @CRLF, 3)
$Line = StringReplace(StringReplace($Line, @TAB, "|"), "/", "|")
If @extended < 3 Then $Line = StringReplace($Line, "|", StringMid("|||", 1, 4 - @extended), - 1)
GUICtrlCreateListViewItem($Line, $List)
Next
verstehen und lernen, auch das was Bitnugger geschrieben hat.
Da tue ich mich doch noch schwer mit .
Vielen Dank an Alle.
Hallo Velted,
deine Lösung gefällt mir auch sehr gut, und Du bist Schüler?
Ich habe anstatt den Text wie Du in eine Func zu schreiben, es so gemacht Dim $Test = FileRead($sdatei)
Allerdings ist die erste Zeile in der Listview leer, deswegen noch ein _GUICtrlListView_DeleteItem($List, 0) hinterher.
Warum ist die erste Zeile leer, keine Ahnung?
Das GUI soll skalierbar sein, warum fehlt das kleine Dreieck recht unten?
An beide noch einmal vielen Dank für Eure Hilfe.
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <WindowsConstants.au3>; scalierbare GUI
$sdatei = @ScriptDir & "\meine-shortcut-liste-ori.txt"
Dim $Test = FileRead($sdatei)
#Region ###
$Form1 = GUICreate("meine " & _FileCountLines($sdatei) & " Shortcuts für Sketchup", 1000, 700, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_TOPMOST)
Global $List = GUICtrlCreateListView ("Shortcut|Menüname|Menü Item|Sub Menü|Befehl", 20, 20, 960, 660, $LVS_SORTASCENDING)
GUICtrlSendMsg($List, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
_GUICtrlListView_SetColumnWidth(-1, 0, 170)
_GUICtrlListView_SetColumnWidth(-1, 1, 180)
_GUICtrlListView_SetColumnWidth(-1, 2, 200)
_GUICtrlListView_SetColumnWidth(-1, 3, 200)
_GUICtrlListView_SetColumnWidth(-1, 4, 140)
; ListView füllen
For $Line In StringSplit($Test, @CRLF, 3)
$Line = StringReplace(StringReplace($Line, @TAB, "|"), "/", "|")
If @extended < 3 Then $Line = StringReplace($Line, "|", StringMid("|||", 1, 4 - @extended), - 1)
GUICtrlCreateListViewItem($Line, $List)
Next
_GUICtrlListView_DeleteItem($List, 0)
GUISetState(@SW_SHOW)
#EndRegion ###
;sortierung und Pfeile in Row
Global $hWndListView = GUICtrlGetHandle($List)
_GUICtrlListView_RegisterSortCallBack($hWndListView)
Func _sortlistview()
_GUICtrlListView_SortItems($hWndListView, GUICtrlGetState($List))
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Form1
Case $List
_sortlistview()
EndSwitch
WEnd
Alles anzeigen
Hallo Bitnugger,
danke für die Lösung, Wahnsinn!
Du hast natürlich Recht, dass ich die "Lösung" für Problem1 meinte, aber im Eifer des Gefechts habe ich das Wort vergessen.
Also nochmals vielen, vielen Dank.
Hi,
mein Problem Clipboard in Listview einfügen habe ich gerade was gefunden:
das habe ich nach ConsoleWrite($txt3) eingefügt, Zeile 27
$clip = $txt3
; Zeilenweise Ausgabe
$clip = StringReplace($clip, @CR, "")
$split = StringSplit($clip, @LF)
...
das habe ich vor GUISetState(@SW_SHOW) eingefügt, Zeile 54
For $i = 1 To $split[0] Step 1
GUICtrlCreateListViewItem($split[$i], $List)
Next
Jetzt fehlt eigentlich nur noch Problem 1
Hallo ich brauche mal Eure Hilfe.
Ich habe eine Datei(siehe Anhang) die ich mit StringReplace bearbeite.
Meine Frage ist:
1. wie bekommen ich die fehlenden Seperatoren "|" jeweils in die einzelnen Zeilen, wo die Seperatoren < als 4 sind,
und zwar vor dem letzten Eintrag in der jeweiligen Zeile, damit dann alle Zeilen die gleiche Anzahl der Seperatoren haben.
2. wie bekommt man das ganze dann in die Listview
Danke schon einmal für Eure Hilfe
#include <Array.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <File.au3>
#cs
Auszug aus $datei
. Extensions/Add Centerpoint
A Draw/Arcs/2 Point Arc
Ctrl+Shift+E Camera/Zoom Extents
Alt+NumPad8 Camera/Standard Views /Back
Alt+Q Tools/Fredo6 Collection/LordOfTheToolbars/Quick Command Finder
Space Tools/Select
#ce
$sdatei = @ScriptDir & "\meine-shortcut-liste-ori.txt"
ClipPut(FileRead($sdatei))
$txt1 = StringReplace(ClipGet(), @tab, "|")
$txt2 = StringReplace($txt1, " /", "|")
$txt3 = StringReplace($txt2, "/", "|")
ConsoleWrite($txt3)
#cs
Listview Aufbau (Auszug Beispieleinträge)
Shortcut | Menüname | Menü Item | Sub Menü | Befehl
-------------------------------------------------------------------------------------------------------
. | Extensions | | | Add Centerpoint
A | Draw | Arcs | | 2 Point Arc
Ctrl+Shift+E | Camera | | | Zoom Extents
Alt+NumPad8 | Camera | Standard Views | | Back
Alt+Q | Tools | Fredo6 Collection | LordOfTheToolbars | Quick Command Finder
Space | Tools | | | Select
#ce
#Region ###
$Form1 = GUICreate("meine " & _FileCountLines($sdatei) & " Shortcuts für Sketchup", 1000, 700, -1, -1)
Global $List = GUICtrlCreateListView ("Shortcut|Menüname|Menü Item|Sub Menü|Befehl", 20, 20, 960, 660, $LVS_SORTASCENDING)
GUICtrlSendMsg($List, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
_GUICtrlListView_SetColumnWidth(-1, 0, 200)
_GUICtrlListView_SetColumnWidth(-1, 1, 200)
_GUICtrlListView_SetColumnWidth(-1, 2, 200)
_GUICtrlListView_SetColumnWidth(-1, 3, 200)
GUISetState(@SW_SHOW)
#EndRegion ###
;sortierung und Pfeile in Row
Global $hWndListView = GUICtrlGetHandle($List)
_GUICtrlListView_RegisterSortCallBack($hWndListView)
Func _sortlistview()
_GUICtrlListView_SortItems($hWndListView, GUICtrlGetState($List))
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Form1
Case $List
_sortlistview()
EndSwitch
WEnd
Alles anzeigen
Hi Velted und Bitnugger,
vielen Dank für die Rückinfo.
Funktioniert einwandfrei.
Konnte mich erst jetzt melden da ich mich heute morgen nicht einloggen konnte.
An beide Danke noch einmal.
Hallo Bitnugger,
danke für die Rückantwort, das funktioniert.
Das Du so schnell Antwortest damit habe ich gar nicht gerechnet.
Erst einmal frohe Ostern.
Es geht eigentlich nur um folgendes:
Ich nutze privat Sketchup Pro 2019, mit sehr vielen Buttons (siehe Screenshot) und deswegen möchte ich gerne das Zeichenhandle
Local $hWnd = ControlGetHandle($title,"","[CLASS:AfxFrameOrView140u; INSTANCE:1]") manchmal in den Vollbildmodus setzten.
Um mehr geht es eigentlich nicht, aber...
Ist das Zeichenhandle im Vollbildmodus sieht man oben immer noch die Menüs (siehe rotes Rechteck),
und wenn die ganzen Buttons, Afx:ToolBar und Afx:ControlBar, nicht versteckt werden und man will was zeichen,
springt das Handle AfxFrameOrView140u wieder in den Normalmodus allesdings ohne Rahmen zurück.
Deswegen verstecke ich alle Afx:ToolBar und Afx:ControlBar da erst dann das Zeichenhandle im Vollmodus bleibt.
Die Menüs oben sind aber immer noch sichtbar.
Deswegen der Gedankengang die Menüs oben auch auszublenden und dann wieder wenn man im Normalmodus wechselt wieder da sind.
Vielleicht schafft man es aber, das das Handle AfxFrameOrView140u im Vollbildmodus bleibt ohne den Rest.
Vielen Dank schon einmal.
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>
#include <GuiMenu.au3>
Global $iOrgStyle, $fPressed = False, $hMenu, $hide = ControlHide, $show = ControlShow, $ProgramName = "fullscreen.exe"
; es wird nur eine Instanz ausgeführt.
If _Singleton($ProgramName, 1) = 0 Then
;"The program is already running."
Exit
EndIf
While Sleep(20)
If _IsPressed("7B") And $fPressed = False Then ;F12
;~ Opt("WinTitleMatchMode", 1)
;~ $WinHandle = WinGetHandle("[REGEXPTITLE:(?i)Sketchup Pro(.*?)]")
$WinHandle = WinGetHandle("[active]")
$sWinTitle = WinGetTitle($WinHandle)
;~ ConsoleWrite("Fenstertitel: " & $sWinTitle & @CRLF)
If not StringInStr($sWinTitle,'SketchUp Pro') Then Exit
;~ Hauptfenster Fullscreen
;~ $title = WinGetHandle("[active]")
$title = WinGetHandle($sWinTitle)
;schaltet Menü aus
$hMenu = _GUICtrlMenu_GetMenu($title)
_GUICtrlMenu_SetMenu($title, 0)
$aPos = WinGetPos($title) ;ursprüngliche Position und Grösse ermitteln
$iOrgStyleFull = _WinAPI_SetWindowLong($title, $GWL_STYLE, $WS_POPUPWINDOW) ;Rückgabewert ist der ursprüngliche Stil Hauptfenster
WinSetState($title, "", @SW_MAXIMIZE) ;Maximieren für Vollbild Hauptfenster
;~ Zeichenfenster Afx -> Fullscreen
; Assign a Local variable the handle of the Sketchup window
Local $hWnd = ControlGetHandle($title,"","[CLASS:AfxFrameOrView140u; INSTANCE:1]")
; Assign a Local variable the style of the Sketchup window.
Local $iStyle = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
; Remove from the window style the MAXIMIZEBOX, MINIMIZEBOX and SIZEBOX styles.
$iStyle = BitXOR($iStyle, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX)
; Set the style of the window. !!!nicht hier, da sonst resizeborder da ist!!!
;~ _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $iStyle)
;~ $iOrgStyleAfx = _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $iStyle)
; Apply the style zeigt das Afx Fenster als Vollbild im Vordergrund
_WinAPI_SetWindowPos($hWnd, $HWND_TOP, 0, 0, @DesktopWidth, @DesktopHeight, $SWP_FRAMECHANGED)
;versteckt alle Button
_WinGetControlList_all($hide)
$fPressed = True
ElseIf _IsPressed("7B") And $fPressed = True Then ;F12
;schaltet Menü weider ein
_GUICtrlMenu_SetMenu($title, $hMenu)
;zeigt wieder alle Button
_WinGetControlList_all($show)
$iOrgStyleAfx = _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $iStyle) ;Rückgabewert des ursprüngliche Stil von Afx
; Hauptfenster und Zeichenfenster wieder herstellen
_WinAPI_SetWindowLong($title, $GWL_STYLE, $iOrgStyleFull) ;ursprünglichen Stil Hauptfenster wiederherstellen
WinMove($title, "", $aPos[0], $aPos[1], $aPos[2], $aPos[3]) ;ursprünglichen Position und Grösse wiederherstellen
; Set the style of the window Zeichenfenster.
_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $iOrgStyleAfx) ;ursprünglichen Stil Afx Fenster wiederherstellen
WinSetState($title, "", @SW_RESTORE)
WinSetState($hWnd, "", @SW_SHOW )
$fPressed = False
EndIf
;~ If _IsPressed("1B") Then Exit ;Esc
If not ProcessExists("SketchUp.exe") Then Exit
WEnd
Func _WinGetControlList_all($hide_or_show)
$sTitle = ""
$sText = ""
Global $n = 0, $iCount
Global $sClassList = WinGetClassList($sTitle, $sText)
Global $aResult = StringRegExp($sClassList, "(\N+)", 3)
Redim $aResult[UBound($aResult)][10]
Global $aClasses = StringRegExp($sClassList, "(?s)(?:\A|\R)(\N+)(?=\R)(?!(?:\R\N+)*\R\1\R)", 3)
For $i = 0 To UBound($aClasses) - 1
StringRegExpReplace($sClassList, "\Q" & $aClasses[$i] & "\E\R", "")
$iCount = @extended
For $iInstance = 1 To $iCount
$aResult[$n][0] = $aClasses[$i] ; Class
$aResult[$n][1] = $aClasses[$i] & $iInstance ; ClassnameNN
$aResult[$n][2] = "[CLASS:" & $aClasses[$i] & "; INSTANCE:" & $iInstance & "]" ; Advanced mode
$aResult[$n][3] = ControlGetHandle($sTitle, $sText, $aResult[$n][2]) ; Handle
$aResult[$n][4] = ControlGetText($sTitle, $sText, $aResult[$n][3] ) ; Text
$aResult[$n][5] = _WinAPI_GetDlgCtrlID($aResult[$n][3]) ; ID
If StringInStr($aResult[$n][0], "Afx:ToolBar") Or StringInStr($aResult[$n][0], "Afx:ControlBar") = 1 Then
;~ ControlHide($sTitle, "", $aResult[$n][3])
$hide_or_show($sTitle, "", $aResult[$n][3])
EndIf
$n += 1
Next
Next
Return $aResult
EndFunc
Alles anzeigen