Avatar billede jonat Nybegynder
21. april 2004 - 20:09 Der er 7 kommentarer og
1 løsning

HWND til Titlen på vinduet.

Hvordan finder man titlen på et vindue ud fra HWND??

// jonat.
Avatar billede jonat Nybegynder
21. april 2004 - 20:10 #1
Altså det der står som vinduenavn nede på processlinjen...

// Jonat.
Avatar billede soreno Praktikant
21. april 2004 - 20:13 #2
win32 apiet specificerer denne funktion:

int GetWindowText
(
    HWND hWnd,    // handle of window or control with text
    LPTSTR lpString,    // address of buffer for text
    int nMaxCount     // maximum number of characters to copy
);

Hvordan den bruges i Delphi ved jeg ikke.
Men i C ville det se nogenlunde således ud:
int size = 256;
char buffer[size];
GetWindowText(hwnd, buffer, size);
Avatar billede jonat Nybegynder
21. april 2004 - 20:20 #3
Kan du ikke lige oversætte det helt, kan ikke helt forstå det, hvad er en buffer og hvad skal size bruges til? eller er der andre der ved det?

// Jonat
Avatar billede soreno Praktikant
21. april 2004 - 20:24 #4
Måske noget ala:

buffer: array[0..256] of Char;

GetWindowText(hwnd, buffer, SizeOf(buffer)-1);
Avatar billede jonat Nybegynder
21. april 2004 - 20:38 #5
Fandt selv ud af det :

var WindowText: array[0..255] of char; Handle : HWND;
begin
  GetWindowText(Handle, WindowText, 255);
  if WindowText <> '' then
  Memo1.Lines.Add(WindowText);
end;
Avatar billede nop Nybegynder
27. maj 2004 - 11:18 #6
Her er osse en ting til at liste alle windows i en combo. Du kan måske bruge noget derfra, eller andre kan bruge det. Det viser osse enum med call-back metode.
Classname hentes men benyttes ikke.

//disse to vars skal være globale
var
    winCount:  integer;
    windowsA:    array[1..1000] of integer;

function getWindow(hdl: HWND; parm: pointer): BOOL; stdcall;
begin
    inc(winCount);
    windowsA[winCount]:=hdl; //gem kun handlerne
    getWindow:=true;
end; //enum call back


procedure getAll;
var
    i:          integer;
    buf:        string;
    className:  string;
    windowText: string;
begin
    winCount:=0;
    enumWindows(@getWindow, longword(0)); //fylder array med alle windows
    cmbActivateWindow.Sorted:=true;
    for i:=1 to winCount do begin
        setLength(buf,1002);
        getClassName(windowsA[i],pchar(buf),1000);
        setLength(buf,pos(#0,buf)-1);
        className:=buf;
        setLength(buf,1002);
        getWindowText(windowsA[i],pchar(buf),1000);
        setlength(buf,pos(#0,buf)-1);
        windowText:=trimSpc(buf);
        if windowText <> '' then
            cmbActivateWindow.Items.AddObject(windowText,pointer(windowsA[i]));
    end;
    cmbActivateWindow.Sorted:=false;
    cmbActivateWindow.Items.InsertObject(0,'<none>',pointer($0));
    cmbActivateWindow.ItemIndex:=0;
end; //get all


Skal soreno have points, og skal der så lukkes?
Avatar billede jonat Nybegynder
27. maj 2004 - 18:16 #7
Ja soreno, smider du lige et svar???

// Jonat.
Avatar billede soreno Praktikant
27. maj 2004 - 18:44 #8
Ok.
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