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
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
Moin,
geht leider nicht ... ![]()
Gruß
Greenhorn
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.
...
...
$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]
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.
...
$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) ![]()
...
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
Moin,
...
$msg = GUIGetMsg ( )
Switch $msg
Case $aCombo[0] To $aCombo[$iCount-1]
MachWas ("Irgendetwas")
...
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.
;
#include <Constants.au3>
...
$nAlteID = GUICtrlCreateCombo ("Text")
...
$nNeueID = 123 ; neue ID
SetWindowLong (GUICtrlGetHandle ($nAlteID), $GWL_ID, $nNeueID)
...
Func SetWindowLong ($hWnd, $nIndex, $dwNewLong)
Local $aRes = DllCall ('user32.dll', 'long', 'SetWindowLong', _
'hwnd', $hWnd, _
'int', $nIndex, _
'long', $dwNewLong)
If @error Then _
Return @error
Return $aRes[0]
[/autoit] [autoit][/autoit] [autoit]EndFunc
;
Gruß
Greenhorn
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.
// 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
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
Aaaaaaaah ... ![]()
In VC ist standardmäßig Unicode eingestellt, das Beispiel ist in ASCII ...
So lässt es sich kompilieren:
//
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
Hi,
s. Anhang ... ![]()
;
Opt("WinTitleMatchMode", 2) ; 2 = Erkennt Teile des Titels
$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
Exit (0)
;
Gruß
Greenhorn
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
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 ...
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
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
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
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
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
Moin,
Beitrag bearbeiten -> Beitragsinformationen -> Präfix
Gruß
Greenhorn
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.
ZitatHalt 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 ![]()
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
Hi,
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. ![]()
ZitatWo 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
ZitatBisher 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.
ZitatWeisst 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
ZitatSollte 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
)
ZitatDanke 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
Na, da werd' ich doch glatt auch noch mal zum Kind ...
![]()
Wirklich gute Idee, wie bist Du drauf gekommen ?
Gruß
Greenhorn
Moinsen,
die Null für GetOwner sagt "Successful Completion" ![]()
;
MyPID ( )
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"
$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
Exit (0)
[/autoit] [autoit][/autoit] [autoit];
[/autoit]Wenn Du alle Werte zurückgeben möchtest, dann solltest Du ein Array dafür benutzen. ![]()
;
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]Gruß
Greenhorn
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
// 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:
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Run_After=C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\ResHacker.exe -script resource.rh
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)
...
Das war's eigentlich schon.
Gruß
Greenhorn
Moin,
konvertiere die PNGs doch einfach zu Icons ... ?!
Gruß
Greenhorn