Beiträge von BLinz
-
-
Nach fast 3h probieren gebe ich es auf und suche nun euren Rat:
Es geht um Code für die Symbole im Info-Bereich / Tray Items um eines dauerhaft sichtbar zu machen ohne das der Benutzer dies von Hand machen muss.
Auf jedem Windows Rechner gibt es folgenden Registry-Wert:
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify
und dort dann den REG_BINARY Wert IconStreams
Gemäß den Beispielen für PowerShell und Visual Basic möchte ich die Binärwerte des Registry-Werts auswerten.
In dem Schlüssel stehen verschiedene Sektionen die immer 1640 Bytes lang sind:
- 528 bytes – Path to the executable
- 4 bytes – Notification visibility setting
- 512 bytes – Last visible tooltip
- 592 bytes – Unknown (Seems to have a second tool-tip embeded in it but the starting position in the block changes)
- 4 bytes – ID
Mindestens der Pfad zur Exe in den 528 Bytes ist ROT13 "verschlüsselt" (und wohl in UTF8)
Ziel ist es ein bestimmtes Programm anhand des Pfades zu finden um dann den 4 Bytes "Notification" zu manipulieren.
Ich scheitere schon daran aus dem Registry-Wert etwas lesbares zu machen (ROT13 rückwärts) (was ja auch gar nicht sein muss)
Auch einen Programmnamen (bzw. Teile davon) in ROT13 => UTF8 => Binary zu wandeln um diesen in der Bytefolge zu suchen scheitert.
Zudem bin ich nicht einmal sicher ob ich das richtig auseinander geschnitten habe ...
Verstehen - meine ich - tue ich die Beispielprogramme. Aber wie nach AutoIt umsetzen.
Die beiden Skripte aus den Links habe ich angehängt:
PowerShell: NotifyIcon.ps1.txt von dieser Quelle: PowerShell
Visual Basic: NotifyIcon.bas.txt von dieser Quelle; Visual Basic
Beim PowerShell Artikel stehen auch noch mal die Einzelheiten.
Danke für jeden Tipp,
BLinz
-
-
Der Text in den Popups ist auch Mehrsprachig - allerdings mit 1-2 Übereinstimmungen.
Ich hatte mal ein ähnliches Problem. Was zeigt Auto Window Info denn unter Visble Text?
Und wenn da nur ein eindeutiges Wort drin steht was die anderen Dialoge nicht haben würde das doch schon reichen (für den 2. Parameter der Befehle wie z.B. WinGetHandle, WinWait usw.)
Mehrsprachig - also z.B. mal Deutsch oder Englisch? Dann eben ohne WinWait sondern in einer Schleife alle Sprachen durchprobiert.
Oder irgendwo eine Erkennung einbauen welche die Sprache der GUI ermittelt, dann kannst du wieder gezielt suchen. -
Wofür das Rad ein zweites (drittes, viertes...) Mal erfinden? Letztlich willst du ja mit dem Ding telefonieren, da tuns fertige Programme genauso gut?
Und ich dachte gerade der Weg ist das Ziel Das es so etwas schon gibt sollte keinen abhalten.
Ich muss aber zugeben das dieses Ziel - je nach Kenntnissen - sehr ambitioniert ist (Ähnlich wie "Ich schreibe einen eigenen Browser" oder "Ich schreib ein neues Betriebssystem" was wir beides hier im Forum schon mal hatten)
-
Also bei meinen Android 6 Handy kannich in den Einstellungen bei Bluetooth wiederum jedes gekoppelte Gerät auswählen (Zahnrad dahinter) - und dann z.B. bei Audio-Geräten einzeln Anruf und Medienwiedergabe deaktivieren/aktivieren.
Hatte ich mal für Navi so gemacht - Anrufe auf die Freisprechanlage, Medienwdg. deaktiviert damit der Ton weiter aus dem Handy kommt.
Bzw. das der Ton für das Navi aus einem 2. / extra Bluetooth Lautsprecher kam.
Wenn du beides für die Uhr deaktivierst müsste es gehen.
-
über WinList() erhalte ich zu jedem Array-Eintrag (1. Dimension), auch zu denen, die einen Fensternamen enthalten, ein Handle (2. Dimension),dem eindeutig ein Prozess zugeordnet ist. Also kann ich schon aus dem Fensternamen - dem Taskmanager sei Dank - auf die dazugehörige "xyz.exe" schließen.
Schließen ja. Trotzdem hat der Fenstername nichts mit dem Programmnamen zu tun. Wenn ich in einem Script eine GUI "Rechner" nennen kann der Prozess dazu trotzdem "Walter.exe" heißen.
Kurze Suche mit google ergab das WinGetProcess() einem die PID zum Fenster liefert - dessen Wert sich wieder mit ProcessList() abgleichen ließe um den Namen der .exe zu bekommen.Was man dann wieder zusammenfassen kann - denn ein Programm kann ja wiederum mehrere Fenster haben die auf eine .exe münden
Der Taskmanager zeigt einem - die richtigen Spalten eingeblendet - aber richtig an
Zu dem Script von @autoiter:
In der tat zeigt es bei auch Einträge für jedes Gadget (Die Mini-Anwendungen von Windows 7, habe ich unter W10 auch noch am laufen), einiges was nur ein Symbol im Info-Bereicht hat ... und einige Microsoft-Store AnwendungenIch habe mal folgendes geändert
AutoIt$aVisible[$iCount][1] = $aList[$i][1] ; in $aVisible[$iCount][1] = WinGetState($aList[$i][1])
Dann sieht man den Status in der 2. Spalte. Und der zeigt mir das wir hier mit WinGetState() nicht weiter kommen. Da bräuchte es einen besseren Befehl.
Bei läuft übrigendes auch 2x der Rechner. Wie alle MicrosoftApps scheinbar 2x laufen. Und den Rechner hatte ich wieder beendet. Wie es bei den Handys üblich ist laufen die Apps aber weiter damit diese beim nächsten Start schneller zur Verfügung stehen (Calc.exe ist ja jetzt auch eine App).
-
Mit dem Konsolen-Befehl, den ich Dir bereits in Beitrag 4 nannte, habe ich soeben rekursiv in 4,8 Sekunden "2.200 Verzeichnisse mit über 21.000 Dateien" indexiert, in eine .txt geschrieben und die .txt geöffnet.
Stimmt, hatte ich nicht mehr dran gedacht.
Die Frage ist was man haben will. Ich wollte eine Liste der Dateien mit vollständigen Pfad - um diese dann in anderen Programmen weiter zu verwenden (ich hatte mir das mal so geschrieben wie ich es brauche),
Dabei konnte ich anderen Schnickschnack nicht gebrauchenIch grüble mal nach wie man das unter einen Hut bekommen kann ohne das ganze zu überfrachten.
Ich habe bereits die Version 1.1 fertig - mit der Unterstützung von animierten GIF und Profilen bei der Zielordnerliste.
Leider finde ich den Code für die Profilunterstützung noch schrecklich ... ineffektiv. Es sind 5 Funktionen in denen viel das gleiche steht. Ein erster Versuch gestern das zu bereinigen führte nur bei dreien zum Erfolg. -
Danke! Nicht einfach, passenden Beipielcodes finde ich nicht. Da werde ich wohl länger zum Lernen brauchen als in VBA.
Also wenn du mal in die Hilfe schaust wirst du schon mal einiges an Beispielen finden - zu praktisch jedem Befehl.
Dein Hauptproblem könnte sein: VBA ist objektorientiertes Programmieren, AutoIt ist "nur" prozedural.
Es gibt zwar auch eine UDF um mit AutoIt Objektorientiert zu arbeiten ... sehe ich aber eher selten das die genutzt wird.Trotzdem lässt sich vieles aus VBA gut umsetzen
-
-- "Einstellungen" (ebenfalls 2x und nicht von mir gestartet)
WinList() gibt dir nur die Fensternamen. Es wäre vermessen aus diesen Namen auf den tatsächlichen Namen der .exe etc. zu schließen. Rechner muss also nicht calc.exe bedeuten. Der Taskmanager sagt dir mehr dazu (ggf. zusätzliche Spalten einblenden)
ProcessList würde hingegen die Prozesse (also auch calc.exe) auflisten
Ansonsten hat @autoiter die die Lösung präsentiert -
Hast du mal den Namen des Zielprogrammes? Egal wie unwahrscheinlich das ist das es ein anderer hat?
Ansonsten genau wie @autoiter es geschrieben hat.
Meistens ist die Vorgehensweise wie folgt:- Du startest aus AutoIt heraus das Zielprogramm - wenn möglich gleich mit Parameter (z.B. Datei die geöffnet werden soll)
Gf. ist ShellExecute() die passende Funktion, der kannst du gleich die Zieldatei übergeben und die dazu gehörige Anwendung öffnet sich (z.B. Word bei .docx Dokumenten) - Dann machst du ein WinWait() bis das Programfenster geöffnet ist
- ggf. holst du dir - in einer Endlosschreife While 1 ... Wend einen Zeiger auf eines der Controls (Button, Textfelder etc.) ControlGetHandle() und zum Beispiel ControlGetText() für den Test ob es geklappt hat. Wenn ja kommst du mit ExitLoop aus der Endlosschleife (in der du später auch noch ein Zeitlimit einbauen kannst)
- Der Rest ist in der Regel dann
- Mit ControlGetHandle() einen Zeiger auf das Element holen
- ControlClick() um es anzuklicken (geschieht ohne das die Maus wirklich bewegt wird, Position etc. ist egal)
- ControlSend() um Tasten oder Text zu senden
- ggf. wieder auf neue Dialoge warten etc.
- Du startest aus AutoIt heraus das Zielprogramm - wenn möglich gleich mit Parameter (z.B. Datei die geöffnet werden soll)
-
Öhm, pfff ... ein besserer Name fällt mir aber auch nicht ein
-
Das Programm würde ich allerdings anders benennen. Oscar hat seine Fassung. Du Deine. Wenn man in Google sucht und sich nicht auskennt, ist ein einziger Name für 2 verschiedene Programme nicht unbedingt förderlich, weil man von 2 verschiedenen Autoren Resulate erzielt.
Naja, ich wollte damit schon Oscars Original "ehren", die Ähnlich der Programm, auch optisch, ist ja nun frappierend. Weshalb ich ja auch gleich in der ersten Zeile auf das Original verweise.
Eine kleine Testsuche bei Tante Google ergab das es einige andere Produkte und Programme mit gleichen Namen gibt. Grenzt man die Suche ein so erscheint Oscar zuerst.
Soll sich Oscar zu äußern.1. Etwas zur Erstellung der Filelist.
- Anzahl der gesamten Dateien ausgeben
- Größe aller Dateien ausgeben
- Speicherort von Local $_s_FilenamesTXT = @TempDir & "\" & StringReplace(StringReplace(GUICtrlRead($id_InputSourceDirectory), "\", "-"), ":", "-") & ".txt" nach ScriptDiR\Data\Dateiname.txt wechseln.Anzahl - ok könnte ich an das Ende oder den Anfang setzten - kein Problem.
Größe ... da hatte ich schon drüber nachgedacht. Aber wenn er dann bei 13.000 Dateien in einem Ordner FileGetSize() durchführt wäre der ganz schön beschäftigt / auf der Platte am Rödeln. Und deshalb hatte ich es wieder verworfen.
Speicherort: Wiederum Absicht. In dem Temp-Ordner darf man immer schreiben, in den Script-Ordner nur vielleicht. Ggf. vorher einen Dialog - wobei man dann nicht mehr auf Knopfdruck die Liste hätte. Die ja im Standard-Editor für Textdateien geöffnet wird (bei mir Notepad++) - und man kann sie ja dann noch woanders hinspeichern. Falls ich doch noch mal einen extra Setup-Dialog einführe könnte man dort einen Pfad angeben.2. Wenn die Hilfe aufgerufen wird, kann diese nicht abgebrochen werden. Das Programm auch nicht. Man benötigt den Taskmanager.
Hatte ich als nicht so schlimm angesehen, stimmt aber. Ich lasse mir etwas einfallen um diese abzubrechen (2. Button)
Danke für das Testen!
-
Bugs: Das $ am Ende war was fehlte, ein (?m) braucht es glaube ich nicht.
Die Vorschau/Test meines RegExBuddy war diesmal auch nicht wirklich hilfreich.Ich würde die ASCII-Art Funktionskommentare rausnehmen. Die sorgen nur dafür das das Script unnötig groß wird
Naja, ich programmiere (oder besser: Skripte) in vielen Sprachen - SciTE Jump ist immer das erste was ich starte, doch den habe ich eben nur in SciTE (welches ich liebe und schätze), sonst schreibe ich in Notepad++
Solange die ASCII-Banner das Programm nicht langsamer machen ...
Ist aber eindeutig Geschmackssache - genau wie das ich die Funktionen immer oben habe (habe ich mir wohl bei VB so angewöhnt)Insbesondere, wenn so viele externe Ressourcen eingebunden werden, würde ich sie in ein weiteres Script einlagern
Das klingt sinnvoll, auch wenn ich immer gerne alles in einem Script habe
3. An einigen Stellen sieht man noch sehr ähnlichen Code mit nur geringfügig geänderten Variablewerte,...
Tja, das ist immer der Punkt wo ich bei anderen Staune wie die das wieder so klein / kurz hinbekommen haben ( neben dem Stauen was für Funktionen die ausgegraben haben)
Wobei - 213 bis 241: Mein Funktion für die "Button aktiv/nicht aktiv" ist 3 Zeilen kürzer als die von Oscar - dem stehen 0 Kommentare bei Oscar und 7 Zeilen bei mir. Und ich habe noch die Zusatzfunktion mit den optischen Rahmen drin und die Platzraubende If-Then Schreibweise -
Vor ein paar Tagen bin ich auf FotoSort von @Oscar gestoßen.
Ich sortiere regelmäßig viele Bilder in verschiedene Verzeichnisse. Bisher habe ich dazu ACDSee als Bildbetrachter auf dem einem Monitor und 4 geöffnete Datei-Explorer mit den Zielordnern auf der anderen Seite.Das war dann mit Oscars Programm viel einfacher - und fehlerfreier.
Warum?
Warum habe ich dann eine Neuauflage davon geschrieben?
Nun, FotoSort stammt z.B. aus 2013. Damals hatte noch nicht jeder hochauflösende Monitore. Nun war mir z.B. die feste Fenstergröße von FotoSort zu klein.
Mit Größenanpassung wäre doch schön.
5 Pfade sind auch wenig - gerade wenn man dank Größenanpassung mehr Platz hat ...Außerdem war es ein gutes Projekt um zu lernen - meine erste GUI mit gelungener Größenanpassung, das erste mal Drag'n Drop, Mausrad, GUI mit Transparenz ... und vieles mehr. Ich schreib sonst fast nur Kommandozeilentools für die DOS-Box.
Features:
- Größe des Fenster anpassbar + maximiert
- Anzahl der Zielordner nur von der Bildschirmauflösung abhängig
- Bild vor/zurück auch per Mausrad
- Drag'n Drop für alle Pfade und das aktuelle Bild mit Pfaden und Dateien
- Neben Kopieren auch Verschieben des Bildes
- Suffix für Umbenennen frei wählbar
- Bildliste ist alphabetisch sortiert
- Nachfragen Dialog mit Bildvorschau wenn Datei schon vorhanden
- Sicherung der letzten Sitzung
- Hilfe
- Dateiliste als TXT ausgeben
- Optisches Feedback von dem was man zuletzt gemacht hat
- Direkte Tastenbedienung (1, 2, 3 ...) für Kopieren, mit zusätzlich Alt verschieben, Entf für Löschen (in Papierkorb)
Noch zu tun (Features):
auch animierte GIF anzeigen- GUI DPI Anpassung (ist im Quellcode, hat aber nicht funktioniert, Windows hat bei mir einfach alles gezoomt)
Bugs:
Dateisuche findet nicht nur Test.jpg sondern auch Test.jpg.txt- Windows 7: Wenn man auf Start oder Ende klickt geht das Mausrad nicht mehr. Ein Bild weiter geht es wieder?
- Das Verhalten der Vorschau bei der Größenänderung der GUI ist von Rechner zu Rechner höchst unterschiedlich (funktioniert im Endeffekt aber)
Die Einstellungen werden in der Registry gespeichert. Der Reset-Button löscht diese Einträge wieder.
Screenshots:
FotoSort2017_01.pngFotoSort2017_02.pngFotoSort2017_03.pngFotoSort2017_04.pngFotoSort2017_05.png
Als Download findet Ihr zum einen nur die -au3 als auch eine .zip welche zusätzlich das Programm-Icon und eine ausführbare .exe enthält
Danksagungen:
- @Oscar für die Idee, zu viele der Funktionen um diese aufzuzählen - und insbesondere der Funktion _GuiCtrlSetImageEx() welches im Grunde die ganze Arbeit macht
- @UEZ für weitere viele Funktionen - und seine Geduld bei dämlichen Fehlern meinerseits
- @Kanashius für die _ARGB2RGB()
- https://autoit.de für viele Lösungen meiner Probleme
- https://www.autoitscript.com für weitere Lösungen
- https://www.google.de ohne die ich die Dinge in den vorherigen beiden nicht gefunden hätte
Nachwort:
Puhh, gefühlt waren da teilweise einige Klimmzüge von Nöten damit das Programm das macht was es soll. Gerade die Reaktionen der Messages haben sich teilweise ganz verändert nachdem ich etwas neues eingebaut hatte. Nun bin ich froh endlich diesen Stand erreicht zu haben - und freue mich auf die "Animierte GIF" Umsetzung.Nun bin ich gespannt auf Fehler die Ihr findet - und auf Verbesserungsvorschläge.
Und vielleicht ist dem einem oder anderen das Programm auch einfach nur genauso nützlich wie mir.BLinz
Update 28.09.2017:
Neue Version mit der Unterstützung von animierten GIF,
Verhält sich nicht immer perfekt beim Wechseln der "Engine" für die Darstellung.
Und manchmal Komisch bei intensiver Größenänderungen + schnellen Bildwechseln (z.B. per Mausrad)
=> 3-geteilt inclusive GIFAnimation.au3 und xResources.au3
-
Das hatte ich auch schon.
Eine Möglichkeit ist VNC statt RDP zu nehmen, es muss dann die Consolen-Sitzung seinOder du probierst das hier aus: https://blog.smartbear.com/software-quali…ws/?printable=1
Den Schlüssel kann man auch pro Benutzer setzen - sprich du kannst diesen in dein Programm mit einbauen.Ich weis aber nicht ob das sofort geht oder erst nach der nächsten Anmeldung
-
ist dein Freund.
Mist. Steht natürlich im eigentlichen Script weiter unten.
Ich werde mir angewöhnen den nach oben zu schreiben ...Ist ja nicht so das ich nicht schon gefühlte 100 mal darauf reingefallen bin ...
-
Ich bräuchte mal einen Tipp wie ich deine Funktion für ein Icon in einer Statusbar nutzen kann. So wie bei dem Systray-Icon klappt es nicht.
Das Icon in der Datei hat alle gängigen Auflösungen drin (von 16x16 bis 256x256)
Anbei ein nicht funktionierendes Beispiel:AutoIt: AutoIt
Alles anzeigenAutoItSetOption("GUIOnEventMode", 1) #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GuiStatusBar.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GDIPlus.au3> $h_FormTest = GUICreate("Test", 300, 200, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_TABSTOP), $WS_EX_ACCEPTFILES) GUISetOnEvent($GUI_EVENT_CLOSE, "_Close") $id_StatusBar = _GUICtrlStatusBar_Create($h_FormTest, -1, "", BitOR($WS_VISIBLE,$WS_CHILD,$WS_BORDER)) _GUICtrlStatusBar_SetMinHeight($id_StatusBar, 22) Local $id_StatusBar_PartsWidth[3] = [100, 200, -1] _GUICtrlStatusBar_SetParts($id_StatusBar, $id_StatusBar_PartsWidth) ;Anfangstext in die einzelnen Abschnitte der Statusbar setzen _GUICtrlStatusBar_SetText($id_StatusBar, "Eins", 0) _GUICtrlStatusBar_SetText($id_StatusBar, "Zwei", 1) _GUICtrlStatusBar_SetText($id_StatusBar, "Drei", 2) Global $_Resources_Warndreieckico = _GDIPlus_BitmapCreateFromMemory(_Resources_Warndreieckico(), False) Global $h_Icontest = _GDIPlus_HICONCreateFromBitmap($_Resources_Warndreieckico) _GUICtrlStatusBar_SetIcon($id_StatusBar, 0, $h_Icontest) GUISetState(@SW_SHOW, $h_FormTest) While 1 WEnd Func _Close() Exit EndFunc Func _Resources_Warndreieckico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $_Resources_Warndreieckico $_Resources_Warndreieckico &= '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' $_Resources_Warndreieckico &= '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' $_Resources_Warndreieckico &= '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' $_Resources_Warndreieckico &= 'so/2Bn5UYPgA3YfYeLenC9ggStQAjIgACQT8AJLciPF5/1dGAI4YH7UDyHbkABf4EfAHNOmIIPDQBpB5gCYj4ADvUeWVk2ETGABp/8BROoDsogC9gR8Bf181LwCeHTtifCgDcADGDb1zi/ZqigBDP8CPgH+gygAz02q/XfMfWgAfdkR4WIqziQD2Bv7JV/v1BwCWOxLwD6PWxQA3dOf7H7S39wCzn9kbE3cATgC0d91/7g/85gDDf7BfkvZPOAA3/78jbi8H3wAODkrAbzD8HgCbvSPCXxz3fwCmjoE/m33+gACfdQP/WPrqHwD+faT9A4+z9hD0o72BwQTYar8APVrEeGlA9a8AK+1ob+Bn3cAAP5EiRoQHRoxAl46p/p4SwUDWAA38sWiUiPFSIJ/q31GawE/PugCBPzZVXjkZNYAi3BmlA0gvgGMAWTfwx66Nd4cQixgv9QAOWyS6AM8f8LNu4E9EAOWZ6fAuwpEjIMJRHUA6RA9RRQCMCF8faACpRQB7Az/rBv7ENQBMxHi4A/jEuxiQkFRAUAEOTY2lAvkADp9EGoAz9QAXOPcHfuAHfgB74Xd/YOtCzwC1gNmoDiBwgQAg9uoP/Kwb+AAzWXPoLcEA6wB+A/A+7js3dxA63nN/QTOf2ZoAyzMnwtuIr0cAGcCS/+IB8AMAP/DbD7/fBKIAWPcbQN39R7UEegYBL+cEfknhAM8H1KMMwNOzBGcvQUx/jtb87AD5y8jjfgO45TD+Y2dnQNkACmjNADu7AaZvRRnAIP8dffNTQhmjNQDv7P6oKNb9BgBw038KsLPzFAHDFP5nzwOn9TcAewxgc1s3paNArYPu/OfvQV6/AO1rPpDu/PYHAP+RXYf1ng5AAJL+1v3H3XuPBQB5E4E/txj+vR8Af9bdB48jGY8AMoAv/Xe++fUC74Elv6XwS9I3AN890CDGAwawALmt+/LtJf7wQOH/Dj4VAGE1xgC+Tu58/996+ACHJ/6v3HAY7wDbAUjS5/5rAQDf/vp3unvvEQHCCwj+uw8e69sA7wKs7zpsBxQAmQvg7Bzy9/6AY2vtJbVXl+IMAOHwf/vdA935AP6H8Fd/4b/4ADfQABwT6Cq0AINIpXJKa6vnAJLZJwCIgB/4ACd6ndx98Fi3AP/jofZ+/Dn8ANVPN7ejY8KOAEsG6uowaXQ2AGwEb9VeU3XhAIxmZqZVLk+HED9tBERgcAmu2QB9b//585d69AD4j/qv3z+JAgB/V9Ln/eA/1gHgDFh3OoF1IYQAbNEtp/LfGvQATVPDPprTDWwASf1TRhBCmesAvqQvB1X9sQwAwGcEH0v6S6cAI6ArQMiMan8AS9LfbW4HB30gEEIIIYSLAFQcAP0/rgwZejGrCKNJAAAASUVORKCuQmCCKGABQGAA4oBgAAEAIEEDHwAfAP8fAB8AHwAfAB8AHwAfAB8APx8AHwAfAB8AHwAZAGmj6hBgAJ9gAP9/AH8AfwD/fwA/AD8APwA/AD8AMgCxDvoQ+A/PPwI/AD8APwA/AP8/AD8APwA/AD8APwA/AD8AFTYAz7QPUDUBI5vWAP82t/P/PcH+az8APAA8NQDAPwA9ADstNQC/PwA9ADo/AP861r4/ADUAOT0AvT8ANQCAMbPz/yCY1jkQBbEPgLEADHq0/z78wv42AD8PPwA/ED8APxB/PwA/ED8Avw8/ED8QPwA4cTAAC3m09Q+xD/IPBMBvqf86vPg/ED8A/z8QPxA/AD8QPwA/ED8QPwAHPxA/EDYANbj4/wQUbqn5DyD1IB+W0f/6Dz8QPwA/ED8APxD/Dj8AH/8PPxA/ED8QOwAdk9H/+S+DgbRfPyA/ED8APxA/AP8/ED8QPwA/ED8QPxA/EL8fFzRg918xIO9xAReKxT/+Dz8QPwA/ED8ANQA2xfj//zU/AP8PPxA/ED8A4z8Q9A8VicW1D7EOS6H/dEAxADFgPxD/Dj8APxA/AAfzDxAHNgBesgAAAAD/NcX//6g7' $_Resources_Warndreieckico &= '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' $_Resources_Warndreieckico &= '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' $_Resources_Warndreieckico &= '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' $_Resources_Warndreieckico &= '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' $_Resources_Warndreieckico &= 'FqtKtgNfIAADrwQDIE5fETQA////jgmAAAEBggHAAAMA4AAHEYIB8AAPggH4AB8RggH8AD+CAf4Af9QA/4UAgYQBw4QBgC2aKIAnFIABgQMBABh7D4G5g+vBAcES7xuQy1D/PcH+xgA8wQDAqccAO7/HADrFAL7DAAI5wQC9/v8ZjssFwRPvwACABG+p/3g2t/PWFIFTwQDVFDJAs/P/BG6pwROAAcQ83xeKxf8+wo/HE8kUzRPNFBaJxcESit/IUGDBPzKx7dYUUdU+L6/txU5gzWUQvH+6whPNFMUn0RQPwAzj0tHE8i+s584UzRPFFPwsqnx+ZHflCWUK5glsHwwLeXx8Y3X/J6Hcx2oK5QnpKSaf3GUTe3oAaaOfCHSu/z9+w/MJZQphBGEF/4liFO8YIJbRZgrtCR+V0Y9lV/+NYwpiXDu9+GIKw+UJYQs6vPj/YQNmV+sfAOEJEOEPHOBw4QlpHzthc2QTEB8JagpiXDe4PvNmCmFyclcfAGUK3xh8i8XmCWEB6mofAO0JUA3w1VAfB/vTEIC6//9hAP/THwDlcH/pHwBsUn9NLx8AHwAPAPhrEDIAwACiMDIA4ABwMgDwFAAE+AEzAPwD8AD+UgczAP8PNACfMAD//vDyaoEpwQx/a7sj/2c/ABc/ADIAsQPf8VUuq+c9NgAt8E41ALFPNgCp5+T/KzQADn5yIPEDNl/n+l7/Y3ZjL668Xjhe/1338AO4XTEED7MHNyg8XX0I/3Jcv1w7J3CRsU//W/hlMAD6B/NRr38YP1v6Wr9aDwDHNFrxT/0DObv4v1n/A//yTjVZ+QO4WP9OP1gyCPUD/79XDwA/VzdXv1YPAD9WM1YPMQC/VQ8APwSj3xSF/L//MQC/VA8A/wP/SQ8A+w8APARwMgAPAA8ADwAPAEsPAHtHATMAwAMzAOASBzMA8A8zAPgfAEgA/D8zAP5/sbcAAAA=' $_Resources_Warndreieckico = _WinAPI_Base64Decode($_Resources_Warndreieckico) Local $tSource = DllStructCreate('byte[' & BinaryLen($_Resources_Warndreieckico) & ']') DllStructSetData($tSource, 1, $_Resources_Warndreieckico) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 48348) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Warndreieck.ico", 18) If @error Then Return SetError(1, 0, 0) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>__Resources_Warndreieckico Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize) $tOutput = DllStructCreate("byte[" & $iBufferSize & "]") If @error Then Return SetError(1, 0, 0) Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0) If @error Then Return SetError(2, 0, 0) If $aRet[0] Then Return SetError(3, $aRet[0], 0) Return $aRet[6] EndFunc ;==>_WinAPI_LZNTDecompress
Danke schon mal!
BLinz
-
Das ist übrigens unerwünscht. Hat der angemeldete Benutzer keine Adminrechte soll die Anwendung/Datei nicht aufgerufen werden. Der Benutzer soll dann auch nicht gefragt werden. Stattdessen soll eine Meldung erscheinen dass Adminrechte nicht vorhanden sind.
Wäre es nicht einfach die Excel-Datei dort abzulegen wo dann auch nur berechtigte Personen rankommen? Microsoft hat sich ganz viel Mühe mit Dateisystemberechtigungen gemacht.
Einfach in einen Ordner oder Freigabe wo nur die rankommen die auch die Datei nutzen sollen.Klar kannst du das so machen, klingt nur umständlich um den Zugriff nur auf bestimmte Benutzer einzugrenzen.
Und wenn es mindestens Excel 2010 und das Passwort ausreichend lang ist gilt die Excel-Verschlüsselung prinzipiell als (ausreichend) sicher -
Hallo erst einmal,
mit
Startest du ja als aktuell angemeldeter Benutzer das Programm. Entweder ist der schon Admin oder nicht.
Seit Windows 7 wird das Programm dank mit UAC-Kontolle in der Regel doch ohne Admin-Rechte gestartet.Einfach Lösung:
Als erste ZeileDann kannst du auch den "normalen" Run-Befehl nehmen ohne Benutzerangabe
Bei Run() solltest du immer den ganzen Pfad zum zu startenden Programm angeben.Statt Run kannst du auch ShellExecute() nehmen. Der Befehl prüft was er bekommt und startet das zugehörige Programm.
Klingt verwirrend ...Dem Befehl kannst du gleich die Excel-Datei mitgeben. Das ist dann als ob du einen Doppelklick auf die Excel-Datei gemacht hast
Zusammen mit #RequireAdmin hättest du als 2-zeiler alles was du willst:Hat der ausführende Benutzer keine Adminrechte so poppt die UAC-Kontrolle auf und fragt.
Ist es nur ein normaler Benutzer geht sogar die Benutzerauswahl / Benutzername und Kennwort-Dialog auf.