Das Problem bei einer Anwendung ohne GUI ist nicht sicher zu stellen, daß diese Anwendung die Hotkeys empfängt. Das Problem ist nicht sicher zu stellen daß deine Anwendung die Arbeit mit anderen Anwendungen nicht behindert.
Ohne GUI kannst du nur HotKeyset verwenden und das fängt Systemweit ab. Mit Gui könntest du GUISetAccelerators verwenden, diese Acceleratorkeys sind nur gültig wenn die GUI aktiv ist.
Beiträge von autoBert
-
-
Danke, das war sehr hilfreich.
Immer wieder gerne

-
Du solltest dir ein anderes CAD zulegen, daß die Werkzeuge auch bietet die du benötigst.
Edit: ich habe gerade gesehen:Leider kann ich nicht vor Ort und Stelle daran arbeiten und das Programm, welches es "bedienen" soll,
auch nicht auf meinen privaten Rechner installieren (Lizenzrechtlich) .kläre deine Lizenzrechtlichen Fragen denn mit Image- PixelSearch wirst du da nicht weit kommen. Da könnte so:
Der Ablauf dabei ist so simpel, das ich das meiste ohne hinzuschauen machen kann,
ein besseres Ergebnis herauskommen.
-
_WinWaitActivate gibt es garnicht.
Wird afaik in Au3Recorder-Skripten ertstellt.
-
Also: Alles gut, Problem gelöst. Dann liegt das Problem wohl nicht an AutoIt, sondern an N++.
Das Problem kann mit AutoIt gelöst werden:
C#include <FileConstants.au3.> #include <Array.au3.> $sData=FileRead('Test9.ini') ;Datei einlesen $hFile=FileOpen('Test9.ini',$FO_OVERWRITE+$FO_UNICODE ) ;im richtigen Format ein Handle zum schreiben eröffnen FileWrite($hFile,$sData) ;in Datei schreiben FileClose($hFile) ;Handle schliessen $aIni=IniReadSection('test9.ini','Alte Versionen') _ArrayDisplay($aIni) -
Genau solch eine Funktion habe ich gesucht!
Vielen Dank BertBedank dich bei BugFix, ist seine Vorlag in einer etwas anderen Form. Wenn dir dies so reicht ist es i.O. ansonsten weißt du ja jetzt wo du nachschauen kannst.
mfg (auto)Bert
-
Hi Bert,
vielen Dank für die schnelle Antwort.
Leider ist das Beschriebene nicht ganz das, was ich suche. So wie ich das sehe, kann man mit deinem Skript nur die Hintergrundfarbe ändern, oder irre ich mich da?mit Erweiterung des Skriptes ist auch das ändern der Textfarbe möglich:
62_Listview Farbig.jpgSpoiler anzeigen
AutoIt
Alles anzeigen;https://autoit.de/index.php/Thread/84279-Unterschiedliche-Textfarben-innerhalb-einer-ListView/?postID=674195#post674195 #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <array.au3> #include <ListViewConstants.au3> #include <StructureConstants.au3> #include <WindowsConstants.au3> $aColBK = IniReadSection(@ScriptDir & "\lv_format.ini", "ColBKColor") _ArrayDelete($aColBK, 0) ;_ArrayDisplay($aColBK) $aRowBK = IniReadSection(@ScriptDir & "\lv_format.ini", "RowBKColor") _ArrayDelete($aRowBK, 0) ;_ArrayDisplay($aColBK) $aColText = IniReadSection(@ScriptDir & "\lv_format.ini", "ColTextColor") _ArrayDelete($aColText, 0) ;_ArrayDisplay($aColBK) $aRowText = IniReadSection(@ScriptDir & "\lv_format.ini", "RowTextColor") _ArrayDelete($aRowText, 0) ;_ArrayDisplay($aRowText) $GUI = GUICreate("Listview Farbig", 1024, 300, 0, 0) ;<==== Breite geändert $cListView = GUICtrlCreateListView("", 2, 2, 1020, 294, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT)) ;<==== Breite geändert $hListView = GUICtrlGetHandle($cListView) For $i = 1 To 31 _GUICtrlListView_InsertColumn($hListView, $i - 1, $i, 25) _GUICtrlListView_SetColumnWidth($hListView, $i - 1, 32) ;<==== eingefügt für Spaltenbreite Next For $i = 0 To 21 ; alle Item/SubItem erstellen _GUICtrlListView_AddItem($hListView, "Item: " &$i, $i) For $j = 1 To 30 _GUICtrlListView_AddSubItem($hListView, $i, "Sub: "&$j, $j) Next Next GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUISetState() While True $msg = GUIGetMsg() Switch $msg Case -3 ExitLoop EndSwitch WEnd Exit Func WM_NOTIFY($hWnd, $msg, $wParam, $lParam) Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hListView Switch $iCode Case $NM_CUSTOMDRAW Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam) Local $iDrawStage, $iItem, $iSubitem, $hDC, $tRect $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage') Switch $iDrawStage Case $CDDS_ITEMPREPAINT Return $CDRF_NOTIFYSUBITEMDRAW Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM) ; Item/SubItem das aktuell gezeichnet werden soll ermitteln $iItem = DllStructGetData($tCustDraw, 'dwItemSpec') $iSubitem = DllStructGetData($tCustDraw, 'iSubItem') Switch $iItem ; Zeilenwahl Case -1 ;kommt nicht vor ist aber notwendig, damit case else verwendet werden kann Case Else $iIndex = _ArraySearch($aRowBK, $iItem, 0, 0, 0, 0, 1, 0) If $iIndex = -1 Then ;nicht im Array für spezielle Zeilen also weiß DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR(0xFFFFFF)) Else DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aRowBK[$iIndex][1])) ;ConsoleWrite('Item '&$iItem&' BK: '&$aRowBK[$iIndex][1] & @CRLF) EndIf $iIndex = _ArraySearch($aRowText, $iItem, 0, 0, 0, 0, 1, 0) If $iIndex = -1 Then ;nicht im Array für spezielle Zeilen also schwarz DllStructSetData($tCustDraw, 'clrText', RGB2BGR(0x000000)) Else DllStructSetData($tCustDraw, 'clrText', RGB2BGR($aRowText[$iIndex][1])) ;ConsoleWrite('Item '&$iItem&' Text: '&$aRowText[$iIndex][1] & @CRLF) EndIf EndSwitch Switch $iSubitem Case -1 ;kommt nicht vor ist aber notwendig, damit case else verwendet werden kann Case Else $iIndex = _ArraySearch($aColBK, $iSubitem, 0, 0, 0, 0, 1, 0) If $iIndex <> -1 Then DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aColBK[$iIndex][1])) ;ConsoleWrite('SubItem '&$iSubitem&' BK: '&$aColBK[$iIndex][1] & @CRLF) EndIf $iIndex = _ArraySearch($aColText, $iSubitem, 0, 0, 0, 0, 1, 0) If $iIndex <> -1 Then DllStructSetData($tCustDraw, 'clrText', RGB2BGR($aColText[$iIndex][1])) ;ConsoleWrite('SubItem '&$iSubitem&' Text: '&$aColText[$iIndex][1] & @CRLF) EndIf EndSwitch Return $CDRF_NEWFONT EndSwitch EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func RGB2BGR($iColor) Local $sH = Hex($iColor, 6) Return '0x' & StringRight($sH, 2) & StringMid($sH, 3, 2) & StringLeft($sH, 2) EndFunc ;==>RGB2BGRund die dazugehörige Ini:
die Spalteneinfärbung überschreibt die Zeileneinfärbung. Die Items kannst du auch mit GuiCtrlCreateListviewItem anlegen,Wenn du es noch individueller benötigst solltest du dir ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3) anschauen. Aus dieser UDF habe ich die für obigen Zweck benötigten Funktionen kopiert. Im Original ist natürlich noch viel mehr machbar.
mfg (auto)Bert
-
Hallo TheUnkowingDude,
herzlich willkommen im Forum und viel Spass mit AutoIt.
Schau dir dazu Listview Subitem BKColor anpassen - je Subitem eine Farbe. Zeilen 60 bis 71 sind für das Färben der Zeilen und Spalten zuständig.
60_Listview Farbig.jpg
Das ganze basiert auf http://www.autoit.de/index.php?page=Thread&threadID=10104mfg (auto)Bert
-
@autoBert sorry aber es nervt gerade wirklich. Das ist ein Game in der Early Access, jede kann davon nach belieben selber einen Server aufsetzen. Wo da eine Gelddruckmaschiene siehst ist mir schleierhaft. Wirkt gerade wirklich so als versuchst mit allen Mitteln recht zu behalten.
Soll ich jetzt wirklich mit Hilfe von Social Media nach Leuten suchen die (wie ein Testaccount) mit einem Wink mit dem Scheunentor zum Spenden aufgefordert wurden?
-
Sind wir hier im Kindergarten? Es reicht langsam halt dich jetzt zurück und warte auf die Antwort der Admin´s / Mod´s
ich verstehe zwar dein Bedürfnis das Thema über die Bühne zu bekommen, ich habe auch nichts dagegen wenn dies auf der PN-Schiene geschieht. Aber solange du nicht weist wer, was du bist:
Ich bin ServerHoster von Galaxy9.de
werde ich hier weiter recherieren und die Ergebnisse posten. Und anscheinend habe ich die Nadel im sogenannten Heuhaufen gefunden, sonst hättest du nicht gleich von Anfang an so empfindlich reagiert. Das Thema wäre schon längst gelöst.
chip: hast du in's Impressum geschaut? Der Hase legt faule Eier (MeisterLampe OO macht falsche Angaben, er ist weder der Hoster, noch der Verantwortliche im Impressum und als Birdy hat er auch noch keinen einzigen Beitrag auf Galaxy9 geschrieben).
auch ich kann mich wiederholen:
Hätte der Entwickler des Spieles gewollt das irgendein Vogel seine Invetardateien tweakt, hätte er selbst ein Tool mit gegeben oder zumindest den Aufbau der Datei dokumentiert.
-
Desweiteren werde ich mit dir nicht mehr Diskutieren ich bin nicht deine Frau!
Was für ein Glück für mich.
-
Und ich bin B1rdY nicht Yama!
Sagtest du nicht du bist der Verantworliche für galaxy9.de? Laut dortigem Impressum ist dies aber Yama,
einen Vogel mag es dort zwar geben, er ist aber nicht aktiv:
Es wurden keine mit Ihrer Suchanfrage - birdy site:galaxy9.de - übereinstimmenden Dokumente gefunden.
Desweiteren bin ich nach ausgiebigen Recheren zu dem Schluss gekommen, daß mindestens ein Mod (ich würde seinen Nick mit bösem Eindringling übersetzen) gegen Spende bereit ist Spielern Vergünstigungen zu geben. Seltsamerweise könnte selbiger dein (falls es jemals fertig wird) Programm als Gelddruckmaschine benutzen.
Da dein Programm dazu in der Lage wäre Spieler zu bevor- bzw. zu benachteiligen und da du Zugriff auf den Server hast also auch dich bevorteilen kann sehe ich den Verstoß gegen dieZitat von ForenregelnAlles anzeigenProgramme, die einem Spieler bei jeglicher Art von Computerspiel (auch Einzelspieler) einen Vorteil verschaffen ("Bots")
Tools, um Nachrichten unerwünscht oft zu versenden (Spamming-Tools)
Programme, die anderen, auch Freunden, einen Schreck einjagen sollen
oder sich sonst über andere Nutzer lustig machen ("Spaßviren")
Automatisierung von Webseiten oder Tools, die das in ihren AGBs verbieten
Viren
Malware, Spyware
Keylogger
Umgehen von Captchas(Diese Liste ist ausdrücklich nicht vollständig. Programme, die dem
hinter diesen Regeln stehenden Geist widersprechen, sind ebenso als
nicht erlaubt anzusehen)gegeben.
Wenn ich Tante Google nach Meisterlampe frage erhalte ich u.a. diesen Hinweis:
Zitat von Tante Googlemeisterlampe00 is a Hack User at High-Minded. ... There are no messages on meisterlampe00's profile yet. Show Ignored Content. Loading... Loading.
Was hat das bitte mit den Cronjobs zu tun,
Mit Cronjobs kann man (auch einzelne) Dateien sichern, Auswertungen (gegen die ich ja nichts habe) starten und bei Bedarf den vorhergehenden Zustand wieder herstellen. Und immer noch über der Gürtellinie: wer keine Ahnung vom Administrieren eines Servers hat sollte die Finger davon lassen.
Hätte der Entwickler des Spieles gewollt das irgendein Vogel seine Invetardateien tweakt, hätte er selbst ein Tool mit gegeben oder zumindest den Aufbau der Datei dokumentiert.
Jetzt vielleich knapp drunter: Du magst zwar viele Hobby haben, aber Programmieren solltest du sein lassen. -
Danke, die Idee ist es auslesen zu können und bei bedarf sein inventar zu leeren oder das gecheatete item rauszunehmen und seinen account zu verwarnen
Nette Erköärärung, das Auswerten über Cronjobs und bei Bedarf zurücksetzen auf letzte gesicherte Datei würde genügen. Weniger Aufwand und im Rahmen deiner Fägigkeiten, falls du wirklich Yama bist sollte dies ja kein Problem sein.
@Mod/Admin: macht endlich die Vorlage für das (falls erfolgreich) beste Cheatprogramm dicht-
-
Also ok das ist etwas aufwendig ein FreeBsd Server erstellt ein Backup und Sendet dies an einen Debian Server dieser Sendet eine Mail das er das Backup empfangen hat oder eben nicht im falle des nicht möchte ich diese mit AutoiT weiter leiten am besten so automatisch wie nur eben möglich ist alles etwas umständlich aber funktioniert derzeit leider nur so und ist in der Form auch der Wunsch aufbau.
Wenn ich dich also richtig verstehe geht es darum ob ein bestimmte EMail eingegangen ist.
- Welches EMail Programm verwendest du?
- Warun wird die EMail nicht gleich an die korrekte Zieladresse verschickt?
-
_WinAPI_SetWindowDisplayAffinity`verhindert daß eine GUI gecaptured wird. Den Effekt hast du ja beschrieben:
Diese erzeugt jedoch auf Screenshots einen schwarzen “Kasten“ anstelle des Fensters.
Ich kenne nur zwei Möglichkeiten eine GUI die gecaptured werden soll schnell ausblenden:
- Wenn der Benutzer den ScreeShot anstößt, kann er vorher dafür sorgen das die gewünschte GUI kurz nicht sichtbar ist.
- ein Hotkeyset auf die Drucktaste um eine der genannten Aktionen ein zu leiten, den ScreenShot zu veranlassen und die Aktion wieder rückgängig zu machen. Dies nützt nichts bei fremd Programme (vornehme Umschreibung für Spyware), die ohne Vorwarnung einen ScreenShot machen.
Was auf dem Screen sichtbar ist kann gecaptured werden bzw. erzeugt ein schwarzes Rechteck.
-
Minimiere einfach deine GUI vor dem ScreenShot, dann ist sie auch nicht zu sehen. WinSetTrans ist die andere Möglichkeit, WinMove an Koordinaten weit außerhalb des sichbaren Bereiches die 3.
-
PS: Das Script oben von mir war kein fertiges Script, sondern nur eine Sammlung von Befehlen, mit erklärung. Hätte ich vielleicht dazuschreiben sollen.
Meine Anmerkung ist nicht an Kritik an dir zu verstehen:
Natürlich ist dies ein Problem bei @Kanashius Skript ist das Skript doch auf 3 Variablen fixiert. Anders ist es hier:
...
allerdings bekommst du hier einen mit | getrennten Ergebnisstring (Array wäre auch möglich) den du noch in ein Array splitten mußt. Auch hier mußt du dir vor dem Aufruf merken (in eine Variable speichern) was du gesucht hast.Dein Lösungsweg war absolut an die Vorgaben des Eröffnungsbeitrages und dem Wissenstand von Lanealine angepasst, ob mein flexibler Lösungsweg für Lanealine der bessere Weg ist, weiß ich noch nicht. Er könnte es werden wenn er sich mehr mit der Hilfe und auch einem Arraytutorial beschäftigt.
Das Hauptproblem ist, ich weiß bis jetzt noch nicht was er genau erreichen will.
mfg (auto)Bert -
Und was ergibt: Bc,123,44,99,22,44
44 an 2. Stelle ist befriedigend
99 an 3. Stelle ist außerhalb der Festlegungen müßte imho aber mind. "gut" ergeben.
22 an 4, Stelle ist außerhalb der Festlegungenaber stur nach deinen festgelegten Richtlinien:
Code
Alles anzeigen#include <Array.au3> Global $aini Global $aRL[4][3] ;2D-Array 4 Zeilen 3 Spalten $aRL[0][0]=0 ;1. Spalte Min $aRL[0][1]=40 ;2. Spalte Max $aRL[0][2]='ausreichend' ;3. Spalte Note $aRL[1][0]=41 $aRL[1][1]=60 $aRL[1][2]='befriedigend' $aRL[2][0]=61 $aRL[2][1]=80 $aRL[2][2]='gut' $aRL[3][0]=81 $aRL[3][1]=100 $aRL[3][2]='sehr gut' $sData = ClipGet() ;Daten aus Zwischenablage auslesen #cs $hFile=FileOpen('Pseudo.Ini',$FO_OVERWRITE) FileWrite($hFile,$sData) FileClose($hFile) #ce ;$sData=FileRead('Pseudo.Ini') _PseudoIniCreate($sData) ;PseudoIni als 2D-Array erzeugen $sFound = _PseudoIniRead("Bc") ;Bc,123,44,99,22,44 If @extended Then $aRes = StringSplit($sFound, '|', 1 + 2) _ArrayDisplay($aRes, "Bc") $sNote=_Bewerten($aRes) MsgBox(0, "Bc", $sNote) EndIf Func _PseudoIniCreate($sIniText) $aini = StringSplit($sIniText, @CRLF, 1 + 2) ;=> 1D Array aller kopierten Zeilen _ArrayColInsert($aini, 1) ;aus 1D 2D machen For $i = UBound($aini) - 1 To 0 Step -1 ;Zeilen durchgehen $aini[$i][0] = StringReplace($aini[$i][0], ',', '=', 1) ;1. Komma mit Gleichzeichen ersetzen $split = StringSplit($aini[$i][0], '=', 1 + 2) ;Zeile mit = trennen If UBound($split) > 1 Then ;Datenwerte eintragen $aini[$i][0] = $split[0] $aini[$i][1] = $split[1] Else _ArrayDelete($aini, $i) EndIf Next ;_ArrayDisplay($aini) EndFunc ;==>_PseudoIniCreate Func _PseudoIniRead($sKey) ;Syntax _PseudoIniRead('DerGesuchteString') ; ;Parameter: $sKey enthält den zu suchenden "Key" im PseudoIni-Array ; ;Rückgabe: bei Erfolg: einen | getrennten String = "Value" des "Keys" ; @error = 0 ; @extended = Anzahl der Teilstrings ; ; bei Fehler: @error = 1 ; @extended = 0 Local $sRet, $iErr = 1, $iExt = 0 For $i = 0 To UBound($aini) - 1 Step 1 If $aini[$i][0] = $sKey Then $sRet = StringReplace($aini[$i][1], ',', '|') $iExt = @extended + 1 $iErr = 0 ExitLoop EndIf Next SetError($iErr, $iExt) Return $sRet EndFunc ;==>_PseudoIniRead Func _Bewerten(ByRef $aArray) ;Syntax _Bewerten($aDaszubewertendeArray) ;bewertet anhand der Arrayelemente und gibt im Erfolgsfall die Bewertung zurück ;Parameter: $aArray das zubewertende Array ; ;Rückgabe: bei Erfolg: einen String mit der Bewertung ; @error = 0 ; @extended = Spalte die ausschlaggebend für Bewertung war ; ; bei Fehler: @error = 1 ; @extended = 0 Local $sRet, $iErr=1, $iExt For $i=0 To UBound($aRes)-1 If $i>UBound($aRL)-1 Then ExitLoop If ($aArray[$i]>=$aRL[$i][0]) And ($aArray[$i]<=$aRL[$i][1]) Then $iErr=0 $iExt=$i+1 $sRet=$aRL[$i][2] EndIf Next ;ConsoleWrite($sRet&@TAB&$iErr&@TAB&$iExt&@CRLF) SetError($iErr, $iExt) Return $sRet EndFuncschau dir auch dazu das Array $aRL am Anfang an, Werte enstanden durch C&P und S&R.
-
Das Thema wird schon ausgiebig in Profis-Bitte. Datei auslesen, Hexwerte vergleichen und ändern. behandelt.
@Mod/Admin: bitte zusammenführen.
Desweiteren nutze ich die Gelegenheit auf Profis-Bitte. Datei auslesen, Hexwerte vergleichen und ändern. hinzuweisen.
EDIT BugFix: Zusammengeführt
-
Liest sich interessant, wieviele AV-Engines bei Virustotal melden Virus für dein kompilertes Skript? Ich tippe auf >40%.