Avatar billede klasker Nybegynder
14. september 2003 - 15:51 Der er 10 kommentarer og
1 løsning

Læse hukommelse af et andet program

Først vil jeg gerne sige at jeg er 100% ny på området om at aflæse andre programmers hukommelse.
Jeg har lavet en syntax-highlighter til et script-sprog ved navn Jass. Grunden er at det bruges i et computer spil når man laver baner (Warcraft III hvis du skulle være nysgerrig), og i World Editoren til spillet er der blot en lille memo uden syntax-highligt eller auto-indent eller noget som helst.

Jeg har derfor lavet et program til at skrive i. Jeg tænkte at det ville være smart med en knap til at automatisk hente scriptet fra World Editoren ind i mit program så man slipper for at Copy-Paste for meget.
Hvis muligt, så også den anden vej.

Problemet er bare at jeg ved intet på det område, så jeg håber at der er nogen der kan give et praj om hvor jeg skal starte.
Avatar billede stone Forsker
14. september 2003 - 16:27 #1
er det ikke word du mener?
Avatar billede stoney Nybegynder
14. september 2003 - 16:32 #2
Find ud af class namet på din World Editor så burde det være muligt
at hente teksten ind i dit eget program

Stoney
Avatar billede klasker Nybegynder
14. september 2003 - 16:37 #3
Stone>
Nej Word har ikke noget med det her at gøre

Stoney>
Okay, men hvordan finder man ud af hvad class namet er, eller skal man gætte sig frem?
Og hvad gør man så når man kender det?
Avatar billede stoney Nybegynder
14. september 2003 - 16:42 #4
Brug winsight32 eller min yndling Greatis Windows (er skrevet i Delphi)
http://www.greatis.com/windowse.htm
Det burde være lige ud af landevejen.
Bare hold musen over din "World editor" så får du class namet.
Det er freeware.

Stoney
Avatar billede klasker Nybegynder
14. september 2003 - 17:04 #5
Okay, men hvad gør jeg så når jeg kender class namet? Jeg vil gerne kunne hente texten ud fra mit program jo.
Avatar billede stoney Nybegynder
14. september 2003 - 18:35 #6
Sådan læser du teksten fra en kørende notepad

function GetCalcText: string;
var
  Wnd: HWND;
  ClassName: array[0..144] of char;
  L: Integer;
begin
  Result := '';
  { Find the "calc" window }
  Wnd := FindWindow(PCHAR('Notepad'), NIL);
  if Wnd <> 0 then
  begin
    { get the first child window... }
    Wnd := GetWindow(Wnd, GW_CHILD);
    repeat
      { ...and search the siblings for the first class named
"Static" }
      GetClassName(Wnd, @ClassName, SizeOf(ClassName));
      if StrComp(ClassName, 'Edit') = 0 then
      begin
        { get the text length }
        L := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
        if L > 0 then
        begin
          { allocate space for the text }
          SetString(Result, NIL, L);
          { get the text (into Result) }
          SendMessage(Wnd, WM_GETTEXT, L, Longint(@Result[1]));
          { set actual size }
          SetLength(Result, StrLen(PCHAR(Result)));
        end;
        Exit;
      end; { if StrComp... }
      Wnd := GetWindow(Wnd, GW_HWNDNEXT);
    until (Wnd = 0);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Text := GetCalcText;
end;

Du må selv rette procedure navne/classname til


Stoney
Avatar billede Slettet bruger
14. september 2003 - 18:49 #7
Du kan skrive teksten til notepad sådan:

procedure SetNotepadText(S: String);
var
Handle:HWND;
I:Integer;
begin
    Handle := FindWindowEx(FindWindow( 'notepad', nil ),0,'Edit',nil);
    SendMessage(Handle, WM_SETTEXT,0,Integer(S));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SetNotepadText(Memo1.Text)
end;
Avatar billede Slettet bruger
15. september 2003 - 13:57 #8
Hvis det er trigger editor så kan du bruge det her:

function GetScriptEditorText: String;
var
Handle:HWND;
begin
    Handle := FindWindowEx(FindWindow( '#32770', 'Trigger Editor'),0,'Edit',nil);
    SetLength( Result, SendMessage( Handle, WM_GETTEXTLENGTH, 0, 0 )+1);
    SendMessage( Handle, WM_GETTEXT, Length(Result), integer(Result));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Text := GetScriptEditorText;
end;

procedure SetScriptEditorText(S: String);
var
Handle:HWND;
begin
    Handle := FindWindowEx(FindWindow( '#32770', 'Trigger Editor'),0,'Edit',nil);
    SendMessage(Handle, WM_SETTEXT,0,Integer(S));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SetScriptEditorText(Memo1.Text)
end;
Avatar billede klasker Nybegynder
15. september 2003 - 14:08 #9
Tusind tak for hjælpen! Det virker med et par justeringer!
Avatar billede klasker Nybegynder
15. september 2003 - 14:10 #10
Hmm... jeg nåede ikke at se dit indlæg da jeg svarede hejhej.
Avatar billede klasker Nybegynder
15. september 2003 - 14:16 #11
Forresten så returnerer din (hejhej) kode teksten fra kommentar boksen. I den anden kode var det lettere at få den til at hente fra edit #2.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging