Hallo, der ein oder andere kennt evtl. das Tool Visual Assisst X für die Visual Studio Entwicklungsumgebungen. Es handelt sich dabei um ein Tool, welches Code-Vervollständigung, Korrektur usw in die IDE integriert. Bei den neuen IDEs ist das evtl. nicht mehr ganz so wichtig, aber bei den alten IDEs wie MS Visual C++ 6 war das Gold wert!! http://www.wholetomato.com/ Meine Frage ist, ob jemand einschätzen kann, wie aufwändig soetwas nach zu programmieren ist. Ich habe gesehen das z.b. Visual C++6 eine PlugIn Schnittstelle anbietet, die wohl auch benutzt wird. Ist soetwas nur zu erreichen, wenn das "Wirt"programm dafür vorbereitet ist, oder kann man soetwas für jedes andere Programm implementieren(mit vertretbarem Aufwand)? Vielleicht kann das ja jemadn einschätzen? Ich kann programmieren, bin aber in Windowsprogrammierung nicht so fit. Aber evtl. sind die Grundfunktionen ja gar nicht so aufwändig? Ich würde gerne eine IDE etwas in der Hinsicht erweiteren um z.b. Variablen zu vervollständigen usw. Um die Funktionalität ansich mach ich mir nicht so die Sorgen, aber ich kann schlecht einschätzen wie aufwändig die Interaktion meines Programms mit dem anderen wäre und wo man da ansetzt. Es geht im Endeffekt darum, den Text an der Cursorposition zu analysieren, und dann irgendwas zu tun, Dieses Visual Assist X bindet sogar ganz neue Menus in die Visual IDE ein usw. aber so aufwändig will ich es ja gar nicht haben
Ohne passende Schnittsstelle geht das eher schlecht.
äh...das ist nicht die Antwort die ich mir erhofft hatte ;P Generell oder die Geschichte mit den Menüs einbinden?
Generell. Das Menü ist zweitrangig, Du wirst alleine schon Probleme damit haben, an den dargestellten Text zu gelangen. Schreib mal als Übung einen Texteditor. In reinem C mit der Win32-API. Kein C++, keine Klassenbibliothek (keine MFC, kein Qt, kein wxWidgets etc.). Wenn der funktioniert, und ein bisschen mehr kann als das reine Edit-Control, dann hast Du begonnen, zu begreifen, wie Windows funktioniert. Und dann wirst Du verstehen, wie komplex Dein Unterfangen ist.
hmmm...ich hab die Sache noch nicht ganz abgeschrieben...habe noch paar Infos gefunden und man kann sich an die Tastatureingabe "anhooken" Also prinzipiell ist das ganze denke ich machbar, nur will ich meine bescheidenen Windows C++ Kenntnisse da auch nicht zu hoch einschätzen und daran wirds dann wohl im Endeffekt scheitern. na ma sehen
Was bringen dir Tastatureingaben? Wenn dann musst du auch Mauseingaben, Datei öffnen, wechseln, Pasten, ... abfangen um sagen zu können, was sich gerade am Cursor befindet und damit vervollständigen läßt.
also ein paar Stichworte lauten: subclassing, message hook Damit ist genau das möglich was ich möchte, da man sich damit in die Message Struktur der Programme einklinken kann und somit Mouse-Events, Keyboard-Events usw abfangen und manipulieren kann. Ob ich das ganze hinbekomme ist die andere Frage, da mein Windows C++ Wissen bisher nicht über Standardkram hinausgeht. Desweiteren ist mir schon klar, das ich es alleine wohl kaum hinbekommen werde, ein zweites Visual Assisst hinzuzaubern(gerade bei meinem Kenntnissstand) Aber eine simple Variablenvervollständigung, bei der das aktuelle Projekt durchsucht und dann entsprechend auf die Tastatureingaben reagiert wird halte ich mittlerweile schon für in endlicher Zeit machbar. Jemand hat sogar ein komplettes Buch über den Kram geschrieben: http://books.google.ch/books?id=Vt-8LH-d1R8C&pg=PA103&lpg=PA103&dq=subclassing+mouse+events&source=bl&ots=RjhKQhWXnQ&sig=-UC8Vta4DyG8P-3qoe5CcIMSKlo&hl=de&ei=uA8WS4L9KNig_Aaox7SCBw&sa=X&oi=book_result&ct=result&resnum=7&ved=0CCIQ6AEwBjgK#v=onepage&q=subclassing%20mouse%20events&f=false Subclassing & Hooking mit Visual Basic :D
> Aber eine simple Variablenvervollständigung, bei der das aktuelle > Projekt durchsucht und dann entsprechend auf die Tastatureingaben > reagiert wird halte ich mittlerweile schon für in endlicher Zeit > machbar. Das setzt voraus, daß Dein Programm, das --wenn ich Dich richtig verstanden habe-- an irgendeiner IDE andocken soll, herausfinden kann, was das aktuelle Projekt überhaupt ist, welche Dateien dazugehören und wie deren Inhalt aussieht, auch wenn der Editor Änderungen noch nicht gespeichert hat.
A. B. schrieb: > subclassing, message hook Ja, so fangen alle an :-) > Damit ist genau das möglich was ich möchte, da man sich damit in die > Message Struktur der Programme einklinken kann und somit Mouse-Events, > Keyboard-Events usw abfangen und manipulieren kann. Super. Und was hilft dir das? Nur zur Vervollständigung: Was du in dem Fall machen müsstest ist den kompletten Editor nachprogrammieren um zu wissen welchen Text der Editor eigentlich gerade anzeigt. Alles was du hast sind die Auslösemechanismen, mit denen der Editor irgendetwas macht. Du musst dieselben Änderungen in deinem privaten Textbuffer machen um zu wissen welchen Text der Editor gerade vor sich hat. > Aber eine simple Variablenvervollständigung, bei der das aktuelle > Projekt durchsucht wie durchsuchst du denn? Wo nimmst du den Text her, den der Editor jetzt gerade anzeigt? Dein Benutzer hat 2 Zeilen über dem Cursor eine Variable eingefügt, der Text ist noch nicht gespeichert worden. Wie findet deine Erweiterung dieses heraus? Der Programmtext existiert bislang nur im Speicher des originalen Editors und wurde noch nicht gespeichert. Heck. Woher weiß deine Erweiterung eigentlich, dass es sich dabei um eine Variablendefinition handelt? Du musst neben dem Originaltext auch noch einen Syntaxanalysator bauen, der im Quelltext die Variablen findet! Das scheint dir gar nicht bewusst zu sein. Hast du schon einmal einen Compiler gebaut? > Subclassing & Hooking mit Visual Basic :D Hooking ist eine Sache. Aber das ist wie: Ich beobachte welche Leute in ein Haus hineingehen und wieder herauskommen, welche Lichter angehen und welche nicht. Und dann soll ich eine Aussage darüber treffen, was diese Leute im Gebäude gemacht haben. Ja sogar bei dir noch weitergehend: Du willst den Leuten dann auch noch Vorschläge machen, wie sie ihre Arbeitsabläufe (die du nur durch Beobachtung der Eingangstür erraten musst) verbessern können :-) (Ohne intime Kentnisse der Internals der IDE und welche Schnittstellen die IDE für solche AddOns bereit stellt, wird das nichts. Keyboard und Mouse zu hooken ist viel zu wenig)
Also das ganze soll natürlich nicht an IRGENDEINE IDE andocken...die IDE steht fest und es soll auch nur mit dieser funktionieren. Die zum Projekt dazugehörenden Dateien kann ich simpel über die Projektdatei herausfinden, da dort solche Informationen abgespeichert sind. Ich gebe zu, das mit den noch nicht gespeicherten Texten habe ich bisher nicht berücksichtigt und das ist ein großes Problem. Zur Not wird halt jedes eingegebene Zeichen erstmal in einen Buffer gepackt. Die paar kB Sourcen werden ja nun nicht das Problem sein. Den aktuellen Projektpfad automatisch zu ermitteln könnte ein Problem werden. Aber evtl muss man das dann manuell konfigurieren...Zu Beginn sicherlich eines der unwichtigeren Probleme, welches sich leicht durch Komfortverzicht lösen lassen sollte. Und jetzt übertreib mal nicht?! Ich muss doch keinen kompletten Compiler nachbauen?! Wo ist das Problem, alle Sourcedateien nach Definitionen wie int, char etc zu durchsuchen, den Rest der Zeile auszulesen und das als Variablen anzunehmen welche mit mindestens 3 Zeichen der aktuellen Eingabe seit dem letzten Leerzeichen verglichen werden? Wie komfortabel das ganze dann ist und ob die gemachten Vorschläge perfekt sind steht ja noch auf einem ganz anderen Blatt. Das ich kein zweites Visual Assisst hinzaubern werde ist mir dabei schon klar und auch nicht das Ziel.
Und siehe da, auch text aus einem fremden Editro Fenster auslesen ist machbar. Die Bedienung von dem Tool ist nicht gerde selbsterklärend, aber zumindest geht das theoretisch. Ob ichs praktisch hinbekomme ist die andere Frage ^^
A. B. schrieb: > Und siehe da, auch text aus einem fremden Editro Fenster auslesen ist > machbar. LOL Na dann mach mal. Bin schon neugierig wie du es hinkriegst, am Desktop das Fenster zu finden, in dem der Benutzer gerade eingibt. Warum fragst du eigentlich? Du bist der Meinung es geht. Von Rufus weiß ich, dass er lange Jahre Windows programmiert hat. Von mir weiß ich, dass ich seit 1992 auf Windows programmiere. Und wir alle sagen dass das was du vorhast alles andere als simpel ist. Wir würden sogar sagen: Es geht nicht. Nicht wenn alles was man hat, ein Hook ist. Aber mach ruhig. > Und jetzt übertreib mal nicht?! Ich muss doch keinen kompletten > Compiler nachbauen?! Nein musst du nicht. OK. Ich vereinfache. Hast du schon einmal den Syntaxparser eines Compilers geschrieben? > Wo ist das Problem, alle Sourcedateien nach > Definitionen wie int, char etc zu durchsuchen, den Rest der Zeile > auszulesen und das als Variablen anzunehmen welche mit mindestens > 3 Zeichen der aktuellen Aha
1 | typedef unsigned char byte; |
2 | byte i, j, k; |
findet deine Simpelstrategie jetzt immer noch die Variablen :-) (Soll ich noch mehr reale Beispiele konstruieren um dich davon zu überzeugen, dass du ohne Compilerbautechniken nicht weit kommen wirst? Kein Problem, ich brauch das nur noch mit ein paar #define, #include, struct, union würzen (*) und deine Erkennung steht aber sowas von im Wald. Gleichzeitig kann ich auch jede Menge Beispiele konsturieren, in denen deine Simpelstrategie Variablen erkennt, wo keine sind.) Aber mach mal. (*) da sind jetzt die Möglichkeiten, die durch kreativen Einsatz der Stringize und Token-Pasting Operatoren im Präprozessor möglich sind, noch gar nicht mitberücksichtig.
Lieber Karl-Heinz...das ist ja nun nicht der erste Thread in dem mich deine arrogante und polemisierende Art ankotzt aber hier isses nun wieder mal so weit tataaaaa Hast Du Dir das TextPicker Programm überhaupt angeschaut? ne, sicherlich nicht...damit ist nämlich genau das möglich, einen vom Editor noch nicht gespeicherten Text aus dem Editor Fenster auszulesen...sprich die MÖGLICHKEITEN gibt es also durchaus. Desweiteren sag ich nun ja zum x-ten mal das ich durchaus aktzeptieren kann, das es meine Programmierfähigkeiten übersteigt und ich auch nicht die eierlegende Wollmilchsau programmieren will. Stattdessen fängst Du an wunderhübsche Beispiele zu konstruieren ohne zu bedenken das ich überhaupt nicht den Anspruch habe, alle Feinheiten der Sprache C nachzubilden und mit einfachen Variablen & Definitioen erstmal mehr als zufrieden wäre, was meiner Meinung nach bisher auch durchgeklungen sein sollte. Aber geifer ruhig weiter rum. Alles was ich wissen wollte war nur, ob ich die Möglichkeit habe, mit einer fremden Anwendung die Daten einer anderen Anwendung auszulesen oder ob Windows das unterbindet und ob es dazu eine Plug-In Schnittstelle benötigt oder nicht. Und ja, es ist möglich. Ob ich es hinbekomme weiß ich nicht und das es nicht trivial sein würde war mir immer klar.
ok, dein hinzugekommenes (*) aus deinem letzten Posting zeigt mir, das ich mich nicht deutlich genug ausgedrückt habe was ich möchte oder Du mich nicht verstehen willst oder Du ernsthafte Probleme bei der zwischenmenschlichen Kommunikation hast :D Stringize und Token-Pasting Operatoren...ich glaub es hackt gg %) "Erstmal kleine Kuchen backen" und "Keep it simple" gehört eher nicht zu Deinen Mottos, was?
A. B. schrieb: > das ist ja nun nicht der erste Thread in dem mich > deine arrogante und polemisierende Art ankotzt aber hier isses > nun wieder mal so weit tataaaaa Das liegt vielleicht daran, dass ich (und mit mir viele andere hier) etwas weiter denken als nur bis zu: Ich möchte xy machen, habe aber keine Ahnung wie ich anfangen soll und was mich erwartet. Aber ich will unbedingt! zb das hier > Ich gebe zu, das mit den noch nicht gespeicherten Texten habe > ich bisher nicht berücksichtigt und das ist ein großes Problem. Sowohl Rufus als auch ich haben dieses Problem nach 2 Sekunden nachdenken identifiziert. Du gehst schon eine ganze Weile mit dem Gedanken schwanger und hast dieses Problem nicht gesehen, ehe wir dich mit der Nase darauf gestossen haben. Was glaubst du was da alles noch an Problemen lauert, an die weder Rufus noch ich momentan denken? Mit deinem ursprünglichen Ansatz des Hookings haben wir dir jetzt locker 3 Wochen Entwicklungsarbeit gespart an dessen Ende unweigerlich "so gehts nicht" gestanden wäre. > "Erstmal kleine Kuchen backen" und "Keep it simple" gehört eher nicht zu > Deinen Mottos, was? Doch. Zu meinen gehört das schon. Aber anscheinend nicht zu deinen. Wie ich schon sagte: Mach mal. > alle Feinheiten der Sprache C nachzubilden Sorry. Aber ein typedef ist keineswegs eine Feinheit. Das ist stink normales C, wie es jeden Tag millionenfach geschrieben wird. Komplexe Probleme kann man nun mal nicht mit simplen Strategien lösen. Und arrogant und herablassend werde ich eigentlich nur dann, wenn ich denke, wieder mal einen Fall von massloser Unterschätzung des Schwierigkeitsgrades vor mir zu haben. Mit dem Fuss aufstampfen und "Ich will" brüllen funktioniert nicht als Problemlösestrategie. Und für eine Problemstellung dieses Schwierigkeitsgrades und Komplexität solltest du schon ein paar besser ausgearbeitete Konzepte und Strategien haben als "Da hooke ich mal ein wenig und der Rest findet sich"
Ach ja: Deine allerbeste Strategie wäre es, mit den Entwicklern der IDE Kontakt aufzunehmen, ihnen dein Vorhaben zu schildern und sie zu fragen ob sie dir einen Zugang zu Projektdaten Texten in den Editorbuffern geben können und eine Benachrichtigung schicken können, wenn sich dort etwas ändert (in Form eines Callbacks, Windows Message, was auch immer). Sprich: Wenn sie dir eine Plugin-Schnittstelle entweder benennen oder implementieren können. Da so ein VA eine enorme Aufwertung jeder IDE darstellt, kann ich mir nicht vorstellen, dass sie abgeneigt sind, diesen normalerweise relativ kleinen Aufwand zu treiben. Vielleicht gibt es ja schon eine Schnittstelle und du weißt es nur noch nicht?
> Hast Du Dir das TextPicker Programm überhaupt angeschaut?
Gegenfrage: Hast du das TextPicker Programm überhaupt ausprobiert?
Mach das mal.
Starte einen Notepad, schreibe was rein und dann sieh nach, was dein
Textpicker da raus holt :-)
Grob geraten macht dein TextPicker
* Das Window unter der Maus identifizieren (dazu gibt es einen
Windows-API Call)
* Die Fensterklasse des Windows zu bestimmen (auch dazu gibt es
einen Windows-API Call, bzw. der steht in der zum HWND gehörenden
Struktur
* Dem Fenster (je nach Klasse) eine WM_GETTEXT Message (oder das
jeweilige Äquivalent der konkreten Klasse) schicken.
* Das wars
Probier einfach mal dieses Textpicker-Tool zusammen mit Firefox aus. Du wirst überrascht sein.
Rufus t. Firefly schrieb: > Probier einfach mal dieses Textpicker-Tool zusammen mit Firefox aus. > > Du wirst überrascht sein. Was macht er? Also aus dem Notepad kriegt das Tool bei mir zumindest nichts raus. Und Notepad ist so ziemlich der am simpelst aufgebaute Texteditor, den ich mir vorstellen kann.
Rufus t. Firefly schrieb:
> Eben, genau das: Nichts.
LOL
Beim schnellen Ausprobieren war das eigentlich Dauerzustand: nichts
passiert. Egal wo ich mit der Maus hin bin.
Ich würde mal sagen: Alles was nicht über Controls abgewickelt wird,
wird nicht funktionieren. Oder hast du schon mal einen MFC-View gebaut,
der auf eine WM_GETTEXT Message reagiert :-)
Man könnte das natürlich schon trickreich machen. Dem Window einen
WM_PAINT schicken, dem Teil einen Memory-DC mit einer Bitmap unterjubeln
(keine Ahnung ob der Teil überhaupt machbar ist) und dann über ein OCR
versuchen den Text rauszubekommen.
Und natürlich hoffen, dass der View selbst keinen Flickerfree-Memory-DC
benutzt und tatsächlich immer alles hinpinselt (was bei einem Editor
eher unwahrscheinlich ist. Das Hinpinseln, nicht das Anti-Flickern)
Also unter Notepad funktioniert das ganze. ja, die Bedienung von dem ding ist "bischen" kacke. aber die readme erklärt wie es geht zwei notepadfenster öffnen. in ein fenster text schreiben, das tool aktivieren, maus über den text halten, das türkise quadrat erscheint, anklicken, quadrat wird gelb, gelbes quadrat auf anderes fenster ziehen, nochmal klicken und text ist kopiert. Mit Firefox und meiner IDE klappt das ganze nicht. das stimmt leider. Notepad verwendet für den Textdialog die CEdit Klasse bei dem das Textpicker funktioniert. Bei meiner IDE habe ich gerade geschaut, da ist das Textfenster mit WindowsForms und somit .NET realisiert. Wenn ich mir anschaue was da so mit der IDE installiert wurde wahrscheinlich .NET 2.1 Der Notepad ist insgesamt irgendwie mitteilsammer. Markiert man Text, so werden EM_LINEINDEX und SELECT Ereignisse ausgelöst. Da wird mir sogar der markierte Bereich mit angezeigt(habs mit SPY++ angeschaut) Bei meiner IDE nix dergleichen. KEYUP,KEYDOWN Messages sehe ich, und auch die gedrückten Tasten, aber die ganzen Spezialfunktionen sind da anderweitig implementiert. Muss aber auch erstmal bischen über .Net informieren. Keine AHnugn wie da was abläuft.
Achso und sorry wegen vorhin @karl-heinz. War nur kurz davor irgendwas mit dem Keyboard umzuhauen da mich dein Kommentar in diesem Moment sehr erbost hatte :D Ich halte mein Vorhaben bisher nicht für unlösbar und von daher hat mich das auf-eine-Stufe-stellen mit einem Newbie der fragt ob Vista auch auf nem Atmel läuft doch ein wenig getroffen :P
um was für eine IDE handelt es sich eigendlich? Was für eine Sprache? vielleicht kann man ja einfach zu einer Alternativ-Ide zurückgreifen (Visual Studio, Eclipse) und diese zum Coden benutzen. Projektkonfiguration und Erstellen der Makefiles, sowie spezielle Funktionen kann man ja der Orginal-Ide überlassen. So handhabe ich das zB immer. Die Projekte erstelle und pflege ich im Avr-Studio Coden/Flashen tue ich im Visual Studio 2005. Da gibts ein vernünftiges Sytaxhighlighting und eine verünftige codeverfollständigung. Das Avr-Studio benutze ich nur, wenn mal ein neues File ins Projekt muss, oder wirklich der Simulator gebraucht wird. Man hat zwar dadurch einne geringen Mehraufwand, weil man das Visual-Studio-Projekt und das Avr-Studio-Projekt pflegen muss, aber bei ersteren hält sich der Aufwand in grenzen. Da muss nur einmal die Includepfade angepasst werden und ein paar Präprozessor-defines gesetzt werden (nur für die Codeverfollständigung) und eingestellt werden, welches Makefile wie aufgerufen werden soll, wenn man auf Ausführne klickt (F5 drückt) Abgesehen davon ist der Visual Assist ein super Tool, was schon einige Jahre Entwicklungsarbeit beinhaltet. Sowas mal ebend nachzubauen ist unrealistisch.
ja, so mache ich es momentan auch. visual C und die IDE gleichzeitig benutzen. Es geht, aber ist umständlich. Es handelt sich um die PSoC Designer IDE. Ich habe bucheggers Rat beherzigt und erstmal beim Hersteller der IDE angefragt ob es da schon was undokumentiertes gibt oder sie bereit sind ein kleines API einzubauen. Mal sehen was die sagen bevor ich irgendwelche Handstände und Frickellösungen probiere. Und ich sprach nirgends von "mal eben" und ich weiß auch das ich das Teil nur rudimentär nachbasteln können werde(da ich es nicht zu meiner Lebensaufgabe machen wollte)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.