Hallo PB-Gemeinde,
mit RunProgram rufe ich ein Programm auf und übergebe ihm einen DateiNamen.
Das aufgerufene Programm startet und lädt die Datei ordnungsgemäß.
Ein (konstruiertes) Beispiel:
Wordpad.exe soll die Daten in Fettschrift darstellen und die Datei speichern.
Das sind Aufgaben, die im Menü dieses Programms zur Auswahl angeboten werden.
Würde ich Wordpad selbst steuern, müsste ich eingeben:
[Ctl] + A . . alles markieren
[Ctl] + B . . Fettschrift
[Alt] + D . . Menü Datei
S . . . . . . . Datei speichern
[Alt] + D . . Menü Datei
B . . . . . . . Beenden
Kann ich diese Befehlssequenz vom PB-Programm an Wordpad.exe übergeben?
Und wenn es geht, wie muss ich solche Dinge wie [Alt] und [Ctl] codieren?
Ich hab' es schon mit WriteProgramString... versucht, es hat leider nicht funktioniert.
Mache ich etwas falsch oder geht es gar nicht?
Wer ist so nett, einem Neuling auf die Sprünge zu helfen?
Schon mal vielen Dank vorab!
rollovanoyten
RunProgram / WriteProgramString
-
- Beiträge: 6
- Registriert: 13.12.2014 10:51
- Wohnort: Oyten
Re: RunProgram / WriteProgramString
Entweder führst du Tastenkombinationen aus (keybd_event_()) oder du löst Menü-Events aus. ( http://www.rsbasic.de/aktualisierung/wi ... 3%B6sen.pb )
Wenn es aber darum geht, einen RTF-Text (Text mit Formatierungen) zu erstellen, warum erstellst du nicht selber deinen RTF-Text? Weitere Informationen: https://de.wikipedia.org/wiki/Rich_Text_Format (siehe Beispiel)
Wenn es aber darum geht, einen RTF-Text (Text mit Formatierungen) zu erstellen, warum erstellst du nicht selber deinen RTF-Text? Weitere Informationen: https://de.wikipedia.org/wiki/Rich_Text_Format (siehe Beispiel)
-
- Beiträge: 6
- Registriert: 13.12.2014 10:51
- Wohnort: Oyten
Re: RunProgram / WriteProgramString
Danke für die Antwort. Ich hab sie ehrfurchtsvoll gelesen, aber ich komme damit nicht weiter.
Das liegt sicher an meinem bescheidenen Wissensstand.
Zu den vorgeschlagenen Möglichkeiten 'keybd_event' sowie zu Menü-Events
habe ich in der Hilfe und im Manual nichts gefunden.
Und das Beispiel klappt gut bei Notepad, nicht aber bei Wordpad.
Natürlich kann ich meinen RTF-Text auch per Hand erstellen, aber ich nutze die Wordpad-Formatierung,
um große Verzeichnisse per Programm zu formatieren. Das schafft ein Programm schneller.
Es würde mir sehr helfen, wenn mir ein freundlicher Kollege die Codierung
für die - oben - in Großschrift genannten Befehle aufschreiben könnte.
Wenn ich wenigstens wüsste, mit welchen - im Manual oder in der Hilfe auffindbaren -
Commands ich das Problem anpacken kann, könnte ich mich ja weiter voranwühlen.
Für jeden Hinweis bin ich dankbar!
Das liegt sicher an meinem bescheidenen Wissensstand.
Zu den vorgeschlagenen Möglichkeiten 'keybd_event' sowie zu Menü-Events
habe ich in der Hilfe und im Manual nichts gefunden.
Und das Beispiel klappt gut bei Notepad, nicht aber bei Wordpad.
Natürlich kann ich meinen RTF-Text auch per Hand erstellen, aber ich nutze die Wordpad-Formatierung,
um große Verzeichnisse per Programm zu formatieren. Das schafft ein Programm schneller.
Es würde mir sehr helfen, wenn mir ein freundlicher Kollege die Codierung
für die - oben - in Großschrift genannten Befehle aufschreiben könnte.
Wenn ich wenigstens wüsste, mit welchen - im Manual oder in der Hilfe auffindbaren -
Commands ich das Problem anpacken kann, könnte ich mich ja weiter voranwühlen.
Für jeden Hinweis bin ich dankbar!
Re: RunProgram / WriteProgramString
Das wirst du auch nie in der Hilfe finden können, weil das keine PB-Funktion ist, sondern eine von Windows bereitgestellte WinAPI-Funktion.rollovanoyten hat geschrieben:Zu den vorgeschlagenen Möglichkeiten 'keybd_event' sowie zu Menü-Events habe ich in der Hilfe und im Manual nichts gefunden.
Die Dokumentation dieser Funktionen findest du auf der Microsoft-MSDN-Seite. Beispielsweise für keybd_event_(): https://msdn.microsoft.com/de-de/librar ... 85%29.aspx
Der Beispielcode funktioniert natürlich nur bei Notepad, weil bei WordPad die Menüeinträge andere Eventnummer haben. Diese musst du erst herausfinden.rollovanoyten hat geschrieben:Und das Beispiel klappt gut bei Notepad, nicht aber bei Wordpad.
Wenn du deine eigene Funktion zum Erstellen eines formatierten RTF-Textes erstellst, dann hast du ja auch ein Programm, welches genauso schnell ist wie WordPad.rollovanoyten hat geschrieben:Natürlich kann ich meinen RTF-Text auch per Hand erstellen, aber ich nutze die Wordpad-Formatierung,
um große Verzeichnisse per Programm zu formatieren. Das schafft ein Programm schneller.
Lieber eine eigene und unabhängige Anwendung programmieren. Sonst kann es passieren, dass deine externe Methode irgendwann nicht mehr funktioniert, beispielsweise bei einer neuen Version von WordPad.
-
- Beiträge: 6
- Registriert: 13.12.2014 10:51
- Wohnort: Oyten
Re: RunProgram / WriteProgramString
Das ist das Problem des Anfängers: Er weiß nicht weiter und muss fragen.
Und das ist das Problem des Spezialisten: Er versteht oft nicht, wie man sowas fragen kann.
Ich bedanke mich für die Vorlesung, aber ich bin nicht einen Schritt weiter.
Dabei möchte ich doch nur wissen, ob es mit PureBasic möglich ist,
ein anderes Programm Menü-Befehle ausführen zu lassen,
und wenn es möglich ist, wie man das machen muss.
Noch hab' ich die Hoffnung nicht aufgegeben, dass es jemanden gibt,
der eine Antwort auf meine Fragen weiß und sie mir mitteilt.
Hinweis von NicTheQuick: Nutze bitte nicht [ size], wenn es nicht nötig ist.
Und das ist das Problem des Spezialisten: Er versteht oft nicht, wie man sowas fragen kann.
Ich bedanke mich für die Vorlesung, aber ich bin nicht einen Schritt weiter.
Dabei möchte ich doch nur wissen, ob es mit PureBasic möglich ist,
ein anderes Programm Menü-Befehle ausführen zu lassen,
und wenn es möglich ist, wie man das machen muss.
Noch hab' ich die Hoffnung nicht aufgegeben, dass es jemanden gibt,
der eine Antwort auf meine Fragen weiß und sie mir mitteilt.
Hinweis von NicTheQuick: Nutze bitte nicht [ size], wenn es nicht nötig ist.
Re: RunProgram / WriteProgramString
Ja, es ist selbstverständlich möglich, aber meiner Meinung nach keine sinnvolle Lösung, um einen Text fett zu formatieren.rollovanoyten hat geschrieben:Dabei möchte ich doch nur wissen, ob es mit PureBasic möglich ist,
ein anderes Programm Menü-Befehle ausführen zu lassen,
und wenn es möglich ist, wie man das machen muss.
Ich habe für dich was kleines gebastelt und das war überhaupt nicht schwer. Du hättest einfach den Beispielcode im Wikipedia-Artikel anschauen müssen.
Code: Alles auswählen
EnableExplicit
Define RTFFileLength
Define *RTFMemoryID
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(1, 0, 0, WindowWidth(0), WindowHeight(0)-40, 0)
ButtonGadget(2, WindowWidth(0)-210, WindowHeight(0)-30, 200, 20, "Text fett formatieren", 0)
;1. Unformatierter Text
AddGadgetItem(1, -1, "Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte.")
AddGadgetItem(1, -1, "Abgeschieden wohnen sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans.")
AddGadgetItem(1, -1, "Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien.")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2
;2. Den speichern wir in einem RTF-Format mit einer Fett-Formatierung ab.
If CreateFile(1, GetEnvironmentVariable("temp") + "\DeinRTFText.rtf")
WriteString(1, "{\rtf1\b\i0" + ReplaceString(GetGadgetText(1), Chr(13), "\line") + "\b0}")
CloseFile(1)
EndIf
;3. Um zu sehen, ob es auch funktioniert hat, laden wir einfach den gespeicherten, formatierten Text.
If ReadFile(1, GetEnvironmentVariable("temp") + "\DeinRTFText.rtf")
RTFFileLength = Lof(1)
*RTFMemoryID = AllocateMemory(RTFFileLength)
If *RTFMemoryID
ReadData(1, *RTFMemoryID, RTFFileLength)
SetGadgetText(1, PeekS(*RTFMemoryID))
FreeMemory(*RTFMemoryID)
EndIf
CloseFile(1)
EndIf
;4. Du kannst die Datei auch mit WordPad öffnen, um zu sehen, ob die Fett-Formatierung übernommen wurde.
RunProgram("wordpad.exe", GetEnvironmentVariable("temp") + "\DeinRTFText.rtf", "")
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
-
- Beiträge: 6
- Registriert: 13.12.2014 10:51
- Wohnort: Oyten
Re: RunProgram / WriteProgramString
Das ist ein hilfreiches Beispiel, damit komme ich ein gutes Stück weiter.
Nochmals vielen Dank für die Mühe und die Geduld!
Nochmals vielen Dank für die Mühe und die Geduld!