Dieser Code wird NUR von Windows 2003 Server unterstützt (evtl. auch höhere Serverversion), aber nicht von 2K, XP etc.
Beiträge von BugFix
-
-
Falls ich mit GUIGetMsg arbeite, bevorzuge ich eine fußgesteuerte Schleife, denn ein Schleifeneintritt ist ja erwünscht/notwendig um überhaupt den Wert für die Abbruchbedingung erhalten zu können.
[autoit]Do
[/autoit]
$msg = GUIGetMsg()
Switch $msg
Case $ctrl
; ...
;..
EndSwitch
Until $msg = $GUI_EVENT_CLOSE -
Hatte mal etwas ähnliches erstellt: extended TimerDiff()
-
Raupi : Du hast völlig recht - die Zeilen kannst du streichen, das hatte ich vergessen. Sie werden nur benötigt, wenn man Titelleiste und äußere Region in der GUI hat. Da das hier nicht der Fall ist, können sie entfernt werden.
-
Hi,
ich hab gerade die neue Version 3.3.0.0 angeschaut und fand ein Winapi-Skript ganz interessant. Ich habe das Bsp. mal etwas entschlackt und leicht verändert.
Ergebnis ist eine nicht sichbare GUI - nur die Button werden angezeigt. Das Skript ist jetzt für GUI mit POPUP-Style angepaßt. Soll die Titelleiste angezeigt werden, müssen die Parts für die Systemmetrics wieder integriert werden (s. Bsp. bei _WinAPI_CreateRoundRectRgn).Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>Global $aButton[5]
[/autoit] [autoit][/autoit] [autoit]$gui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-170, -1, $WS_POPUP, $WS_EX_TOPMOST)
[/autoit] [autoit][/autoit] [autoit]
$aButton[0] = GUICtrlCreateButton("Button 1", 0, 0, 150)
$aButton[1] = GUICtrlCreateButton("Button 2", 0, 30, 150)
$aButton[2] = GUICtrlCreateButton("Button 3", 0, 60, 150)
$aButton[3] = GUICtrlCreateButton("Button 4", 0, 90, 150)
$aButton[4] = GUICtrlCreateButton("Exit", 0, 120, 150)
GUISetState(@SW_SHOW)$pos = WinGetPos($gui)
[/autoit] [autoit][/autoit] [autoit]
_GuiHole($gui, 0, 0, 150, 150)While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Switch $msg
Case $aButton[4]
ExitLoop
Case $aButton[0]
MsgBox(0, '', 'Button1 geklickt')
Case $aButton[1]
MsgBox(0, '', 'Button2 geklickt')
Case $aButton[2]
MsgBox(0, '', 'Button3 geklickt')
Case $aButton[3]
MsgBox(0, '', 'Button4 geklickt')
EndSwitch
WEndFunc _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
[/autoit] [autoit][/autoit] [autoit]
Local $outer_rgn, $inner_rgn, $combined_rgn
$combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_DeleteObject($outer_rgn)
_WinAPI_DeleteObject($inner_rgn)
_AddCtrlRegion($combined_rgn, $aButton)
_WinAPI_SetWindowRgn($h_win, $combined_rgn)
EndFunc ;==>_GuiHoleFunc _AddCtrlRegion($full_rgn, $ctrl_id)
[/autoit]
Local $ctrl_pos, $ctrl_rgn
If IsArray($ctrl_id) Then
For $i = 0 To UBound($ctrl_id) -1
$ctrl_pos = ControlGetPos($gui, "", $ctrl_id[$i])
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
Next
Else
$ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
EndIf
EndFunc ;==>_AddCtrlRegion -
Hab ich dir doch reinkopiert.
-
Falsche und ungenügende Parameter:
ZitatDeclare Function LockFile Lib "kernel32.dll" Alias "LockFile" (ByVal hFile As DWord, ByVal dwFileOffsetLow As DWord, ByVal dwFileOffsetHigh As DWord, ByVal nNumberOfBytesToLockLow As Long, ByVal nNumberOfBytesToLockHigh As Long) As Long
-
Das geht dann so:
[autoit]$hWaitCurs = _LoadCursorFromFile(@WindowsDir & "\cursors\cross.cur")
[/autoit][autoit][/autoit][autoit]
If _SetSystemCursor($hWaitCurs, $OCR_IBEAM) Then MsgBox(0, '', 'Cursor gesetzt')Func _SetSystemCursor($hCur, $id)
[/autoit][autoit][/autoit][autoit]
Local $ret = DllCall("user32.dll", "int" ,"SetSystemCursor","int",$hCur,"int",$id)
Return $ret[0]
EndFuncFunc _LoadCursorFromFile($lpFileName)
[/autoit]
Local $ret = DllCall("user32", 'long', "LoadCursorFromFileA", 'str', $lpFileName)
Return $ret[0]
EndFunc -
Ich hab grad nochmal deinen ersten Post gelesen - ist das Tool, von dem du sprichst, ein Autoitskript? Dann kannst du natürlich viel einfacher den Cursor setzen mit GUISetCursor und GUICtrlSetCursor
-
Du mußt den Cursorpfad angeben
[autoit]@WindowsDir & '\Cursors\cross.cur'
[/autoit]
Und Kombinationen von Parametern immer mit BitOr($par1,$par2) und nicht $par1+$par2.Weiterhin solltest du das Handle des alten Cursors auffangen um ihn zurücksetzen zu können.
[autoit]$hOldCursor = _WinAPI_SetCursor($cur)
[/autoit] -
Schau dir mal diese Funktionen an:
[autoit]#Include <WinAPI.au3>
[/autoit]
_WinAPI_GetCursorInfo()
_WinAPI_SetCursor($hCursor) -
Wenn es Systemprogramme sind benötigst du keine Pfadangabe, für alle anderen schon. Existieren zum Programm z.B. INI-Dateien(od. andere Daten auf die das Prog zugreifen will) im Programmpfad, so ist auch das Arbeitsverzeichnis anzugeben.
[autoit]ShellExecute ( "filename" [, "parameters" [, "workingdir" [, "verb" [, showflag]]]] )
[/autoit] -
Eine angenehme Hilfe zur MsgBox findest du in Scite mit <Alt+W> oder auch hier: MsgBox - alle Parameter auf einen Blick
-
Was meinst du mit linear und nichtlinear ich kann mir darunter jetzt nichts vorstellen
Linear heißt: 1 Pixel des Desktop entspricht zum Bsp. dem Wert 25 der von deinem Pad kommt, 2=50, 3=75, 4=100 etc.
Nicht-Linear: 1=25, 2=70, 3=130 etc. -
Wie anno2008 schon richtig sagte sind mehr Koordinaten und vor allem deren Entsprechung auf dem Desktop notwendig.
Es kann sein, dass deine Parameter linear oder auch nichtlinear sind. Du brauchst also auf jeden Fall Basiswerte für alle Desktopecken und die Mittelposition. Dann kann man erkennen, wie die Werte sich verhalten. -
Vielleicht hilft dir ja das: Erweiterte Dateiinfo (eine Datei od. alle eines Ordners)
-
Was für eine IE-Version läuft den auf dem Server?
Ich glaube, ich habe inzwischen IE 6 aufgespielt, bin mir aber nicht ganz sicher. Da der Server ausschließlich im Intranet läuft, ist die Konfiguration der Internetkomponenten absolut nebensächlich. -
Habs jetzt noch nicht getestet, aber mal ein Tipp:
[autoit]
Du kannst deine Case-Abfrage zum Speed vereinfachen.; statt:
[/autoit][autoit][/autoit][autoit]
Case $in > 1023 And $in< 1048575; reicht völlig:
[/autoit]
Case $in< 1048575
; denn falls $in < 1024, wird ja schon der Code im vorhergehenden
; Case-Zweig (Case $in < 1024) ausgeführt
; dasselbe bei $out -
Hi,
da du noch neu bei uns bist, ein Hinweis: Exe-Dateien wird sich wohl kaum jemand herunterladen. Oder führst du einfach so fremde exe aus?
Und der Sinn dieses Forums liegt u.a. darin, die Lösungswege aufzuzeigen - sein Skript also in der Source zu posten. -
Zitat
Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
ZitatfWinIni Erwartet "0" für keine Aktion oder eine der "fWinIni"-Konstanten, die den Vorgang beschreiben.
Ich vermute, da liegt der Hund begraben - du übergibst 0 ==> keine Aktion.
Edit: Ich glaube, dass wars wohl doch nicht, die fWinIni-Parameter sind absolut uninteressant.
ZitatConst SPIF_SENDWININICHANGE = &H2 'Benachrichtet alle TopLevel Fenster über die Änderung und der Änderung in der Win.ini
Const SPIF_UPDATEINIFILE = &H1 'Speichert die Änderung der Win.ini, ändernungen werden sind so nach einem Neustart immer noch wirksam