Entwickler-Ecke

Windows API - Textdatei mit Notepad öffnen in einer bestimmten Zeile


thepaine91 - Mo 23.03.09 12:16
Titel: Textdatei mit Notepad öffnen in einer bestimmten Zeile
Hi,

also ich hab in meinem Programm eine Ausgabe mit einer Dateiangabe diese Öffne ich dann mit rechtsklick.
Und ich möchte dem User ersparren nach der Zeile zu suchen.

Momentan sieht der Aufruf so aus:

Delphi-Quelltext
1:
2:
 CreateProcess(Pchar( Getdirectory + '\System32\notepad.exe'), Pchar('open '+ Ausgabe), 
nilnil, true, 0{NORMAL_PRIORITY_CLASS}nilnil, pi, si);


Ich hab jetzt mal versucht rauszufinden wie ich gleichzeitig in die betreffende Zeile springen kann.
Bzw. welche Parameter ich da mitgeben könnte?

mfg Nicolas


Nersgatt - Mo 23.03.09 12:32

Ich glabue nicht, dass Notepad einen entsprechenden Startparameter hat. Notepad2 hätte so einen.
Wenn Du Notepad verwenden möchtest, müsstest Du vielleicht die Pfeil-Nach-Unten-Taste so oft simulieren, bis Du an der richtigen Zeile bist. Aber das halte ich für sehr unschön. Ich persönlich würde versuchen, auf Notepad zu verzichten und die Datei selbst z.B. in einem Memo anzuzeigen. Dann hast Du die volle Kontrolle.

Gruß,
Jens


thepaine91 - Mo 23.03.09 13:22

Hi, ja das habe ich fast befürchtet allerdings möchte ich das ganze nicht im Memo öffnen, da es nicht die selben funktionen wie Notepad vertritt. =)
Bzw. ich keine lust habe einen Texteditor zu schreiben.
Der die funktionen hat.

Wäre kurz gesagt mehr Arbeit als ich reinstecken will aber Danke für deine Antwort. :)

mfg Nic


Nersgatt - Mo 23.03.09 13:30

wie gesagt, auch wenn ich es nicht schön finde, könntest Du z.B. Notepad2 verwenden. Da kannst Du z.B. mit notepad2.exe /g 20 c:\datei.txt direkt mit dem Cursor in Zeile 20 springen.
Notepad2 gibt es eigentlich hier: http://www.flos-freeware.ch/ Scheint aber momentan down zu sein. Das Tool gibt es aber auch auf diversen Freewareseiten zum Download.


thepaine91 - Mo 23.03.09 14:03

Das Problem ist jetzt aber das es nicht nur auf meinem Rechner laufen soll sondern auch auf anderen.
(Bezogen auf mein kleines Projekt (String Suche) das ihr hier Vorgestellt habe).
Und diese haben nicht zwangsweise notepad.
Aber das konntest du nicht wissen, hätte ich vorher erwähnen sollen.

Ich denke ich belasse es einfach dabei wie es ist.

mfg Nic


Rupert - Mi 25.03.09 17:24

Versuche über ein keybd_event (API-Funktionen) den Cursor im Notebad zu bewegen.

Das Fenster erhältst du mit X-Spy [http://www.x-spy.net/]

Delphi-Quelltext
1:
2:
hFenster :=FindWindow('IEFrame''Internet Explorer');  // so Ähnlich wie beim Explorer
EnableWindow(Hfenster,bEnable); //enables or disables mouse and keyboard input to the specified window or control.


anschließend über eine Schleife

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for i:=1 to 20 do
  // cursor_down
  keybd_event(VK_Down ,0,0,0); // Pfeil nach unten

for i:=1 to 3 do
  keybd_event(VK_Right ,0,0,0); // Pfeil nach rechts


Liste der Keyboardevents [http://www.kbdedit.com/manual/low_level_vk_list.html]

.... ist nur so ein Gedanke von mir - muss man probieren - aber ich denke das klappt!


thepaine91 - Do 26.03.09 10:33

D.h. ich soll dann


Delphi-Quelltext
1:
2:
 for i := 0 to Zeile do 
         Vk_down

ist zwar nicht ellegant, aber immerhin eine Lösung. Muss ich mal gucken in wie fern sich das umsetzen lässt.