Ließt du eigentlich was wir oben geschrieben haben??
Beiträge von Madara
-
-
Hallo,
Ich präsentiere mein ersten Skriptrelease: WebcamSnapshotter.
Mit WebcamSnapshotter lassen sich im Handumdrehen Webcam-Schnappschüsse erstellen, ohne
großen Aufwand.
WebcamSnapshotter listet alle Webcams in einer ComboBox auf, der Benutzer kann die gewünschte
Webcam selektieren, und ein Schnappschuss wird erstellt.
Hierbei wird auf eine C-Dll verwendet (http://sol.gfxile.net/escapi/index.html).
Es werden Directshow APIs verwendet, um professionell mit der Webcam kommunizieren zu können.
Der Schnappschuss wird in dem Verzeichnis gespeichert, in dem WebcamSnapshotter gestartet wurde.
Ein Dankeschön an trancexx von autoitscript.com für die Subrogation.au3.Features:
- Schnelle Webcamschnappschüsse erstellen
- Professionelle Webcamverwendung durch DirectShow API's
- Keine Zusatzdateien notwending, Dll's werden im Speicher verwendet und nicht extrahiert --> Standalone executable
- Einfache Auswahl der Webcam per ComboBox
- Schnappschüsse werden im .jpg Format gespeichert --> Geringe Dateigröße im vgl zu .png Bildern.
- Keine Probleme mit Video-Source-Popups!
[Blockierte Grafik: http://s7.directupload.net/images/140102/83mycfpz.gif]
Version: 1.0
Author: Madara (aka Madara-Uchiha)
Credits: trancexxBitte gebt Credits falls ihr mein Programm verwendet.
Konstruktive Kritik ist erwünschtAn alle die eine kleine DeviceList wollen
[autoit]#include <ButtonConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>$KnownCams = GUICreate("Webcam Device List", 363, 281, 110, 124)
[/autoit][autoit][/autoit][autoit]
$ListView1 = GUICtrlCreateListView("Webcam Device Name|Light|Popup", 8, 8, 346, 238)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 202)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 70)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 70)
$ListView1_0 = GUICtrlCreateListViewItem("1.3M WebCam|No|No", $ListView1)
$ListView1_1 = GUICtrlCreateListViewItem("1.3M HD WebCam|Yes|No", $ListView1)
$ListView1_2 = GUICtrlCreateListViewItem("Namuga 1.3M Webcam|No|No", $ListView1)
$ListView1_3 = GUICtrlCreateListViewItem("Rocketfish HD Webcam Lite|Yes|No", $ListView1)
$ListView1_4 = GUICtrlCreateListViewItem("USB 2.0 Camera|No|Yes", $ListView1)
$ListView1_5 = GUICtrlCreateListViewItem("USB 2.0 UVC HD Webcam|No|No", $ListView1)
$ListView1_6 = GUICtrlCreateListViewItem("USB-Videodevice|Unknown|No", $ListView1)
$ListView1_7 = GUICtrlCreateListViewItem("WebCam SC-0311139N|No|No", $ListView1)
$ListView1_10 = GUICtrlCreateListViewItem("WebCam SCB-1900N|No|No", $ListView1)
$ListView1_11 = GUICtrlCreateListViewItem("1.3M Integrated Webcam|Yes|Yes", $ListView1)
$ListView1_12 = GUICtrlCreateListViewItem("A4 TECH USB2.0 PC Camera|Yes|No", $ListView1)
$ListView1_13 = GUICtrlCreateListViewItem("Asus built-in Webcams|Yes|No", $ListView1)
$ListView1_14 = GUICtrlCreateListViewItem("BisonCam, NB Pro|Yes|No", $ListView1)
$ListView1_15 = GUICtrlCreateListViewItem("Chicony USB 2.0 Camera|Yes|No", $ListView1)
$ListView1_16 = GUICtrlCreateListViewItem("Compaq Presario CQ60|Yes|No", $ListView1)
$ListView1_17 = GUICtrlCreateListViewItem("HD WebCam|Yes|No", $ListView1)
$ListView1_18 = GUICtrlCreateListViewItem("HP Pavilion Webcam|Yes|No", $ListView1)
$ListView1_19 = GUICtrlCreateListViewItem("Lenovo EasyCamera|Yes|No", $ListView1)
$ListView1_20 = GUICtrlCreateListViewItem("Logitech C270 HD|Yes|No", $ListView1)
$ListView1_21 = GUICtrlCreateListViewItem("Logitech C310|Yes|No", $ListView1)
$ListView1_22 = GUICtrlCreateListViewItem("Logitech C910 HD|Yes|No", $ListView1)
$ListView1_23 = GUICtrlCreateListViewItem("Logitech c920 HD|Yes|No", $ListView1)
$ListView1_24 = GUICtrlCreateListViewItem("Logitech QuickCam|Yes|No", $ListView1)
$ListView1_25 = GUICtrlCreateListViewItem("Microsoft Lifecam|Yes|No", $ListView1)
$ListView1_26 = GUICtrlCreateListViewItem("Microsoft Lifecam VX-3000|Yes|No", $ListView1)
$ListView1_27 = GUICtrlCreateListViewItem("PS3 Eye Camera|Yes|No", $ListView1)
$ListView1_28 = GUICtrlCreateListViewItem("Sony Webcams|Yes|Yes", $ListView1)
$ListView1_29 = GUICtrlCreateListViewItem("Toshiba Web Camera|Yes|No", $ListView1)
$ListView1_30 = GUICtrlCreateListViewItem("TrueVision HD|Yes|No", $ListView1)
$ListView1_31 = GUICtrlCreateListViewItem("USB2.0 UVC 2M|Yes|No", $ListView1)
$ListView1_32 = GUICtrlCreateListViewItem("CyberLink YouCam|Yes|Yes", $ListView1)
$ListView1_33 = GUICtrlCreateListViewItem("WC060 Series SWEEX HD|Yes|No", $ListView1)
$ListView1_34 = GUICtrlCreateListViewItem("Webcam SC-13HDL11939N|Yes|No", $ListView1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd -
Ja. So:
[autoit]#include <Security.au3>
[/autoit][autoit][/autoit][autoit]
#include <WinAPI.au3>#RequireAdmin
[/autoit][autoit][/autoit][autoit];Debug-Privlegien holen...
[/autoit][autoit][/autoit][autoit]
Local $hToken = _Security__OpenProcessToken(_WinAPI_GetCurrentProcess(), $TOKEN_ALL_ACCESS)
_Security__SetPrivilege($hToken, $SE_DEBUG_NAME, True)
_WinAPI_CloseHandle($hToken);Escape-Funktion registrieren
[/autoit][autoit][/autoit][autoit]
HotKeySet("{ESC}", "_Escape");Critical-Flag auf <TRUE> setzen
[/autoit][autoit][/autoit][autoit]
_WinAPI_SetProcessIsCritical(True);Hauptschleife
[/autoit][autoit][/autoit][autoit]
While True
Sleep(20)
WEndFunc _Escape()
[/autoit][autoit][/autoit][autoit]
;Critical-Flag auf <FALSE> setzen
MsgBox(0, "", _WinAPI_SetProcessIsCritical(False))
Exit
EndFuncFunc _WinAPI_SetProcessIsCritical($bState)
[/autoit]
$avReturn = DllCall("ntdll.dll", "int:cdecl", "RtlSetProcessIsCritical", "boolean", $bState, "ptr", 'none', "boolean", False)
Return $avReturn[0]
EndFunc -
Das ist aber nur bei der Verwendung der RtlSetProcessIsCritical-API.
Da versucht wird sogar im Admin-mode den Prozess zu schützen. --> BSOD bei Kill.
Wenn du die CriticalFlag mit der NtSetInformationProcess-API zuweist gibts nur ne Usermode Protection, also bei einem Nichtadmin kommt bei einem versuchten Prozesskill diese Meldung:[Blockierte Grafik: http://s14.directupload.net/images/140101/ohw27fgh.png]
Bei einem Administrator beendet sich nach einem Prozesskill die Anwendung normal, ohne BSOD.
Kannste ja mal probieren zu scriptenEdit:
[autoit]
Ich habs mal Mit NtSetInformationProcess probiert, aber iwie klappt es nicht, der Prozess kann normal gekillt werden...
Der DllCall muss falsch sein...?#include <WinApi.au3>
[/autoit][autoit][/autoit][autoit]
#include <Security.au3>
#RequireAdmin;Get Debug Privileges
[/autoit][autoit][/autoit][autoit]
Local $DebugToken = _Security__OpenThreadToken(_WinAPI_GetCurrentProcess(),$TOKEN_ALL_ACCESS)
_Security__SetPrivilege($DebugToken,$SE_DEBUG_NAME,True)
_WinAPI_CloseHandle($DebugToken)Func _NtSetInformationProcess_ProtectProcess()
[/autoit][autoit][/autoit][autoit]
ConsoleWrite('Protecting Process...' & @LF)
$StateReturn = DllCall("ntdll.dll","int", "NtSetInformationProcess","handle",_WinAPI_OpenProcess(512,False,ProcessExists(@ScriptName)),"int",29,"ptr*",1,"long",4)
Return $StateReturn
EndFunc_NtSetInformationProcess_ProtectProcess()
[/autoit][autoit][/autoit][autoit]While True
[/autoit][autoit][/autoit][autoit]Sleep(20)
[/autoit][autoit][/autoit][autoit]WEnd
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit] -
Um ein Prozess-Beenden durch den Taskmanager zu verhindern, müsstest du entweder:
a) NtTerminateProcess Hooken (Prozess-Status kannste mit ZwQueryProcessInformation in der ProcessBreakOnTerminationClass prüfen.)
b) Deinem AutoIt process mit dem API Call RtlSetProcessIsCritical eine Critical-Flag zuweißen.
c) Deinem AutoIt process mit dem API Call NtSetInformationProcess eine Critical-Flag zuweißen.
d) Andere Native Methoden anwenden, das geht mit AutoIt aber nicht, da wird C/C++/ASM benötigt...Viel Erfolg.
-
Hallo,
Ist es möglich dynamisch die ItemID eines Items in dem SysListView32 zu bekommen, also sprich, per Name.
Nehmen wir an ich habe ein normales explorer Fenster geöffnet, und möchte die ID des Items HelpPane.exe haben.
Wie mach ich das am besten?[Blockierte Grafik: http://s1.directupload.net/images/131230/dfvjyz7l.png]
-
Perfekt, danke
-
Ok, ich habs nochmal richtig formatiert.
Ist es iwie möglich die gewünschten Einträge als Array zurückzugeben?
Also Array[1] beeinhaltet eben NameDes1Programms|||HerstellerDes1Programms|||VersionDes1Programms|||UninstallStringDes1Programms~~~
Und Array[2] beeinhaltet eben NameDes2Programms|||HerstellerDes2Programms|||VersionDes2Programms|||UninstallStringDes2Programms~~~
usw, usw.
Wie mach ich das am besten? -
Meine function sieht jetzt so aus:
[autoit]ShowInstalledSoftware()
[/autoit][autoit][/autoit][autoit]func ShowInstalledSoftware()
[/autoit][autoit][/autoit][autoit]
$AppArray = ''
Do
$act_key = RegEnumKey ($key, $count)
If @error <> 0 then
$abort += 1
$count = 1
$key = $main_key64
Else
$count = $count + 1
$act_name = RegRead($key & '\' & $act_key, "Displayname")
$act_name = StringReplace ($act_name, " (remove only)", "")
if stringinstr($act_name,"Security Update") then continueloop
if stringinstr($act_name,"Update for Microsoft") then continueloop
if stringinstr($act_name,"Hotfix for") then continueloop
if stringinstr($act_name,"Service Pack") then continueloop
If $act_name <> "" And Not StringInStr($all_keys,"|" & $act_name & "|") Then
$dontShow = RegRead($key & '\' & $act_key, "SystemComponent")
If not $dontShow then
$Publisher = RegRead($key & '\' & $act_key, "Publisher")
$Version = RegRead($key & '\' & $act_key, "DisplayVersion")
$UninstallString = RegRead($key & '\' & $act_key, "UninstallString")If $Publisher = '' Then
[/autoit]
$Publisher = 'Unknown Publisher'
EndIf
If $Version = '' Then
$Version = 'Unknown Version'
EndIf
If $UninstallString = '' Then
$UninstallString = 'No Uninstaller found'
EndIf
ConsoleWrite($act_name & ' ||| ' & $Publisher & ' ||| ' & $Version & ' ||| ' & $UninstallString & '~~~' & @CRLF)
Endif
If $dontShow = 1 Then ContinueLoop
$all_keys = $all_keys & $act_name & "|"
$foundItems += 1
EndIf
EndIf
Until $abort = 2
ConsoleWrite ("Einträge: " & $foundItems & @CRLF)
EndFuncIch versuche gerade das ganze als array zurückzugeben, kriegs aber nicht wirklich hin...
-
Ok, danke
Ich versuche das ganze jetzt noch als Function zu verpacken, ich melde mich hier wenn ich fertig bin. -
Das scheint soweit zu funktionieren, wäre nett wenn du noch erklären könntest wie genau das funktioniert, damit ich es auch verstehe
-
misterspeed
Danke das ist auf jeden Fall schonmal ein Fortschritt.
Bei mir werden allerdings auch noch Manche Einträge in verschiedenen Sprachen aufgelistet:[Blockierte Grafik: http://s7.directupload.net/images/131228/5wxp7yf3.png]
Wie wäre das zu lösen?
Ich wüsste nicht wie ich das realisieren kann, da hier ein simples StringInStr nicht sehr hilfreich ist.
Und in der Systemsteuerung werden ja auch keine Einträge in unterschiedlichen Sprachen angezeigt... -
Hallo liebe Community.
Ich bin neu hier und hoffe das ich hier richtig bin
[autoit]
Ich habe ein kniffliges Problem.
Zuerst mal, was möchte ich eigentlich machen?
Ich würde mir gerne die installierten Programme auf meinem Computer auslesen.
Das ist nicht das Problem, da man dies sehr leicht über die Registry erreichen kann.
Aber wenn es so einfach wäre, würde ich ja nicht hier posten
Das Problem ist folgendes:
Beim auslesen gibt es viele Einträge (z.B. Windows Live Messenger etc mehrfach!)
Ich verwende aktuell dieses Skript:
[/autoit]
#include <GUIConstants.au3>
$gui_width = 500
$gui_height = 600
Global $count = 1, $all_keys = "", $main_key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
GUICreate("Installed Software", $gui_width, $gui_height, @Desktopwidth/2 - $gui_width/2, @DesktopHeight/2 - $gui_height/2 - 75)
$gui_list = GUICtrlCreateList ("", 10, 10, $gui_width - 20, $gui_height - 20)
GUISetState ()
While 1
$act_key = RegEnumKey ($main_key, $count)
If @error <> 0 then ExitLoop
$act_name = RegRead ($main_key & "" & $act_key, "Displayname")
$act_name = StringReplace ($act_name, " (remove only)", "")
If $act_name <> "" Then $all_keys = $all_keys & $act_name & "|"
$count = $count + 1
WEnd
GUICtrlSetData ($gui_list, $all_keys)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WendHier kann man erkennen das es mehrere Einträge vielfach gibt:
[Blockierte Grafik: http://s7.directupload.net/images/131228/cwcwv9kq.gif]
Ich habe vieles versucht, auch die Einträge aus der Registry auszulesen, selbes Problem.
Allerdings, wenn man mal in die Systemsteuerung schaut, fällt auf, das dieses Problem dort nicht auftaucht:[Blockierte Grafik: http://s7.directupload.net/images/131228/ymvpeawy.gif]
Kann mir jemand helfen die Installierten programme so auszulesen wie es in der Systemsteuerung auch gemacht wird?
Normalwerweise wird ja dieser Key verwendet:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Wo liegt das Problem?
WMI mit Namespace: root/CiMv2 in Class: Win32_Product hat nichts gebracht, gleiches Problem.
Kann mir jemand helfen?