Danke progandy, dann werde ich mal probieren das hinzubekommen.
Vielleicht kann ich ja einfach ein vorhandenes Plugin dazu umfunktionieren.
Ich melde mich hier, wenn ich ein Ergebnis habe. (Kann dauern, noch habe ich Null-Ahnung von C++ und Dll-Erstellung ;))
Beiträge von BugFix
-
-
Ich hab eher das Gefühl dass die Installation unvollständig
Das vermute ich auch.
Bei der Installation die richtige Reihenfolge beachten!
1. AutoIt Prod installieren
2. [optional] AutoIt Beta installieren
3. SciTE4AutoIt installieren (nicht das 'einfache' SciTE) -
Nach dem Lesen von unzähligen Dokus und Quelltexten bin ich auf die "PluginManager.dll" gestoßen. Diese enthält eine Funktion "setInfo" und bekommt als Parameter eine Struktur (NppData) mit 3 Handle übergeben.
Das sieht dann so aus:Spoiler anzeigen
[autoit]Local $tNppData = DllStructCreate( _
[/autoit] [autoit][/autoit] [autoit]
"HWND _nppHandle;" & _
"HWND _scintillaMainHandle;" & _
"HWND _scintillaSecondHandle;")Local $hDll = DllOpen(@ProgramFilesDir & "\notepad++\plugins\pluginmanager.dll")
[/autoit] [autoit][/autoit] [autoit]
If @error Then
Exit ConsoleWrite('DllOpen Error: ' & @error & @LF)
Else
ConsoleWrite('DllOpen: OK' & @LF)
EndIfLocal $ret = DllCall($hDll, 'int:cdecl', 'setInfo', 'ptr', DllStructGetPtr($tNppData))
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit ConsoleWrite('DllCall Error: ' & @error & @LF)
DllClose($hDll)ConsoleWrite('_nppHandle: ' & DllStructGetData($tNppData, 1) & @LF)
[/autoit]
ConsoleWrite('_scintillaMainHandle: ' & DllStructGetData($tNppData, 2) & @LF)
ConsoleWrite('_scintillaSecondHandle: ' & DllStructGetData($tNppData, 3) & @LF)Jedoch wird bei meinem Aufruf die Struktur nicht befüllt. Die Source für die pluginmanager.dll habe ich nicht finden können. Habe testweise statt 'ptr' mal 'int_ptr' verwendet, aber auch ohne Erfolg.
Also der Dll-Call ist erfolgreich, kein Fehler und ein Return > 0.
Nun hatte ich die Struktur als Fehlerquelle überprüft und dort mal "HWND" mit "HANDLE" ersetzt, auch ohne Erfolg.
Im Moment gehen mir da die Ideen aus. :wacko: -
Nimm zum Bsp. den Packer IZArc.
Du öffnest den Explorer, Rechtsklick auf Datei die hinzugefügt werden soll, als Ziel die *.jar auswählen und OK. Schon ist sie hinzugefügt. -
Kann ich denn beeinflußen und wie, wie die Daten in einem Array gespeichert werden ?
Ja, schau dir die Befehle: Number(), String().. etc. an. -
Zeig mal deinen bisherigen Code, sonst wird es ein Rätselraten.

-
Also das Abfragen des Scintilla Handle führt unweigerlich zum Crash von Notepad++.
Andere Aktionen, die das Scintilla-Handle nicht benötigen, funktionieren problemlos:Spoiler anzeigen
[autoit]#Include <SendMessage.au3>
[/autoit] [autoit][/autoit] [autoit]Local Const $WM_USER = 0x400
[/autoit] [autoit][/autoit] [autoit]
Local Const $NPPMSG = $WM_USER + 1000Local Const $NPPM_GETCURRENTSCINTILLA = ($NPPMSG + 4)
[/autoit] [autoit][/autoit] [autoit]
Local Const $NPPM_GETCURRENTDOCINDEX = ($NPPMSG + 23)
Local Const $MAIN_VIEW = 0
Local Const $SUB_VIEW = 1
Local Const $NPPM_GETMENUHANDLE = ($NPPMSG + 25)
Local Const $NPPM_ACTIVATEDOC = ($NPPMSG + 28)
;~ void $NPPM_ACTIVATEDOC(int view, int index2Activate)
Local Const $NPPM_GETWINDOWSVERSION = ($NPPMSG + 42)
;~ winVer $NPPM_GETWINDOWSVERSION(0, 0)Local $hNpp = WinGetHandle('[CLASS:Notepad++]')
[/autoit] [autoit][/autoit] [autoit]; Index (0-basiert des aktuellen Dokuments) ==> funktioniert
[/autoit] [autoit][/autoit] [autoit]
Local $iDocIndex = _SendMessage($hNpp, $NPPM_GETCURRENTDOCINDEX)
ConsoleWrite('@@ DEBUG_Line: ' & @ScriptLineNumber & ', Var: $iDocIndex >> ' & $iDocIndex & ' ; @error: ' & @error & ', @extended: ' & @extended & @LF) ; Debug To Console; Dokument vor dem aktuellen aktivieren ==> funktioniert
[/autoit] [autoit][/autoit] [autoit]
Local $ret = _SendMessage($hNpp, $NPPM_ACTIVATEDOC, $MAIN_VIEW, $iDocIndex-1)
ConsoleWrite('@@ DEBUG_Line: ' & @ScriptLineNumber & ', Var: $ret >> ' & $ret & ' ; @error: ' & @error & ', @extended: ' & @extended & @LF) ; Debug To Console; Menü-Handle abfragen ==> funktioniert
[/autoit] [autoit][/autoit] [autoit]
$hMenu = _SendMessage($hNpp, $NPPM_GETMENUHANDLE)
ConsoleWrite('@@ DEBUG_Line: ' & @ScriptLineNumber & ', Var: $hMenu >> ' & $hMenu & ' ; @error: ' & @error & ', @extended: ' & @extended & @LF) ; Debug To Console;=================================================
[/autoit]
; Scintilla-Handle abfragen ==> Exception Error !
Local $hScintilla = _SendMessage($hNpp, $NPPM_GETCURRENTSCINTILLA)
ConsoleWrite('@@ DEBUG_Line: ' & @ScriptLineNumber & ', Var: $hScintilla >> ' & $hScintilla & ' ; @error: ' & @error & ', @extended: ' & @extended & @LF) ; Debug To Console
Ich bekomme einen Exception Error und NPP bietet dann an, einen Dump zu speichern, was dann im Crash endet mit unzähligen Fenstern "Visual C++ Runtime Error".Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Danke progandy, dann werde ich dort mal weiterlesen.
-
Im Moment bastel ich an den Grundlagen um Abbrev und Autovervollständigung realisieren zu können.
Wenn du was übernehmen möchtest, warte vielleicht etwas, bis ich die Interaktion im Griff habe. Ohne das geht keines der beiden Probleme. Ich überlaß dir dann aber gern die Autovervollständigung. Abbrev-Management habe ich ja bereits mal gemacht und werde es hierfür umgestalten. -
Hi,
[autoit]
ich bastel ja gerade an der Verwendung von Notepad++ als AutoIt-Editor.
Nun benötige ich Interaktionen mit dem NPP-Fenster (Scintilla-Edit-Control). Scintilla verwendet einen eigenen Adressraum, somit kann man nicht mit WM_GETTEXT und WM_SETTEXT arbeiten. Dazu gibt es von Scintilla eigene Messages.
Ich habe jetzt mal ein Skript nachgestellt um den Text des aktuell offenen NPP-Fensters auszugeben. Aber schon die Abfrage der Textlänge bleibt ohne Erfolg.#Include <SendMessage.au3>
[/autoit][autoit][/autoit][autoit]Local $Wnd = WinGetHandle('[CLASS:Notepad++]'), $Len
[/autoit]
$Len = _SendMessage($Wnd, 2183, 0, 0) ; Rückgabe '0', kein Fehler
Hat jemand eine Idee? -
Ja, ist mir auch aufgefallen

Habe das jetzt abgefangen und ein Skript erstellt, das wahlweise Ausgabe in Konsole oder MsgBox erstellt.
Werde es gleichmal im ersten Post aktualisieren.Edit:
Habe wohl noch einen Bug in der Variablenerkennung (Debug). Einige Kombinationen werden nicht richtig erkannt.
Falls ihr auch was findet sagt Bescheid.Ahh.. >> Ich muß vor der Auswertung die Tabs in Zeichen umwandeln, dann paßt es.

Werde ich gleich mal ändern. -
Neu: Debug To Console
-
Wie gesagt ich suche nache einer 'schnellen' Datenbankabfrage
Bist du dir da sicher? Eine Datenbankabfrage lautet z.B. (als Pseudo-Abfrage):
Suche: KDNR, Name, Adresse, Telefonnummer
von: Tab_Kunden, Tab_Umsatz
wenn: Tab_Kunden.KDNR = Tab_Umsatz.KDNR und JahrVon(Tab_Umsatz.DATUM) = 2010
sortiert nach: KDNR
Dabei ist eine SQL-Datenbank unschlagbar. Als reinen Datenspeicher würde ich eine SQL-DB nicht mißbrauchen. -
Oder du nutzt Notepad++ als AutoIt-Editor.
Das Konsolen-PlugIn verhält sich genau so, wie du es willst.
-
Es kommt drauf an, was du mit den Werten anfangen willst. Eine komplexe SQL-Abfrage auf Array-Ebene umzusetzen ist sicher wesentlich zeitintensiver.
Wie gesagt: Der Verwendungszweck ist hier entscheidend.
Und warum MySQL? SQLite ist doch auch eine prima Alternative und bereits in AutoIt integriert. -
Ich habe mir bisher noch nicht angesehen, wie die Konsole angesteuert wird. Ich vermute aber, dass du hier mit LUA oder SciTECommands weiterkommst.
Hier mal der SciTECommands-Part aus Xenos OrganizeIncludes:Spoiler anzeigen
[autoit];===============================================================================
[/autoit]
; Description: Sending commands to SciTE interface
;===============================================================================
Func SendSciTE_Command($sCmd, $Wait_For_Return_Info = 0)
Local $WM_COPYDATA = 74
Local $WM_GETTEXT = 0x000D
Local $WM_GETTEXTLENGTH = 0x000E224
Local Const $SCI_GETLINE = 2153
Local $Scite_hwnd = WinGetHandle('DirectorExtension') ; Get SciTE DIrector Handle
Local $My_Hwnd = GUICreate('AutoIt3-SciTE interface') ; Create GUI to receive SciTE info
Local $My_Dec_Hwnd = Dec(StringTrimLeft($My_Hwnd, 2)) ; Convert my Gui Handle to decimal
$sCmd = ':' & $My_Dec_Hwnd & ':' & $sCmd ; Add dec my gui handle to commandline to tell SciTE where to send the return info
;~ ConsoleWrite('SciTE Command --> ' & $sCmd & @LF)
Local $CmdStruct = DllStructCreate('Char[' & StringLen($sCmd) + 1 & ']')
DllStructSetData($CmdStruct, 1, $sCmd)
Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr')
DllStructSetData($COPYDATA, 1, 1)
DllStructSetData($COPYDATA, 2, StringLen($sCmd) + 1)
DllStructSetData($COPYDATA, 3, DllStructGetPtr($CmdStruct))
DllCall('User32.dll', 'None', 'SendMessage', 'HWnd', $Scite_hwnd, _
'Int', $WM_COPYDATA, 'HWnd', $My_Hwnd, _
'Ptr', DllStructGetPtr($COPYDATA))
GUIDelete($My_Hwnd)
EndFunc ;==>SendSciTE_Command
;===============================================================================
; Description: Sending commands to SciTE interface
;===============================================================================
Func MY_WM_COPYDATA($hWnd, $msg, $wParam, $lParam)
Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr', $lParam)
Local $SciTECmdLen = DllStructGetData($COPYDATA, 2)
Local $CmdStruct = DllStructCreate('Char[255]', DllStructGetData($COPYDATA, 3))
$SciTECmd = StringLeft(DllStructGetData($CmdStruct, 1), $SciTECmdLen)
EndFunc ;==>MY_WM_COPYDATADas könnte dir als Ansatz helfen. Mußt 'nur' noch die erforderlichen Kommandos finden. (Scintilla Dokumentation)
-
Willkommen.
Aber mit deinem Nick hast du dir echt keinen Gefallen getan. Bots mögen wir, wie der Teufel das Weihwasser.
-
Wozu ein Programm? Kann doch ziemlich jeder Packer: ..dem Archiv hinzufügen - meist als Rechte-Maustastenmenü.

-
Hi Anna,
[autoit]
hier liegt der Hund begrabenFor $x = 1 to $aIP[0]
[/autoit]
$ip = ($aIP[$x])
Nextanalog in den anderen For-Schleifen.
Du durchläufst das Array und weist den Inhalt der Variablen $ip zu - aber machst dann nichts weiter damit. Somit hat die Variable nur den Inhalt des letzten Eintrages.
Du mußt also innerhalb der Schleife den sich ändernden Wert auch anwenden.
Gibt es für jede IP exakt einen Modellnamen und eine OID?
Dann brauchst du nur eine einzige Datei (und demzufolge nur ein Array). -
Aufrufeskripte erstellt für Check, Tidy, Run (Compile geändert).
Damit wird nur aufgerufen, wenn aktuelle Datei auch eine au3-Datei ist.
s. Post #1