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. Greenhorn

Beiträge von Greenhorn

  • winamp api?

    • Greenhorn
    • 21. Juni 2009 um 21:25

    Hi,

    ja, das geht über ObjCreate ...

    das sollte dir helfen, denke ich ...
    http://www.autoitscript.com/forum/index.php?showtopic=71187&hl=winamp


    Gruß
    Greenhorn

  • DllCal für Uxertheme

    • Greenhorn
    • 20. Juni 2009 um 19:16

    Moin,

    geht leider nicht ... :(


    Gruß
    Greenhorn

  • Switch Case bei unbekannter anzahl an Steuerelementen

    • Greenhorn
    • 20. Juni 2009 um 19:01

    Sorry, ich habe deinen Code nicht ausprobiert, aber wenn ich es richtig verstanden habe, dann möchtest Du mehrere Gruppen, die wiederum Eingabefelder und ComboBox Steuerelemente enthalten, dynamisch zur Laufzeit erzeugen, oder liege ich da mal wieder falsch !?

    Sollte dem so sein, dann sind deine IDs bunt durcheinander gemischt, weil AutoIt die IDs bei Erzeugung inkrementiert und dann deiner Variablen zuweist ...
    z.B.

    Spoiler anzeigen
    [autoit]

    ...
    ...
    $aCombo[$iCount - 1] = GUICtrlCreateCombo("", 14, $iPosH, 205, 25, _ ; ID = z.B. 23
    BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
    ...
    $aInput[$iCount - 1] = GUICtrlCreateInput("", 230, $iPosH, 210, 21) ; ID = 24
    $aCheckbox[$iCount - 1] = GUICtrlCreateCheckbox("", 465, ($iPosH - 4), 28, 28) ; ID = 25

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

    ...

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

    ...

    [/autoit]


    Jetzt möchtest Du mit Case $n[$x] To $n[$y] alle ComboBox Steuerelemente prüfen, dann muss die nächste ID = 24 sein, damit das funktioniert. (Für Input 25 und für CheckBox 26)
    Da Du beim nächsten Aufruf von AddButton aber irgendetwas über 25 als ID zugewiesen bekommst, musst Du hinterher die IDs anpassen.

    Spoiler anzeigen
    [autoit]

    ...
    $aCombo[$iCount - 1] = GUICtrlCreateCombo("", 14, $iPosH, 205, 25, _
    BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
    SetWindowLong (GUICtrlGetHandle ($aCombo[$iCount - 1]), _
    $GWL_ID, _
    $aCombo[$iCount - 2] + 1) ;) Alte ID + 1
    ...
    $aInput[$iCount - 1] = GUICtrlCreateInput("", 230, $iPosH, 210, 21)
    SetWindowLong (GUICtrlGetHandle ($aInput[$iCount - 1]), _
    $GWL_ID, _
    $aInput[$iCount - 2] + 1) ;)
    $aCheckbox[$iCount - 1] = GUICtrlCreateCheckbox("", 465, ($iPosH - 4), 28, 28)
    SetWindowLong (GUICtrlGetHandle ($aCheckbox[$iCount - 1]), _
    $GWL_ID, _
    $aCheckbox[$iCount - 2] + 1) ;)
    ...

    [/autoit]


    EDIT:
    Ich habe das nie ausprobiert und weiß daher nicht ob AutoIt das mit macht ...
    GUIGetMsg läuft irgendwie über gemappte IDs, glaube ich, und ich weiß nicht, ob sich das zur Laufzeit auf diese Art ändern lässt.
    Sollte GUIGetMsg nicht darauf ansprechen, dann kannst Du die WM_COMMAND Nachricht mit GUIRegisterMsg registrieren, da klappt das auf jeden Fall ...


    Gruß
    Greenhorn

  • Switch Case bei unbekannter anzahl an Steuerelementen

    • Greenhorn
    • 20. Juni 2009 um 17:36

    Moin,

    Spoiler anzeigen
    [autoit]


    ...
    $msg = GUIGetMsg ( )
    Switch $msg
    Case $aCombo[0] To $aCombo[$iCount-1]
    MachWas ("Irgendetwas")
    ...

    [/autoit]


    Dazu musst Du es aber hinbekommen, daß die IDs aufeinanderfolgend sind, also z.B. 4, 5, 6, 7 ...

    Das ist etwas fummelig unter AutoIt, aber gehen tut es schon.

    Spoiler anzeigen
    [autoit]

    ;
    #include <Constants.au3>
    ...
    $nAlteID = GUICtrlCreateCombo ("Text")
    ...
    $nNeueID = 123 ; neue ID

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

    SetWindowLong (GUICtrlGetHandle ($nAlteID), $GWL_ID, $nNeueID)
    ...
    Func SetWindowLong ($hWnd, $nIndex, $dwNewLong)

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

    Local $aRes = DllCall ('user32.dll', 'long', 'SetWindowLong', _
    'hwnd', $hWnd, _
    'int', $nIndex, _
    'long', $dwNewLong)
    If @error Then _
    Return @error

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

    Return $aRes[0]

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

    EndFunc
    ;

    [/autoit]


    Gruß
    Greenhorn

  • Example von AutoIt kompilieren - LINKER ERROR

    • Greenhorn
    • 19. Juni 2009 um 19:12
    Zitat von Deshoax

    Also muss ich immer ein L vor den Anführungszeichen setzen, wenn ein String kommt?


    Nur, wenn Du in Unicode schreiben möchtest. Du kannst es aber auch portabel schreiben, sodass man es sowohl in ASCII als auch in Unicode kompilieren kann.

    Spoiler anzeigen
    C
    // Nur ASCII
    char szBuffer [1000];   // char 8 bit breite Zeichen
    
    
    AU3_Send("Hallo Welt{!}", 0); 
    
    
    // Nur Unicode Zeichenketten
    wchar_t szBuffer [1000];   // wchar_t 16 bit breite Zeichen
    // "L" sagt dem Kompiler, dass es sich um breite Zeichensätze handelt.
    AU3_Send(L"Hallo Welt{!}", 0); 
    
    
    // Mit Makros kannst Du deinen Code in ASCII oder Unicode kompilieren
    // _T Makro
    #include <tchar.h>
    ...
    TCHAR szBuffer [1000];
    
    
    AU3_Send(_T("Hallo Welt{!}"), 0);
    
    
    // TEXT Makro
    AU3_Send(TEXT("Hallo Welt{!}"), 0);
    Alles anzeigen
    Zitat von Deshoax

    Aber wie kriege ich jetz die GUI-Funktionen von AutoIt hin???


    So wie es scheint, gibt es keine AU3_GUI... Funktionen in der DLL.
    Die Funktionen sind in der autoit3.h aufgelistet.

    EDIT:
    Dev-Cpp solltest Du nicht mehr nutzen, da es schon seit längerer Zeit nicht mehr weiterentwickelt wird und Bugs enthält.
    Nimm lieber Code::Blocks, diese IDE kannst Du unter Win/Linux/Mac benutzen


    Gruß
    Greenhorn

  • Example von AutoIt kompilieren - LINKER ERROR

    • Greenhorn
    • 18. Juni 2009 um 22:24

    Aaaaaaaah ... ;)

    In VC ist standardmäßig Unicode eingestellt, das Beispiel ist in ASCII ...

    So lässt es sich kompilieren:

    Spoiler anzeigen
    Code
    //
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
     	// You can now call AutoIt commands, e.g. to send the keystrokes "hello"
    	AU3_Sleep(1000);
    	AU3_Run(L"notepad.exe", L"", 1);
    	AU3_WinWaitActive(L"Unbenannt -", L"", 0);
    	AU3_Send(L"Hallo Welt{!}", 0);
    
    
    	// Get the text in the status bar
    	//char szText[1000];
    	//AU3_StatusbarGetText(L"Unbenannt -", L"", 2, szText, 1000);
    	//MessageBox(NULL, szText, L"Text:", MB_OK);
    
    
    	return 0;
    }
    
    
    //
    Alles anzeigen


    Gruß
    Greenhorn

  • ini datei auslesen

    • Greenhorn
    • 18. Juni 2009 um 22:02

    Hi,

    s. Anhang ... ;)

    Spoiler anzeigen
    [autoit]

    ;
    Opt("WinTitleMatchMode", 2) ; 2 = Erkennt Teile des Titels

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

    $sIE_Title = "- Microsoft Internet Explorer"

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

    $aBlacklist = IniReadSection ("ie.ini", "Blacklist")

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

    If (Not IsArray ($aBlacklist)) Then
    MsgBox (266256, "Fehler", 'Die Sektion "Blacklist" konnte nicht eingelesen werden!')
    Else
    While True
    $sTitle = WinGetTitle ($sIE_Title)

    For $i = 1 To $aBlacklist[0][0]
    If (StringInStr ($sTitle, $aBlacklist[$i][1])) Then
    ProcessClose("iexplore.exe")
    EndIf
    Next

    Sleep (1000)
    WEnd
    EndIf

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

    Exit (0)
    ;

    [/autoit]


    Gruß
    Greenhorn

  • Screenshots

    • Greenhorn
    • 18. Juni 2009 um 21:30

    Nun, die Funktion PixelSearch tut eigentlich genau das, was Du möchtest, sie holt sich einen Bereich (eines Fensters) in den Speicher und scannt dieses Bitmap.

    Von daher würde es wenig Sinn machen, das gleiche über DllCall zu erreichen, denn es wäre wesentlich langsamer und tut, wie gesagt, letztendlich das gleiche wie PixelSearch ...


    Gruß
    Greenhorn

  • Gui Hintergrundbild skalierbar

    • Greenhorn
    • 18. Juni 2009 um 20:37

    Hi,

    meine Bemerkung zu _GDIPlus_Startup/Shutdown bezog sich nicht auf den Fehler, ich dachte da schon eher an die anderen Funktionen. ;)

    Bei mir sieht resize_back.png so aus ...
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Wie Du siehst, ist die Transparenz beim Vergrößern des Bildes entstanden, also liegt der Fehler in der ImageResize Funktion.

    Suche mal nach StrechBlt, das wäre eine bessere Lösung, denke ich ...


    Gruß
    Greenhorn

  • Example von AutoIt kompilieren - LINKER ERROR

    • Greenhorn
    • 18. Juni 2009 um 20:29

    Ja, diese Möglichkeit gibt es auch noch. ;)

    Aber in Anbetracht des Aufwandes der beiden Alternativen, würde ich dir empfehlen, deine GUI gleich in C zu schreiben.


    Gruß
    Greenhorn

  • Gui Hintergrundbild skalierbar

    • Greenhorn
    • 18. Juni 2009 um 20:15

    Moin,

    der Fehler ist auf jeden Fall schon mal in der ImageResize Funktion.
    resize_back.png hat schon Transparenz im unteren Bereich.

    Außerdem solltest Du niemals _GDIPlus_Startup mehrmals aufrufen.
    Nur einmal am Anfang deines Programms und am Ende dann _GDIPlus_Shutdown !

    Mit GDI+ kenne ich mich leider nicht so gut aus, daher kann ich nur raten, welche der Methoden diesen Makel erzeugt.


    Gruß
    Greenhorn

  • Example von AutoIt kompilieren - LINKER ERROR

    • Greenhorn
    • 18. Juni 2009 um 19:31

    Moinsen,

    Du kannst keinen AutoIt Code mit einem C-Compiler kompilieren und natürlich auch nicht mit einem Linker verlinken, da AutoIt lediglich dein Script zu den Resourcen des (AutoIt-)Interpreters hinzufügt und keine (COFF) Objektdatei erzeugt, die man verlinken könnte.

    Was Du aber machen könntest, wäre deinen C-Code in eine DLL zu packen, dein AutoIt-GUI-Script mit AutoIt zu "kompilieren" und dann den C-Code mit DllCall aufzurufen, wenn Du ihn benötigst.


    Gruß
    Greenhorn

  • Screenshots

    • Greenhorn
    • 18. Juni 2009 um 19:19

    Moin,

    das geht schon, jedoch wäre es ganz gut deinen aktuellen Code zu sehen, um die Situation irgendwie Nachstellen zu können ...


    Gruß
    Greenhorn

  • $oProc.GetOwner

    • Greenhorn
    • 18. Juni 2009 um 18:53

    Moin,

    Beitrag bearbeiten -> Beitragsinformationen -> Präfix


    Gruß
    Greenhorn

  • Wortsturz (Spiel für Kinder)

    • Greenhorn
    • 17. Juni 2009 um 20:53
    Zitat von Oscar

    Ja, Inspiration war Lettris!
    Und wegen diesem Thread wollte ich sowas in der Art machen.


    Ich weiß, denn so bin ich auf das Proggie aufmerksam geworden.

    Zitat

    Halt mal ein Spiel für die Kleinen. Wobei mich mal interessieren würde, ob die Geschwindigkeit der herabfallenden Buchstaben so in Ordnung ist oder ob die zu schnell fallen.


    Ich habe auch schon krampfhaft überlegt, aber ist schwierig, da ich keine Kinder habe und somit auch wenig Ideengeber und alpha-Tester :D
    Als ich noch 'n Lütter war gab's keine (erschwinglichen) Computer/Videospiele, nur die mit den Strichen, obwohl das auch 'ne Riesen-Gaudi war ...

    Vielleicht wären noch ein paar Sounds ganz nett, wenn der Wizard/Elefant ins Bild rauschen aber wo bekommt man solche Sounds her, die Wizards/Elefanten so machen, wenn sie ins Bild rauschen ... ?


    Gruß
    Greenhorn

  • $oProc.GetOwner

    • Greenhorn
    • 17. Juni 2009 um 20:40

    Hi,

    Zitat von MCTAST245

    Wo ist der Vorteil wenn ich ein Array erstelle?
    Ausser das es professioneller aussieht. Auch hierfür danke.


    Aus deinem Beispielscript habe ich die letzten beiden "Return"s auskommentiert, da das so nicht funktioniert (sollte es deine Absicht gewesen sein nacheinander alle Werte zurückzugeben).
    Wenn Du in AutoIt Return aufrufst wird sofort aus der Funktion zurückgekehrt, das ist in vbs glaube ich anders ... ?(

    In einem Array hast Du alle Werte in einer Variablen und kannst diese dann "Return"en. ;)

    Zitat

    Wo ist der Unterschied zu deiner Abfrage in Zeile 25.
    Deins --> $nOwner = $objItem.GetOwner($sUserName, $sUserDomain)
    Meins --> $nOwner = $objItem.GetOwner


    Nun ganz einfach, ich gebe der Methode GetOwner die benötigten Parameter mit, um die Zeichenketten für "User" und "Domain" zu erhalten.
    GetOwner benötigt zwei Variablen zu je einem Puffer, welche die Zeichenketten aufnehmen.
    GetOwner Methode

    Zitat

    Bisher dachte ich, das man nur ein ganzes Objekt Item abfragen kann.
    Gehe ich aufgrund deines Scriptes recht in der Annahme, dass man auch einzelne Werte abfragen kann?


    Du kannst alle Methoden benutzen, die dir die Klasse Win32_Process zur Verfügung stellt.

    Zitat

    Weisst du zufällig ob man irgendwo eine Referenz dazu findet?
    Im Scriptomatic2 von Microsoft habe ich viel gefunden, allerdings nichts über objItem.GetOwner.


    Windows Management Instrumentation

    Zitat

    Sollte ich das den Thread auf gelöst setzen, wenn ich evtl. später noch Fragen dazu habe?


    Kannst ihn ruhig erst einmal auf gelöst setzen, und solltest Du an diesem Thema anknüpfen wollen, dann kannst Du ihn wieder auf "offen" setzen (glaub ich doch :rolleyes: )

    Zitat

    Danke und schönen Abend.
    Axel aus'm Pott


    Da nicht für, und ich wünsche dir auch noch einen entspannten Abend. :)

    Greenhorn aus'm platten Land

  • Wortsturz (Spiel für Kinder)

    • Greenhorn
    • 17. Juni 2009 um 19:55

    Na, da werd' ich doch glatt auch noch mal zum Kind ... :D ;)

    Wirklich gute Idee, wie bist Du drauf gekommen ?


    Gruß
    Greenhorn

  • $oProc.GetOwner

    • Greenhorn
    • 17. Juni 2009 um 18:51

    Moinsen,

    die Null für GetOwner sagt "Successful Completion" ;)

    Spoiler anzeigen
    [autoit]

    ;
    MyPID ( )

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

    Func MyPID ( )

    Local $COMPUTERNAME = EnvGet ("COMPUTERNAME")
    Local $sUsername;=EnvGet ("USERNAME")
    Local $sUserDomain;=EnvGet ("USERDOMAIN")
    Local $nPID, $sName, $nOwner
    Local $objItems
    Local $objWMI

    If ($COMPUTERNAME == "") Then _
    $COMPUTERNAME = "localhost"

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20

    $objWMI = ObjGet("winmgmts:\\" & $COMPUTERNAME & "\root\CIMV2")
    $objItems = $objWMI.ExecQuery('Select * from Win32_Process Where Name = "autoit3.exe"', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($objItems) Then
    For $objItem In $objItems
    $nPID = $objItem.ProcessId
    $sName = $objItem.Name
    $nOwner = $objItem.GetOwner ($sUsername, $sUserDomain)
    ConsoleWrite("> PID : " & $nPID & @CRLF)
    ConsoleWrite("> PROCESS : " & $sName & @CRLF)
    If ($nOwner == 0) Then _
    ConsoleWrite("> OWNER / DOMAIN : " & $sUsername & " / " & $sUserDomain & @CRLF)
    Next
    EndIf
    Return $nPID ???
    ;~ Return $sName ???
    ;~ Return $nOwner ???

    EndFunc

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

    Exit (0)

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

    ;

    [/autoit]

    Wenn Du alle Werte zurückgeben möchtest, dann solltest Du ein Array dafür benutzen. ;)

    Spoiler anzeigen
    [autoit]

    ;
    Local $aReturn [4]
    ...
    If IsObj($objItems) Then
    For $objItem In $objItems
    $aReturn[0] = $objItem.ProcessId
    $aReturn[1] = $objItem.Name
    $nOwner = $objItem.GetOwner ($aReturn[2], $aReturn[3])
    Next
    EndIf
    Return $aReturn

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

    ;

    [/autoit]

    Gruß
    Greenhorn

  • Alternative zu _GUICtrlTreeView_SetIcon?

    • Greenhorn
    • 17. Juni 2009 um 17:53

    Dazu brauchst Du keine extra DLL, um die Symbole zu speichern.

    Füge die Symbole mit ResHacker einfach den Resourcen deines Programms hinzu ...

    Dazu legst Du am besten ein kleines Script für ResHacker an.

    resource.rh

    Code
    // This script updates Icons
    // in MyProg.exe ...
    
    
    [FILENAMES]
    Exe    =   MyProg.exe
    SaveAs =   MyProg.exe
    
    
    [COMMANDS]
    -addoverwrite Symbol_1.ico, ICON,100,0
    -addoverwrite Symbol_2.ico, ICON,101,0
    -addoverwrite Symbol_3.ico, ICON,102,0
    -addoverwrite Symbol_4.ico, ICON,103,0
    -addoverwrite Symbol_5.ico, ICON,104,0
    Alles anzeigen


    Auf die Symbole zugreifen kannst Du dann über die IDs, im Beispiel also 100, 101, 102, ...
    Beim kompilieren bindest Du das .rh Script dann wie folgt ein:

    [autoit]


    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Run_After=C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\ResHacker.exe -script resource.rh

    [/autoit]


    Wichtig: Upx=n und Pfad zu ResHacker evtl. anpassen.

    So, nun kannst Du _GUICtrlTreeView_SetIcon so benutzen:

    [autoit]


    ...
    _GUICtrlTreeView_SetIcon ($hwnd, $hItem, "MyProg.exe", 100)
    ...
    _GUICtrlTreeView_SetIcon ($hwnd, $hItem, "MyProg.exe", 101)
    ...
    _GUICtrlTreeView_SetIcon ($hwnd, $hItem, "MyProg.exe", 102)
    ...

    [/autoit]

    Das war's eigentlich schon.


    Gruß
    Greenhorn

  • Alternative zu _GUICtrlTreeView_SetIcon?

    • Greenhorn
    • 16. Juni 2009 um 21:37

    Moin,

    konvertiere die PNGs doch einfach zu Icons ... ?!


    Gruß
    Greenhorn

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™