1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. teh_hahn

Beiträge von teh_hahn

  • _GUICtrlTreeView_GetTree Problem

    • teh_hahn
    • 5. August 2008 um 11:17

    Nope:

    Zitat

    If $hItem is 0 then an attempt to use current selected is used

    Hier der Beweis:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIDataSeparatorChar", "\")

    [/autoit] [autoit][/autoit] [autoit]

    $h_gui = GUICreate("", 640, 480)
    ;~ $h_tview = GUICtrlCreateTreeView(5, 5, 600, 400)
    $h_tview = _GUICtrlTreeView_Create($h_gui, 5, 5, 600, 400)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlTreeView_BeginUpdate($h_tview)
    $h_item = _GUICtrlTreeView_Add($h_tview, 0, "C:")
    _GUICtrlTreeView_AddChild($h_tview, $h_item, "install")
    $h_subitem = _GUICtrlTreeView_AddChild($h_tview, $h_item, "WINDOWS")
    _GUICtrlTreeView_AddChild($h_tview, $h_subitem, "system32")
    _GUICtrlTreeView_AddChild($h_tview, $h_subitem, "drivers")

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $h_item = GUICtrlCreateTreeViewItem("C:", $h_tview)
    ;~ GUICtrlCreateTreeViewItem("install", $h_item)
    ;~ $h_item = GUICtrlCreateTreeViewItem("WINDOWS", $h_subitem)
    ;~ GUICtrlCreateTreeViewItem("system32", $h_item)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlTreeView_EndUpdate($h_tview)

    [/autoit] [autoit][/autoit] [autoit]

    $h_bt = GUICtrlCreateButton("Get", 5, 420)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $h_bt
    MsgBox(64, "_GUICtrlTreeView_GetTree", _
    "current selected: " & _GUICtrlTreeView_GetTree($h_tview) & @CRLF & _
    "item: " & _GUICtrlTreeView_GetTree($h_tview, _GUICtrlTreeView_GetSelection($h_tview)))
    EndSwitch
    WEnd

    [/autoit]


    Die Beta bringt da mal auch nichts... Mach ich da etwa irgend etwas verkehrt. Ach so, um den Fehler zu sehen, selektiere einmal drivers und drücke den Button!

  • _GUICtrlTreeView_GetTree Problem

    • teh_hahn
    • 5. August 2008 um 09:51

    Ja, ich benutze die Stable und dabei soll es auch eigentlich bleiben. Gibt es denn die Möglichkeit, dies auch mit GetText zu erreichen? Wäre über ein Beispiel ansonsten sehr froh!

  • _GUICtrlTreeView_GetTree Problem

    • teh_hahn
    • 5. August 2008 um 09:06

    Hi, kann es sein, dass die UDF _GUICtrlTreeView_GetTree fehlerhaft implementiert ist? Ich möchte mir den KOMPLETTEN Pfad einer Selektion zurückgeben lassen, die Funktion gibt aber immer nur zwei Elemente zurück! Wie lässt sich das denn lösen?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $h_gui = GUICreate("", 640, 480)
    ;~ $h_tview = GUICtrlCreateTreeView(5, 5, 600, 400)
    $h_tview = _GUICtrlTreeView_Create($h_gui, 5, 5, 600, 400)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlTreeView_BeginUpdate($h_tview)
    $h_item = _GUICtrlTreeView_Add($h_tview, 0, "C:")
    _GUICtrlTreeView_AddChild($h_tview, $h_item, "install")
    $h_item = _GUICtrlTreeView_AddChild($h_tview, $h_item, "WINDOWS")
    _GUICtrlTreeView_AddChild($h_tview, $h_item, "system32")
    _GUICtrlTreeView_AddChild($h_tview, $h_item, "drivers")

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $h_item = GUICtrlCreateTreeViewItem("C:", $h_tview)
    ;~ GUICtrlCreateTreeViewItem("install", $h_item)
    ;~ $h_item = GUICtrlCreateTreeViewItem("WINDOWS", $h_subitem)
    ;~ GUICtrlCreateTreeViewItem("system32", $h_item)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlTreeView_EndUpdate($h_tview)

    [/autoit] [autoit][/autoit] [autoit]

    $h_bt = GUICtrlCreateButton("Get", 5, 420)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $h_bt
    MsgBox(64, "_GUICtrlTreeView_GetTree", _GUICtrlTreeView_GetTree($h_tview))
    EndSwitch
    WEnd

    [/autoit]
  • UDF - _FileRename

    • teh_hahn
    • 4. August 2008 um 10:55

    Hi,
    alles klar! Dann hatte der Herr im englischen Forum wohl Unrecht. Dann die Funktion besser nicht verwenden und auf FileMove zurückgreifen. Habe das im ersten Post dieses Threads mal angepasst!

  • Kernel32.dll - GetProcessId

    • teh_hahn
    • 31. Juli 2008 um 22:05

    Naja, die Aussage:

    Zitat

    Retrieves the process identifier of the specified process.


    sollte das bestätigen, was ich möchte. Eben dieser Handle ist es ja auch, der mir Gedanken macht. Wenn ich zunächst einen Prozess öffnen muss, so kann ich dies ja nur anhand der PID, damit wäre diese Funktion sinnlos. Gibt es also eine Möglichkeit einen Prozesshandle mit Hilfe des Prozessnamen (z.B. notepad.exe) zu erstellen?

    Hier der der Test, ohne error handling. Die scheint wirklich ziemlich sinnfrei zu sein:

    Spoiler anzeigen
    [autoit]

    MsgBox(64, "_ProcessGetProcessID", _ProcessGetProcessID(ProcessExists("explorer.exe")))

    [/autoit] [autoit][/autoit] [autoit]

    Func _ProcessGetProcessID(Const $S_PROC)
    Local Const $AV_HWND = DllCall("Kernel32.dll", "ptr", "OpenProcess", _
    "dword", $PROCESS_ALL_ACCESS, _
    "int", False, _
    "dword", $S_PROC)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ DWORD WINAPI GetProcessId(
    ;~ __in HANDLE Process
    ;~ );
    Local Const $AV_RET = DllCall("Kernel32.dll", "dword", "GetProcessId", "ptr", $AV_HWND[0])
    DllCall("Kernel32.dll", "int", "CloseHandle", "int", $AV_HWND[0])

    [/autoit] [autoit][/autoit] [autoit]

    Return $AV_RET[0]
    EndFunc ;==>_ProcessGetProcessID

    [/autoit]


    Muss ich das verstehen?

  • Kernel32.dll - GetProcessId

    • teh_hahn
    • 31. Juli 2008 um 13:01

    Danke für Deine Mühe, aber das ist eigentlich nicht das, nachdem ich gefragt hatte. Mir ging es um die Funktion GetProcessId und ihre Implementierung in AutoIt. Das Auflisten der Prozesse mittels EnumProcesses ähnelt ja eher ProcessList, hier geht es aber um ProcessExists.

    Leider war Deine Funktion nicht ganz korrekt, da DllStructGetData in der Schleife mit Index = 0 gestartet, der erste ist aber 1. Außerdem habe ich error handling hinzugefügt und die Erstellung des Arrays verbessert (kein ReDim mehr notwendig).
    Daher habe ich mal eine saubere UDF draus gemacht...

    ProcessEnum - Retrieves the process identifier for each process object in the system.

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name.....: _ProcessEnum
    ; Description.......: Retrieves the process identifier for each process object in the system.
    ; Version...........: 1.0.1
    ; Change Date.......: 2008-07-31
    ; AutoIt Version....: 3.2.12.1
    ;
    ; Parameter(s)......: None
    ; Requirements(s)...: "Psapi.dll" (included with Windows up from Windows 2000)
    ; Return Value(s)...: Success: Returns an one-dimensional array containing process identifiers:
    ; $ai_array[0] = Number of processes.
    ; $ai_array[1] = 1st process ID.
    ; $ai_array[n] = nth process ID.
    ; Failure: Returns 0 and sets @error to:
    ; 1 = Unable to use the DLL file "Psapi.dll".
    ; 2 = Unknown "return type" of the function "EnumProcesses".
    ; 3 = Unable to find the function "CloseHandle" in the DLL file "Psapi.dll".
    ; 4 = Unable to build the list.
    ;
    ; Author(s).........: Greenhorn <[email='Kl455e@web.de'][/email]>
    ; Modified by: teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    ; Company...........: None
    ; URL...............: None
    ; Note(s)...........: - http://msdn.microsoft.com/en-us/library/ms682629(VS.85).aspx
    ; - ToDo: Find out maximum possible number of processes under Windows.
    ;===============================================================================
    Func _ProcessEnum()
    Local Const $STRUCT_BYTESRETURNED = DllStructCreate("dword")
    Local Const $STRUCT_PROCESSIDS = DllStructCreate("dword[32768]")

    [/autoit] [autoit][/autoit] [autoit]

    ;~ BOOL WINAPI EnumProcesses(
    ;~ __out DWORD *pProcessIds,
    ;~ __in DWORD cb,
    ;~ __out DWORD *pBytesReturned
    ;~ );
    Local Const $AV_RET = DllCall("Psapi.dll", "int", "EnumProcesses", _
    "dword", DllStructGetPtr($STRUCT_PROCESSIDS), _
    "dword", DllStructGetSize($STRUCT_PROCESSIDS), _
    "dword", DllStructGetPtr($STRUCT_BYTESRETURNED))
    If @error Then Return SetError(@error, 0, 0)
    If Not $AV_RET[0] Then Return SetError(4, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local Const $I_SIZE = DllStructGetData($STRUCT_BYTESRETURNED, 1) / 4
    Local $ai_ret[$I_SIZE + 1] = [$I_SIZE]
    For $i = 1 To $I_SIZE
    $ai_ret[$i] = DllStructGetData($STRUCT_PROCESSIDS, 1, $i)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Return $ai_ret
    EndFunc ;==>_ProcessEnum

    [/autoit]
  • Kernel32.dll - GetProcessId

    • teh_hahn
    • 31. Juli 2008 um 08:03

    rofl, ja, warum eigentlich nicht? Hatte nicht mehr in Erinnerung, dass die Funktion die PID zurückgibt. Ich dachte bis eben die würde bei Erfolg 1 zurückgeben.
    Naja, trotzdem würde es mich noch interessieren, wie man die obige Funktion realisieren kann (quasi ein ProcessExist in Autoit...)

  • Kernel32.dll - GetProcessId

    • teh_hahn
    • 30. Juli 2008 um 12:07

    Hi,
    ich möchte die PID eines Prozesses mit der Funktion GetProcessId abfragen. Ich verstehe jedoch überhaupt nicht, wie ich folgenden Teil umsetzen kann (Beispiele sind auch nicht zu finden!):

    Zitat

    Process [in]

    A handle to the process. The handle must have the PROCESS_QUERY_INFORMATION or PROCESS_QUERY_LIMITED_INFORMATION access right. For more information, see Process Security and Access Rights.

    Windows Server 2003 and Windows XP: The handle must have the PROCESS_QUERY_INFORMATION access right.

    Meine UDF sieht bisher folgendermaßen aus:

    [autoit]

    Func _ProcessGetProcessId(Const $S_PROC)
    ;~ DWORD WINAPI GetProcessId(
    ;~ __in HANDLE Process
    ;~ );
    Local Const $AI_RET = DllCall("Kernel32.dll", "dword", "GetProcessId", "ptr", $S_PROC) ;~ ToDo...
    If @error Then Return SetError(1, 0, 0)

    [/autoit][autoit][/autoit][autoit]

    Return $ai_ret[0]
    EndFunc

    [/autoit]


    Kann mir da jemand weiterhelfen? ich benötige dies für eine weiter entwickelte UDF, die ich bald hier posten möchte! (Bei der Gelegenheit fällt mir ein, dass ich meine Dateisuche-UDF auch mal puplik machen wollte...)

  • Ini Fragen

    • teh_hahn
    • 29. Juli 2008 um 20:54

    Wie? "Gibst da noch eine?" Formuliere die Frage... Es gibt unzählige UDFs zu INI-Dateien, die beiden oben habe ich flugs nach Deiner Fragestellung erstellt. Schau mal im englischen Forum, da gab es glaub ich sogar mal eine ganze Library dazu!

  • Ini Fragen

    • teh_hahn
    • 29. Juli 2008 um 17:20

    Na gut, wenn Du es benötigst, zwei vollkommen sinnfreie UDFs:

    Spoiler anzeigen
    [autoit]

    MsgBox(64, "_IniReadLastSection...", _IniReadLastSectionKey(@ScriptDir & "\settings.ini", "Settings") & @CRLF & _
    _IniReadLastSectionValue(@ScriptDir & "\settings.ini", "Settings"))

    [/autoit] [autoit][/autoit] [autoit]

    Func _IniReadLastSectionKey(Const $S_FILE, Const $S_SECTION)
    Local Const $AS_INI = IniReadSection($S_FILE, $S_SECTION)
    If @error Then Return SetError(@error, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Return $AS_INI[$AS_INI[0][0]][0]
    EndFunc ;==>_IniReadLastSectionKey

    [/autoit] [autoit][/autoit] [autoit]

    Func _IniReadLastSectionValue(Const $S_FILE, Const $S_SECTION)
    Local Const $AS_INI = IniReadSection($S_FILE, $S_SECTION)
    If @error Then Return SetError(@error, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Return $AS_INI[$AS_INI[0][0]][1]
    EndFunc ;==>_IniReadLastSectionValue

    [/autoit]
  • UDF - _FileRename

    • teh_hahn
    • 29. Juli 2008 um 11:25

    Sicher, eigentlich ist es nur eine Zeile. Aber ich denke trotzdem, dass es der Eine oder Andere gebrauchen kann. Und das Error Handling ist jawohl obligatorisch, ich würde bei mehrmaliger Verwendung von Umbenennungen nicht immer auf eine kopierte Zeile vertrauen. Damit geht ja jede Wartbarkeit des Codes verloren...

  • Datei von Prem Account bei Rapidshare downloaden

    • teh_hahn
    • 29. Juli 2008 um 09:53

    Die von Dir angestrebte Downloadmöglichkeit über den Freeuser-Account wird wohl an den Captchas scheitern...

  • UDF - _FileRename

    • teh_hahn
    • 29. Juli 2008 um 09:40

    Hi,

    hiermit präsentiere ich Euch die UDF _FileRename. Durch den DOS-Befehl soll das Umbenennen bei großen Dateien im Vergleich zu FileMove deutlich schneller sein. Dies habe ich jedoch nicht ausprobiert. Siehe dazu auch: http://www.autoitscript.com/forum/index.php?showtopic=70058

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name.....: _FileRename
    ; Description.......: Renames a file using the command "rename".
    ; Version...........: 1.0.4
    ; Change Date.......: 2008-07-29
    ; AutoIt Version....: 3.2.12.1
    ;
    ; Parameter(s)......: $S_FILE - String containing the directory or file to rename.
    ; $S_RENAME - String containing the new name of the file, without the path.
    ; Requirements(s)...: None
    ; Return Value(s)...: Success: Returns the exit code of the "rename" command.
    ; Failure: Returns 0 and sets @error to:
    ; 1 = The file or folder $S_FILE does not exist.
    ; 2 = $S_RENAME is an invalid filename.
    ;
    ; Author(s).........: xVivoCity
    ; Modified by: JellyFish666 & litlmike
    ; Modified by: teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    ; Company...........: None
    ; URL...............: None
    ; Note(s)...........: None
    ;===============================================================================
    Func _FileRename(Const $S_FILE, Const $S_RENAME)
    If Not FileExists($S_FILE) Then Return SetError(1, 0, 0)
    If Not StringRegExp($S_RENAME, '(?i)^[^<>\?":\|\\/\*]+$') Then Return SetError(2, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Return RunWait(@ComSpec & ' /c ren "' & $S_FILE & '" "' & $S_RENAME & '"', "", @SW_HIDE)
    EndFunc ;==>_FileRename

    [/autoit]

    EDIT: Wie Oscar festgestellt hat, ist diese Funktion doch nicht schneller als FileMove! Aus diesem Grund hier eine modifizierte Version mit FileMove:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name.....: _FileRename
    ; Description.......: Renames a file.
    ; Version...........: 1.0.5
    ; Change Date.......: 2008-08-04
    ; AutoIt Version....: 3.2.12.1
    ;
    ; Parameter(s)......: $S_SOURCE - String containing the source path and filename of the file to rename.
    ; $S_DEST - String containing the new filename of the file, without the path.
    ; $i_flag - [optional] Integer specifying whether to overwrite a file if it already exist or not:
    ; 0 = (default) Do not overwrite a existing file.
    ; 1 = Overwrite a existing file.
    ; Requirements(s)...: None
    ; Return Value(s)...: Success: Returns 1
    ; Failure: Returns 0 and sets @error to:
    ; 1 = The file or folder $S_SOURCE does not exist.
    ; 2 = $S_DEST is an invalid filename.
    ; 3 = The source file $S_SOURCE cannot be moved or the destination file $S_DEST already exists and the flag $i_flag is set to 0.
    ;
    ; Author(s).........: teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    ; Company...........: None
    ; URL...............: None
    ; Note(s)...........: None
    ;===============================================================================
    Func _FileRename(Const $S_SOURCE, Const $S_DEST, $i_flag = 0)
    If Not FileExists($S_SOURCE) Then Return SetError(1, 0, 0)
    If Not StringRegExp($S_DEST, '(?i)^[^<>\?":\|\\/\*]+$') Then Return SetError(2, 0, 0)
    If $i_flag <> 1 Then $i_flag = 0
    If Not FileMove($S_SOURCE, StringLeft($S_SOURCE, StringInStr($S_SOURCE, "\", 0, -1) - 1) & "\" & $S_DEST, $i_flag) Then Return SetError(3, 0, 0)
    EndFunc ;==>_FileRename

    [/autoit]
  • UDF - _FileGetProperty

    • teh_hahn
    • 28. Juli 2008 um 14:16

    Hi,

    hiermit präsentiere ich Euch die UDF _FileGetProperty. Konnte ich bereits sehr gut gebrauchen. Siehe dazu auch: http://www.autoitscript.com/forum/index.php?showtopic=34732

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name.....: _FileGetProperty
    ; Description.......: Returns a property or all properties for a file.
    ; Version...........: 1.0.2
    ; Change Date.......: 2008-07-28
    ; AutoIt Version....: 3.2.12.1
    ;
    ; Parameter(s)......: $S_PATH - String containing the file or folder to return the property from.
    ; $S_PROPERTY - [optional] String containing the name of the property to return. (default = "")
    ; Requirements(s)...: None
    ; Return Value(s)...: Success: Returns a string containing the property value.
    ; If $S_PROPERTY is empty, an two-dimensional array is returned:
    ; $av_array[0][0] = Number of properties.
    ; $av_array[1][0] = 1st property name.
    ; $as_array[1][1] = 1st property value.
    ; $av_array[n][0] = nth property name.
    ; $as_array[n][1] = nth property value.
    ; Failure: Returns 0 and sets @error to:
    ; 1 = The folder $S_PATH does not exist.
    ; 2 = The property $S_PROPERTY does not exist or the array could not be created.
    ; 3 = Unable to create the "Shell.Application" object $objShell.
    ;
    ; Author(s).........: - Simucal <[email='Simucal@gmail.com'][/email]>
    ; - Modified by: Sean Hart <[email='autoit@hartmail.ca'][/email]>
    ; - Modified by: teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    ; Company...........: None
    ; URL...............: None
    ; Note(s)...........: None
    ;===============================================================================
    Func _FileGetProperty(Const $S_PATH, Const $S_PROPERTY = "")
    If Not FileExists($S_PATH) Then Return SetError(1, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local Const $S_FILE = StringTrimLeft($S_PATH, StringInStr($S_PATH, "\", 0, -1))
    Local Const $S_DIR = StringTrimRight($S_PATH, StringLen($S_FILE) + 1)

    [/autoit] [autoit][/autoit] [autoit]

    Local Const $objShell = ObjCreate("Shell.Application")
    If @error Then Return SetError(3, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Local Const $objFolder = $objShell.NameSpace($S_DIR)
    Local Const $objFolderItem = $objFolder.Parsename($S_FILE)

    [/autoit] [autoit][/autoit] [autoit]

    If $S_PROPERTY Then
    For $i = 0 To 99
    If $objFolder.GetDetailsOf($objFolder.Items, $i) = $S_PROPERTY Then Return $objFolder.GetDetailsOf($objFolderItem, $i)
    Next
    Return SetError(2, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $av_ret[1][2] = [[1]]
    For $i = 0 To 99
    If $objFolder.GetDetailsOf($objFolder.Items, $i) Then
    ReDim $av_ret[$av_ret[0][0] + 1][2]
    $av_ret[$av_ret[0][0]][0] = $objFolder.GetDetailsOf($objFolder.Items, $i)
    $av_ret[$av_ret[0][0]][1] = $objFolder.GetDetailsOf($objFolderItem, $i)
    $av_ret[0][0] += 1
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If Not $av_ret[1][0] Then Return SetError(2, 0, 0)
    $av_ret[0][0] -= 1

    [/autoit] [autoit][/autoit] [autoit]

    Return $av_ret
    EndFunc ;==>_FileGetProperty

    [/autoit]
  • Fenster - Kontextmenü der Titelleiste deaktivieren

    • teh_hahn
    • 2. Juli 2008 um 17:00

    lol, ernsthaft? Wie find ich denn raus, welches es ist? Aber ganz ehrlich, eigentlich wollte ich die vncviewer.exe nicht "hacken", sondern es sollte primär die Original-Datei verwendet werden.
    Also falls ich keine Lösung für das Problem finde, werde ich dem User wohl zumindest das Verschieben und Ändern der Größe des UltraVNC Viewer Fensters erlauben. Das ist immer noch besser als die Stolperfalle mit der VNC Viewer Titelleiste...

  • Fenster - Kontextmenü der Titelleiste deaktivieren

    • teh_hahn
    • 2. Juli 2008 um 09:03

    Jawohl, danke progandy! Das hat den gewünschten Effekt gebracht.

    Es bleibt allerdings noch ein Problem, für das ich keine Lösung weiß:
    Und zwar verfügt das UltraVNC-Fenster des Viewers über eine eigene TItelleiste, die ich nun auch modifizieren möchte. Die Buttons auf der Leiste auszublenden war kein Problem, jedoch verfügt auch diese wieder über ein Kontextmenü, an das ich mit _GUICtrlMenu_GetSystemMenu nicht heran zu kommen scheine. Außerdem bewirkt ein Doppelklick auf diese Leiste ein "Restore" des Fensters. Die Deaktivierung dieses Kontextmenüs ist notwendig, da ich den UltraVNC Viewer im Vollbild-Modus starte und sämtliche Modifikationen am Fenster (Verschieben, Größe ändern) verbieten möchte, so dass es vom Benuter wirklich nur noch geschlossen werden kann. Durch das Doppelklicken und das Kontextmenü der Titelleiste ist es jedoch möglich das Fenster zu "restoren".

    Daher meine Frage, wie kann ich dieses Menü verstecken/deaktivieren und die Funktion des Doppelclicks abschalten (bzw. abfangen). Eine Lösung mit _IsPressed kommt nicht in Frage, da ich darauf nicht während der ganzen UltraVNC-Session prüfen möchte und kann! (Wahrscheinlich würde durch das Löschen des "Restore"-Eintrags aus dem Kontextmenü der gewünschte Effekt erzielt, war bei dem anderen Kontextmenü auch so!). Screenshot ist im Anhang, das Kontextmenü scheint ebenfalls keine controlID zurückzugeben!

    Achja, hier die Funktion zum Löschen des Kontextmenüs des UltraVNC Viewers (nur die Schließen-Funktionalität bleibt bestehen, s.o.) Werde ich später evtl. mal konfigurierbarer machen und hier posten!):

    [autoit]

    Func _UltraVNCViewerMenuDelete()
    Local Const $S_WINTITLE = "[CLASS:VNCMDI_Window]"
    Local Const $S_WINTEXT = "VNCviewer"
    If Not WinExists($S_WINTITLE, $S_WINTEXT) Then Return 0

    Local Const $H_MENUSYS = _GUICtrlMenu_GetSystemMenu(WinGetHandle($S_WINTITLE, $S_WINTEXT))
    For $i = 0 To 5
    _GUICtrlMenu_DeleteMenu($H_MENUSYS, 0)
    Next

    For $i = 0 To 33
    _GUICtrlMenu_DeleteMenu($H_MENUSYS, 1)
    Next

    [/autoit][autoit][/autoit][autoit]

    Return 1
    EndFunc ;==>_UltraVNCViewerMenuDelete

    [/autoit]
  • NVIDIA nTune GPU-FanSpeed v1.0.3

    • teh_hahn
    • 30. Juni 2008 um 18:22

    Update:
    Version 1.0.3

  • Fenster - Kontextmenü der Titelleiste deaktivieren

    • teh_hahn
    • 30. Juni 2008 um 18:00

    Naja, der Screenshot zeigt das Kontextmenü. Das ist also kein Fenster! Die Kommandozeilenoptionen und Konfigurationsdateien von UltraVNC scheinen das Ausblenden dieses Menüs nicht zu erlauben, daher auch meine Lösungsansätze, ansonsten wär es ja relativ simpel. Und für dieses Kontextmenü bekomme ich nun mal keine ControlIDs/Handles...

  • Fenster - Kontextmenü der Titelleiste deaktivieren

    • teh_hahn
    • 30. Juni 2008 um 15:41

    Hallo,

    ich benötige, am Topic unschwer zu erkennen, eine Lösung um das komplette Kontextmenü eines Fensters zu deaktivieren. Alternativ würde ich mich auch über eine Lösung freuen, die einzelnen Einträge zu deaktivieren (auszugrauen). Ich benötige dies für den UltraVNC Viewer, da der Benutzer keine Änderungen an den Einstellungen vornehmen soll!

    Ich habe auch schon versucht den Style des UltraVNC-Fensters auf $WS_POPUP zu setzen, dann lässt sich das Ganze aber nicht mehr alleine schließen und $WS_EX_TOOLWINDOW zum Ausblenden des Eintrags auf der Taskleiste funktioniert damit auch nicht. (Ansonsten hätte ich das Schließen des Fensters von einem anderen Fenster abhängig gemacht!)

    Oder gibt es eine Möglichkeit eine Window-Class in eine GUI zu integrieren, so wie mit Objekten? Bin für jeden Vorschlag dankbar!

    Man beachte auch bitte den Anhang!

  • Windows Message ID für Doppelclick auf die Titelzeile

    • teh_hahn
    • 17. Juni 2008 um 14:16

    Hi,
    ich melde mich auch mal wieder. Und zwar möchte ich wissen, wie die Windows Message ID für den Doppelclick auf eine Titelzeile lautet, also quasi das Undo der Maximieren-Funktion. Hintergrund ist, dass ich die Breite von ListView-Spalten in Abhängigkeit der Fenstergröße setzen möchte, nur fehlt mir eben dazu die benötigte Konstante!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™