Hi,
auf Anhieb würde ich sagen:
[autoit]_GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0)
[/autoit]Gruß
Greenhorn
Hi,
auf Anhieb würde ich sagen:
[autoit]_GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0)
[/autoit]Gruß
Greenhorn
Hm,
rein theoretisch sollte es so irgendwie Funktionieren, aber irgendwie listet es nicht alle Fenster auf ...
Global Const $user32dll = DllOpen ("user32.dll")
#include <Constants.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global Const $MAX_PATH = 260
Global Const $HWND_DESKTOP = 0
Func GetTopWindow ($hWnd)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($user32dll, 'HWND', 'GetTopWindow', _
'HWND', $hWnd)
Return $aRes[0]
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func GetNextWindow ($hWnd, $wCmd)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($user32dll, 'HWND', 'GetWindow', _
'HWND', $hWnd, _
'UINT', $wCmd)
Return $aRes[0]
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func GetWindowText ($hWnd, ByRef $lpString, $nMaxCount)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($user32dll, 'INT', 'GetWindowTextW', _
'HWND', $hWnd, _
'WSTR', $lpString, _
'INT', $nMaxCount)
If (not @error) Then
$lpString = $aRes[2]
Return $aRes[0]
EndIf
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func GetWindowZOrder ($hWnd)
[/autoit] [autoit][/autoit] [autoit]Local $hwndTop
Local $hwndNext
Local $sText
$hwndTop = GetTopWindow ($hWnd)
[/autoit] [autoit][/autoit] [autoit]If (not $hwndTop) Then _
Return FALSE
GetWindowText ($hwndTop, $sText, $MAX_PATH)
ConsoleWrite (StringFormat ("--- HWND: %s; Text: %s\n", $hwndTop, $sText))
$hwndNext = GetNextWindow ($hwndTop, $GW_HWNDNEXT)
[/autoit] [autoit][/autoit] [autoit]GetWindowText ($hwndNext, $sText, $MAX_PATH)
ConsoleWrite (StringFormat ("--- HWND: %s; Text: %s\n", $hwndNext, $sText))
While (($hwndNext = GetNextWindow ($hwndNext, $GW_HWNDNEXT)) <> 0)
[/autoit] [autoit][/autoit] [autoit]GetWindowText ($hwndNext, $sText, $MAX_PATH)
ConsoleWrite (StringFormat ("--- HWND: %s; Text: %s\n", $hwndNext, $sText))
WEnd
Return TRUE
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit]WinActivate ("PoEdit")
Sleep (500)
GetWindowZOrder ($HWND_DESKTOP) ; Desktop = 0
DllClose ($user32dll)
Exit (0)
;«««««««««««««««««««««««««««««««« End Of File «««««««««««««««««««««««««««««««««
[/autoit]Gruß
Greenhorn
Greenhorn: Was meinst du denn mit Code-Faltung?
Siehe SciTE Menüpunkt Ansicht (View) -> Alle Code-Falten ein|aus (toggle all folds) ...
Ist aber noch fehlerhaft, wie ich gerade sehe ...
Gruß
Greenhorn
Guter Tip! Vielen Dank dafür. Ich komme wahrscheinlich nie aus dem "Hobby-Programmierer-Status" raus, die ASM-Geschichte hatte mich interessiert, weil ich in den letzten Monaten aufgrund einer OP zwangsruhiggestellt war und ich beim Aufräumen einige "alte" Programmlistings gefunden hatte.
Ob ich das Thema weiter vertiefe, weiss ich noch nicht genau, der Umzug auf 64Bit-Systeme wird mittelfristig anstehen, und für "Just for Fun" ist 64Bit-Asm doch etwas komlex^^
Jedenfalls würde ich mich über dein Feedback/Verbesserungsvorschläge bzgl. ASM freuen, einige der "Autodidakten" hier im Forum (so wie ich) würden sicherlich gerne von deinem KnowHow profitierenund müssten nicht stundenlang herumprobieren, bis einem ein Kronleuchter aufgeht
Ich bin auch nur ein Hobby-Programmierer und Autodidakt.
Mit ASM beschäftige ich mich seit ca. einem Jahr und ich habe eigentlich auch viel zu wenig Zeit dafür.
64bit Programme in Assembler zu schreiben ist einfacher als 32bit ASM, finde ich.
In 64bit ASM (MODEL FLAT) gibt es keine Segmente mehr, alles befindet sich im gleichen Segment. ![]()
Dein ASM Tutorium ist prima gemacht, aber aus den Antworten, bzw. den Eigenversuchen der Leute ersehe ich teilweise, dass die Grundlagen noch nicht richtig verstanden wurden. Ein Buch, dass ich jedem Interessierten empfehlen kann ist Assembler - Grundlagen der Programmierung von Joachim Rohde und Marcus Roming.
Mach weiter so
und mal sehen ob meine Kenntnisse ausreichend sind um mich positiv einzubringen ... ![]()
EDIT:
Ich habe letzte Woche Code-Faltung für ASM in Scintilla eingebaut, bisher aber nur für MASM-Syntax. ![]()
Vielleicht kannst Du mir ja bei Gelegenheit behilflich sein FASM-Syntax zu integrieren, sollte die Syntax stark von der MASM-Syntax abweichen (bei den Makros ist es jedenfalls so).
Bisher habe ich Faltung für Makros, Strukturen/Records/Unions, Prozeduren, bedingte Assemblierung und für die (MASM) Pseudo-Direktiven .if/.elseif/.else und .while (.repeat/.until fehlt noch, fällt mir gerade ein).
Gruß
Greenhorn
Es würde mich allerdings schon interessieren, warum dieser abschreckende Hinweis in der Hilfe steht. Hat Jemand eine Ahnung?
Am Anfang gab es Probleme mit Arrays, die als statische Variable deklariert wurden. Genauer, bei der Benutzung von ReDim mit einer statischen Arrayvariable.
Ob der Fehler inzwischen behoben wurde weiss ich nicht, aber könnte gut sein. Und ebenso könnte es gut sein, das einfach vergessen wurde, den Warnhinweis zu entfernen (wäre nicht das erste mal).
Bei einem normal kompilierten Programm werden statische Variablen meist im __BSS Segment angelegt. Hier haben wir es aber mit einem Interpreter zu tun, der die Variablen aus dem Skript zur Laufzeit erzeugt.
Andy
Du kannst in ASM statische Variablen in Funktionen z.B. so implementieren:
Gruß
Greenhorn
Hi,
siehe Dir einmal @GUI_CtrlId in der Funktionsbeschreibung
[autoit]GUICtrlSetOnEvent (...)
[/autoit]an ... ![]()
Gruß
Greenhorn
Ei-ei-ei ... ![]()
Gruß
Hi,
die Anzeige ist bei mir auch normal. Ich glaube nicht, dass es an deiner Grafikkarte liegt.
Allerdings funktioniert das Menü bei mir nicht.
Gruß
Greenhorn
Hi,
wenn dein Spiel DirectX benutzt, dann musst du es über das DirectX API machen.
Beispiel in C++
Gruß
Greenhorn
Hi,
die originale Beschreibung/Übersetzung ist doch eigentlich ganz klar.
Ja, das setzt etwas Grundwissen voraus, das sollte man aber auch haben oder sich aneignen, wenn man die DllXxx Funktionen benutzen will.
Grundsätzlich gilt: Jede Fensterklasse besitzt eine Fensterprozedur, in der die Nachrichten verarbeitet werden. Jedes Fenster der Klasse benutzt diese eine Fensterprozedur. Da sich das Programm im Speicher befindet, hat die Fensterprozedur natürlich auch eine Adresse. Jeder Funktionsaufruf ist letztendlich der Aufruf, bzw. Sprung, zu einer Adresse im Speicher, der Name der Prozedur/Funktion ist nur ein Synonym für die Adresse.
Das Tutorial auf Pronix.de oder die Übersetzung von Iczelion's Win32 Tutorial sollte etwas Klarheit schaffen ...
(Übrigens sind Steuerelemente auch nichts anderes als Fenster
)
Sieh dir bitte noch einmal "EzBmpButton" und "Hello AutoIt3" an, dann hast Du es in AutoIt Code und kannst es vielleicht besser verstehen. In "PeaPad" ist ein Beispiel wie die Fensterprozedur des Eingabefeldes gegen eine eigene Prozedur ausgetauscht wird ...
Gruß
Greenhorn
Schließe mich den Glückwünschen an und alles Gute zum Geburtstag, Gun! ![]()
Feiere schön Deinen letzten Zwanziger ... ![]()
Lieben Gruß
Greenhorn
Siehe EDIT in Post 7 ...
Gruß
Nun schreibt er den neuen Namen einfach dahinter?!
Wenn der Cursor am Ende des Textes ist, dann ja, ansonsten wird er eingefügt. Also evtl. sicherstellen, daß der Cursor sich am Ende des Textes befindet.
Edit, Input: wenn ein Parameter angegeben wird und dieser nicht aus "" besteht, wird der String an der Cursorposition eingefügt
Du kannst es auch so machen wie der Doc es vorschlägt, frißt aber mehr Speicher, wenn der Text länger wird ...
EDIT:
[autoit]
GUICtrlSendMsg ($IDC_EDIT, $EM_SETSEL, -1, -1) ; Cursor ans Ende des Textes setzen
GUICtrlSetData ($IDC_EDIT, "Neue Zeile" & @CRLF, 1) ; Zeile einfügen
Gruß
Greenhorn
Hi,
[autoit]GUICtrlSetData ($IDC_EDIT, "neue Zeile", 1)
[/autoit]Gruß
Greenhorn
Hi,
also bei mir funktioniert es immer noch ... ![]()
(Win7 x64)
Opt("WinTitleMatchMode", 2)
Global $hwnd, $ret
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]ConsoleWrite ("- Fensterhandle ermitteln" & @CRLF)
$hwnd = WinWait ("Process Explorer - ")
ConsoleWrite ("--- Rückgabe WinWait : "&$hwnd & @CRLF)
ConsoleWrite ("- Minimieren" & @CRLF)
$ret = WinSetState ($hwnd, 0, @SW_MINIMIZE)
ConsoleWrite ("--- Rückgabe WinSetState : "&$ret & @CRLF)
Sleep (500)
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite ("- Wiederherstellen" & @CRLF)
$ret = WinSetState ($hwnd, 0, @SW_RESTORE)
ConsoleWrite ("--- Rückgabe WinSetState : "&$ret & @CRLF)
Sleep (500)
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite ("- Maximieren" & @CRLF)
$ret = WinSetState ($hwnd, 0, @SW_MAXIMIZE)
ConsoleWrite ("--- Rückgabe WinSetState : "&$ret & @CRLF)
Sleep (500)
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite ("- Wiederherstellen" & @CRLF)
$ret = WinSetState ($hwnd, 0, @SW_RESTORE)
ConsoleWrite ("--- Rückgabe WinSetState : "&$ret & @CRLF)
Exit (0)
[/autoit]
Ausgabe
>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "X:\AA\AutoIt\Temp\NeuTest.au3" /autoit3dir "C:\Program Files (x86)\AutoIt3" /UserParams
+>01:32:31 Starting AutoIt3Wrapper v.2.0.0.3 Environment(Language:0407 Keyboard:00000407 OS:WIN_VISTA/ CPU:X64 OS:X64)
>Running AU3Check (1.54.19.0) from:C:\Program Files (x86)\AutoIt3
+>01:32:31 AU3Check ended.rc:0
>Running:(3.3.6.1):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "X:\AA\AutoIt\Temp\NeuTest.au3"
- Fensterhandle ermitteln
--- Rückgabe WinWait : 0x0000000000150708
- Minimieren
--- Rückgabe WinSetState : 1
- Wiederherstellen
--- Rückgabe WinSetState : 1
- Maximieren
--- Rückgabe WinSetState : 1
>+ Wiederherstellen
--- Rückgabe WinSetState : 1
+>01:32:34 AutoIT3.exe ended.rc:0
+>01:32:35 AutoIt3Wrapper Finished
>Exit code: 0 Time: 4.165
Alles anzeigen
Gruß
Greenhorn
Hi,
die Zeichenaktionen gehören in die WM_PAINT und der Aufruf von RedrawWindow gehört ausserhalb der WM_PAINT !!!
WM_PAINT
RedrawWindow
Using the WM_PAINT Message
Gruß