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.
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
Hallo Bitnugger,
bei Deinem obriges Script Example 1 kann man ja nur ein Item entfernen.
Durch eine Schleife kann man ja alle Menü Items mit _GUICtrlMenu_RemoveMenu entfernen.
Aber wie hole ich die wieder mit einer Schleife zurück?
Ich möchte gerne von einem externen Program das Menü Item komplett verstecken und nach einem Tastendruck wieder hervorholen.
Schon mal danke im vorraus.
Opt('MustDeclareVars', 1)
#include <GUIConstantsEx.au3>
#include <GuiMenu.au3>
Global $g_idMemo
Example1()
;~ Example2()
Func Example1()
Local $hWnd, $hMain, $iCmdID, $hMenu_save
; Open Notepad
Run("notepad.exe")
WinWaitActive("[CLASS:Notepad]")
$hWnd = WinGetHandle("[CLASS:Notepad]")
$hMain = _GUICtrlMenu_GetMenu($hWnd)
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hMain = ' & $hMain & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
;~ $iCmdID = _GUICtrlMenu_GetItemID ( $hMain, 4)
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iCmdID = ' & $iCmdID & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Sleep(1000)
; Remove Help menu
;~ $hMenu_save = _GUICtrlMenu_GetItemSubMenu($hMain, 4)
;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Remove Help menu : ' & _GUICtrlMenu_RemoveMenu($hMain, 4) & ' - $hMenu_save = ' & $hMenu_save & @CRLF)
For $iCmdID = _GUICtrlMenu_GetItemCount ($hMain) - 1 To 0 Step - 1
ConsoleWrite($hMain & " " & $iCmdID & @CRLF)
_GUICtrlMenu_RemoveMenu ($hMain, $iCmdID)
Next
Sleep(1000)
; Restore Help menu
; _GUICtrlMenu_InsertMenuItem($hMain, 4, "&New Help", $iCmdID, $hMain)
; ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Restore Help menu : ' & _GUICtrlMenu_SetItemSubMenu($hMain, 4, $hMenu_save) & @CRLF)
; _GUICtrlMenu_SetMenu($hWnd, $hMain)
;funktioniert nicht
For $iCmdID = _GUICtrlMenu_InsertMenuItem ($hMain, $iCmdID, $hMain) - 1 To 0 Step - 1
_GUICtrlMenu_SetMenu($hWnd, $hMain)
Next
EndFunc ;==>Example1
Alles anzeigen
Man seit Ihr schnell.
Dein Script funktioniert Micha_he.
Das von MojoeB funktioniert bei mir nicht.
Heute Nachmittag hatte ich auch die Idee mit Binary Read, nur habe ich Binary Write vergessen.
Super Arbeit und Danke für Eure Hilfe.
Hallo Micha_he,
danke für die Info, aber wie Du auch festgestellt hast funktioniert das nicht.
Ich denke mir, das liegt an der Datei.
Die Extension ist eigentlich eine bip Datei (Keyshot), nur die konnte ich nicht als Anhang hochstellen, deswegen als txt.
Habe hier nur die Extension geändert, als Kodierung ist es eine ANSI.
Wenn mann sich die Datei im notepad++ anschaut stehen weiter unten so schwaze NUL Zeichen.
Wie gesagt händisch geht es nur nicht mit _ReplaceStringInFile
Ich hatte auch das mal probiert, geht auch nett:
#include <File.au3>
Local $aFile, $sText, $sFile = @ScriptDir & "\untitled.bip"
_FileReadToArray($sFile, $aFile)
_ArrayDisplay($aFile)
For $a = 1 To $aFile[0]
If StringInStr($aFile[$a], 'version 9') Then
$sText = StringReplace(FileReadLine($sFile, $a), 'version 9', 'version 7')
_FileWriteToLine($sFile, $a, $sText, 1)
EndIf
Next
Alles anzeigen
Im ArrayDisplay stehen dann so komische Zeichen.
Habe auch mal mit:
$file = FileOpen($aFiles[0], 512)
$read = FileRead($file)
_ReplaceStringInFile($read, "version 9", "version 7") ;!!!!!!!!!!!!!!!!
es versucht und den mode geändert, aber hat auch nichts gebracht.
Alles sehr seltsam
Hallo ich brauch mal Eure Hilfe, ich komme nicht weiter.
Ich habe eine Datei "untitled.txt" in der möchte ich den String "version 9" in "version 7" ändern.
Wenn ich die Datei mit notepad++ öffne und es händisch ändere und wieder abspeiche funktioniert es.
In meiner GUI füge ich per Drag and Drop die Datei ein.
Aber mit _ReplaceStringInFile funktioniert es nicht.
Ich denke mir, es liegt an der Datei, weil weiter unten in der Datei stehen so komische Zeichen, siehe Anhang.
Hat jemand eine Idee, wie ich das lösen kann.
Danke im vorraus.
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
Global $gaDropFiles[1], $iDropItem = -1
#Region ###
Global $Form1 = GUICreate("", 200, 200, -1, -1, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_ACCEPTFILES, $WS_EX_CONTROLPARENT)) ;$WS_EX_CONTROLPARENT = verschiebt Fenster auch ohne Rahmen
GUISetBkColor(0x01A1F7)
$FILES_DROPPED = GUICtrlCreateDummy()
GUISetState(@SW_SHOW)
#EndRegion ###
GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $FILES_DROPPED
$aFiles = $gaDropFiles
_change_bip()
EndSwitch
WEnd
Func _change_bip()
$file = FileOpen($aFiles[0], 512)
$read = FileRead($file)
_ReplaceStringInFile($read, "version 9", "version 7") ;!!!!!!!!!!!!!!!!
EndFunc
Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
Local $nSize, $pFileName
Local $nAmt = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', 0xFFFFFFFF, 'ptr', 0, 'int', 0)
ReDim $gaDropFiles[$nAmt[0]]
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', 0, 'int', 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate('wchar[' & $nSize & ']')
DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', DllStructGetPtr($pFileName), 'int', $nSize)
$gaDropFiles[$i] = DllStructGetData($pFileName, 1)
$pFileName = 0
Next
GUICtrlSendToDummy($FILES_DROPPED, $nAmt[0])
EndFunc
Alles anzeigen
Alles klar, nochmal vielen Dank.
Kann abgeschlossen werden
Du bist der Hammer.
11 Zeilen Code, Wahnsinn
Ich muss noch viel viel lernen. An deine Programmierkünste werde ich eh nie herankommen.
Tausend Dank.
Ich traue moch garnicht zu fragen, da ich noch was vergessen habe.
In dem Text muss auch noch der String EJicyqvP ausgewechselt werden in myani_draw und myani_fade.
Aber ich will es mal versuchen.
<style data-made-with="vivus-instant">
@keyframes EJicyqvP_draw {
to {
stroke-dashoffset: 0;
}
}
@keyframes EJicyqvP_fade {
0%,
94.44444444444444% {
stroke-opacity: 1;
}
to {
stroke-opacity: 0;
}
}
</style>
Ahh, vielen Dank funktioniert.
Klasse Forum, tolle Hilfe.