Seite 1 von 1
Wie kann ich den PB-Editor von außen bearbeiten?
Verfasst: 20.02.2009 16:38
von STARGÅTE
Tachchen,
Ich würde gerne von außen (also einem anderen Programm) Texte in den PB-Editor einfügen lassen bzw löschen lassen.
Kann mir einer n stück Code schreiben wo ich zB irgendein Wort an einer stelle des Quellcode einfügen kann ?
Mit SendKeys() aus dem Archiv will ich es nicht machen, es wäre gut wenn sowas mit ScintillaSendMessage gehen würde ...
Verfasst: 20.02.2009 23:30
von edel
Hier mal ein kleines Programm das ich nutze (als Werkzeug starten) :
Code: Alles auswählen
Procedure.s GetPBDir()
ProcedureReturn GetPathPart(GetEnvironmentVariable("PB_TOOL_IDE"))
EndProcedure
Procedure.l GetSCI()
ProcedureReturn Val(GetEnvironmentVariable("PB_TOOL_Scintilla"))
EndProcedure
Procedure GetProcessFromWindow(hwnd)
Protected pid.l = 0
Protected result.l = 0
If GetWindowThreadProcessId_(hwnd, @pid)
result = OpenProcess_(#PROCESS_ALL_ACCESS, #False, pid)
EndIf
ProcedureReturn result
EndProcedure
ProcedureDLL PasteText(buffer.s)
Protected hProc.l = 0
Protected mem.l = 0
Protected bW.l = 0
Protected hsci.l = GetSCI()
Protected len.l = 0
hProc = GetProcessFromWindow(hsci)
If hProc
len = Len(buffer)
mem = VirtualAllocEx_(hProc, 0, len, #MEM_RESERVE | #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
If mem
WriteProcessMemory_(hProc, mem, @buffer, len, @bW)
ret = SendMessage_(hsci, #SCI_ADDTEXT, len, mem)
VirtualFreeEx_(hProc, mem, len, #MEM_RELEASE)
EndIf
CloseHandle_(hProc)
EndIf
EndProcedure
Procedure.s GetInclude(dir.s)
ClearGadgetItems(0)
If ExamineDirectory(0, GetPBDir() + dir, "*.pbi")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
AddGadgetItem(0, -1, DirectoryEntryName(0))
EndIf
Wend
FinishDirectory(0)
EndIf
EndProcedure
Procedure.s BuildBuffer(dir.s)
buffer.s = "XIncludefile ( #PB_Compiler_Home + " + Chr(34)
buffer.s + dir + GetGadgetText(0)
buffer.s + Chr(34) + ")" + #LF$
ProcedureReturn buffer
EndProcedure
Procedure main()
hwnd = OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 155, "Select Include")
ListViewGadget(0, 5, 5, 290, 110)
ButtonGadget(1, 5, 125, 75, 23, "Paste")
ButtonGadget(2, 295-75, 125, 75, 23, "Open")
ButtonGadget(3, 295/2-(75/2), 125, 75, 23, "New")
DisableGadget(1, #True)
DisableGadget(2, #True)
If ProgramParameter(0)
dir.s = ProgramParameter(0) + "\"
Else
dir.s = "include\"
EndIf
GetInclude(dir)
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = 1
If GetGadgetText(0)
PasteText(BuildBuffer(dir))
EndIf
EndIf
If EventGadget() = 2
If GetGadgetText(0)
RunProgram(GetPBDir() + dir + GetGadgetText(0))
EndIf
Break
EndIf
If EventGadget() = 3
Repeat
file.s = InputRequester("New Inlude","Set a name or press ESC","inc.temp.pbi")
If file
If FileSize(GetPBDir() + dir + file) = -2
MessageRequester("Error","File is a directory !")
Continue
EndIf
If FileSize(GetPBDir() + dir + file) > -1
If Not MessageRequester("Error","File exists, overrides ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
Continue
EndIf
EndIf
If CreateFile(0,GetPBDir() + dir + file)
CloseFile(0)
EndIf
GetInclude(dir)
SetGadgetText(0,file)
EndIf
Until #True
EndIf
If EventGadget() = 0
If EventType() = #PB_EventType_LeftDoubleClick
If GetGadgetText(0)
PasteText(BuildBuffer(dir))
EndIf
EndIf
If GetGadgetState(0)> -1
DisableGadget(1, #False)
DisableGadget(2, #False)
Else
DisableGadget(1, #True)
DisableGadget(2, #True)
EndIf
EndIf
EndIf
If event = #WM_KEYDOWN
If EventwParam() = #VK_ESCAPE
Break
EndIf
EndIf
Until event = #PB_Event_CloseWindow
EndProcedure : main()
Verfasst: 21.02.2009 00:18
von STARGÅTE
Danke edel, kannst du noch kurz sagen was das Werkzeug für Parameter bekommt, damit ich es mal in Aktion sehen kann, sonst gucke ich einafch was ich gebrauchen kann
Verfasst: 21.02.2009 00:23
von ts-soft
Ich denke mal das Verzeichnis, wo Du Deine Includes aufbewahrst. Trigger
wird das nicht benötigen.
Verfasst: 21.02.2009 00:29
von STARGÅTE
jo schon gut brauchs nicht mehr, habe bereits das "gefiltert" was ich brauche.
SUPER großen danke an edel

Verfasst: 23.04.2009 18:09
von edel
Oh gar nicht gelesen
Dein Programm, meins da oben oder der Editor?
Verfasst: 23.04.2009 20:04
von Andesdaf
Danke für den Code
