Schau dir mal StdoutRead() an.
Beiträge von BugFix
-
-
Wo finde ich die Funktionen GetModuleHandle und LoadImage?
Ja, sind auch in der WinApi.au3 -
Vielleicht ein Kompromiß-Vorschlag:
Die Namen der Controls werden überhaupt nicht übersetzt! Es wird ein Glossar angefügt, indem dann eine deutsche Be- und/oder Umschreibung zu dem Begriff steht.
Mir persönlich rollen sich die Fußnägel auf, wenn ich z.B. das Wort Listenansicht lese (Grrrr).
Ich kenne keine in deutsch erstellten Programmiersprachen. Weshalb soll man also mühselig deutsche Entsprechungen für Begriffe suchen, deren Bedeutung absolut unstrittig ist. Das ergibt für mich keinen Sinn und erinnert mich an ähnliche Vergewaltigungen der Sprache um Gleichberechtigung der Geschlechter durchzusetzen. (Da hatten wir mal eine Gleichstellungsbeauftragte in der Landesregierung, die dann für Bürgermeister das geschlechtsneutrale Wortungetüm die Person, die das Amt des Bürgermeisters innehat erschuf.)
-
Die Spaltenbreite fixieren, ob das per Style geht, weiß ich grad nicht. Aber so geht es auf jeden Fall:
Spoiler anzeigen
[autoit]#include <ListViewConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <StructureConstants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
#include <GUIListView.au3>$gui = GUICreate('test')
[/autoit] [autoit][/autoit] [autoit]
$hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200)
_GUICtrlListView_SetColumnWidth($hListView, 0, 146)
_GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
For $i = 1 To 10
GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
Next; hier für Vergleich die Spaltenbreite speichern:
[/autoit] [autoit][/autoit] [autoit]
Global $aColumnWidth[_GUICtrlListView_GetColumnCount($hListView)]
For $i = 0 To UBound($aColumnWidth) -1
$aColumnWidth[$i] = _GUICtrlListView_GetColumnWidth($hListView, $i)
NextGUISetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSEFunc _Columnwidth()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($aColumnWidth) -1
If _GUICtrlListView_GetColumnWidth($hListView, $i) <> $aColumnWidth[$i] Then
_GUICtrlListView_SetColumnWidth($hListView, $i, $aColumnWidth[$i])
EndIf
Next
EndFuncFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case -12 ; Spaltenbreite wurde verändert
_Columnwidth()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
Guckst du:
[autoit]Local $INI = @ScriptDir & '\Deine.INI'
[/autoit]
Local $section = 'section_name'
Local $aSection = IniReadSection($INI, $section)
Local $aIni[$aSection[0][0]][3]
For $i = 1 To UBound($aSection) -1
$aIni[$i-1][0] = $section
$aIni[$i-1][1] = $aSection[$i][0]
$aIni[$i-1][2] = $aSection[$i][1]
Next
_ArrayDisplay($aIni) -
Ich verstehe nicht den Sinn. Was soll denn da in der dritten Dimension gespeichert werden?
Meinst du tatsächlich 3D oder eher 2D mit einem zusätzlichen Element in der zweiten Dimension, also einer weiteren Spalte? -
Da du nicht ins BIOS kommst, versuch mal ob evtl. in der Bootreihenfolge USB vor der HD liegt. Also 'nen Stick bootfähig machen. Linux drauf und testen. Da hast du dann villeicht die Chance über Tools Infos aus dem BIOS zu lesen und evtl. auch Werte zu setzen.
Ansonsten mal noch etwas, was ich von Dell kenne:
- Num on
- Capslock on
Und dann: Alt+E+F+B
Steht für Emergency Flash Back und setzt das BIOS zurück auf Werkseinstellung.
Inwiefern das bei anderen Fabrikaten funktioniert ist wohl fraglich, aber einen Versuch ist es Wert.
Viel Glück. -
Ja Danke. Mit 'int_ptr' funktioniert es nun.

Nun muß ich nur noch testen ob (bzw. wie sehr) mich das zusätzliche Auslesen aus der Struktur bremst.
So habe ich es jetzt gelöst:Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
Global $aItemParam[1]
Local $col = ''
For $i = 1 To 120
$col &= $i & '|'
Next$gui = GUICreate('')
[/autoit] [autoit][/autoit] [autoit]
$lv = GUICtrlCreateListView(StringTrimRight($col,1), 10, 10, 200, 150)
$hLV = GUICtrlGetHandle($lv)_createNewItem($hLV, 'Test', $aItemParam)
[/autoit] [autoit][/autoit] [autoit]_markSubItem($aItemParam, $hLV, 0, 1)
[/autoit] [autoit][/autoit] [autoit]
_markSubItem($aItemParam, $hLV, 0, 119)For $i = 0 To _GUICtrlListView_GetColumnCount($hLV)-1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($i & ' - ' & _getMarked($hLV, 0, $i) & @CRLF)
NextFunc _createNewItem($hWnd, $sText, ByRef $aIParam, $iItem=-1) ; if $iItem=-1 append
[/autoit] [autoit][/autoit] [autoit]
If $iItem < -1 Then $iItem = 0
If $iItem > UBound($aIParam)-1 Then $iItem = -1
Local $cntCOL = _GUICtrlListView_GetColumnCount($hWnd)
Local $tagITEMPARAM = "int_ptr;char[" & $cntCOL & "]"
Local $tITEMPARAM = DllStructCreate($tagITEMPARAM)
DllStructSetData($tITEMPARAM, 1, DllStructGetPtr($tITEMPARAM, 2))
For $i = 1 To $cntCOL
DllStructSetData($tITEMPARAM, 2, '0', $i)
Next
If $iItem = -1 Then
_GUICtrlListView_AddItem($hWnd, $sText)
If $aIParam[UBound($aIParam)-1] Then ReDim $aIParam[UBound($aIParam)+1]
$aIParam[UBound($aIParam)-1] = $tITEMPARAM
_GUICtrlListView_SetItemParam($hWnd, 0, DllStructGetData($tITEMPARAM, 1))
Else
_GUICtrlListView_InsertItem($hWnd, $sText, $iItem)
_ArrayInsert($aIParam, $iItem, $tITEMPARAM)
_GUICtrlListView_SetItemParam($hWnd, $iItem, DllStructGetData($tITEMPARAM, 1))
EndIf
EndFuncFunc _markSubItem(ByRef $aIParam, $hWnd, $iItem, $iSubItem, $mark='1')
[/autoit] [autoit][/autoit] [autoit]
If $mark <> '1' Then $mark = '0'
If $iItem < 0 Or $iItem > _GUICtrlListView_GetItemCount($hWnd)-1 Then Return SetError(1,0,0)
If $iSubItem < 0 Or $iSubItem > _GUICtrlListView_GetColumnCount($hWnd)-1 Then Return SetError(2,0,0)
DllStructSetData($aIParam[$iItem], 2, $mark, $iSubItem+1)
EndFuncFunc _getMarked($hWnd, $iItem, $iSubItem)
[/autoit]
Local $ptr = _GUICtrlListView_GetItemParam($hWnd, $iItem)
Local $struct = DllStructCreate("char[" & _GUICtrlListView_GetColumnCount($hWnd) & "]", $ptr)
Return DllStructGetData($struct, 1, $iSubItem+1)
EndFunc -
Bitte, bitte sag, dass das keine Brute-Force-Attacke wird.

-
Ich denke auch, dass man Begriffe, deren Bedeutung perse klar ist, nicht in die deutsche Sprache zwängen sollte.
Computer auf deutsch: Rechenknecht
-
bernd670 : Danke für das Bsp.. Ich werde das gleich mal noch verallgemeinern und dem Dll-Tut hinzufügen.
-
-
as Script kann die Datei au3.keywords.abbreviations.properties nicht finden.
Ist die bei der Autoit v 3.3.0.0 nicht mehr enthalten ?
Es wurden zwar einige Pfade in SciTE mal geändert, aber die Datei existiert noch:
C:\Programme\AutoIt3\SciTE\Properties\au3.keywords.abbreviations.properties
Falls sie nicht da ist - probier doch mal sie einfach zu erstellen. -
Wenn du alle Varianten von ControlCommand ausgetestet hast, dann mußt du wohl oder übel davon ausgehen, dass dieses Control sich nicht mit AutoIt steuern läßt. Kommt vor.
-
-
Nicht so kompliziert.
[autoit]
Run(@AutoItExe [/ErrorStdOut] '/AutoIt3ExecuteLine' "command line")
[/autoit] -
Aber wenn in einem kompilierten Script z.B. ein unvorhergesehener Fehler auftritt
Versteh mich nicht falsch, aber unvorhergesehene Fehler gibt es nicht wirklich. Ich habe die Erfahrung gemacht, dass in der Regel ich der Trottel war, der vergessen hat ein mögliches Fehlerszenario zu berücksichtigen.
Es ist leider so, das ein Skript zu 1/3 aus Programm und zu 2/3 aus Errorhandling besteht, wenn du alle Usergemeinheiten abfangen willst.
-
Also es würde erstmal helfen, wenn du dein Problem in verständlichem deutsch darstellst.
Ansonsten schau mal in der Hilfe unter UDF: "Word Management" -
Das ist auch die normale Vorgehensweise ...

...die nicht angewendet werden kann, da IParam ausschließlich ein Integerwert sein muß. Und ein Pointer ist nun mal ein Pointer und kein Integerwert. Das war übrigens mein erster Gedanke und aufgrund der Bedingungen auch entsprechend der Mißerfolg.
-
also da würde 1 bzw 2 als Zahl reichen, hab ich das richtig verstanden?
[autoit]
Das kannst du bei zwei Werten tun, denn wenn der eine nicht zutrift kann es nur der andere sein.If MsgBox(1, '','...') = 1 Then
[/autoit]
;....Code
Else ; kann dann nur 2 sein
;....Code
EndIf