Witam, mam taki problem, przeczytałem, próbowałem zastosować pomysł przedstawiony tutaj: http://4programmers.net/Forum/Delphi_Pascal/159571-Uaktywnianie_okna_-_problem ale niestety nie zadziałało mi...
a już mówię co chciałbym zrobić...
chciałbym napisać program który robi mi screenshota konkretnego okna firefoxa, potrafię zrobić i napisałem taki programik ale dla okna będącego na pierwszym planie, problem pojawia się w miejscu gdy chciałbym, żeby program wywołał to okno na pierwszy plan, żeby móc zrobić screenshota, nie umiem wywołać okna na pierwszy plan, bo zrobienie zrzutu okna niewidocznego chyba jest niemożliwe, no nie?
Proszę o pomoc, właściwie tyle tylko, żeby nauczyć program wyciągać dane okno na wierzch, np po nazwie tego okna.
To, co już mam prezentuję:
procedure TForm1.Button9Click(Sender: TObject);
var Can: TCanvas;
B: TBitmap;
okno:tHandle;
han1:hwNd;
begin
//zrzut ekranu
{ tworzenie zmiennej }
Can := TCanvas.Create;
{ tworzenie bitmapy}
B := TBitmap.Create;
{w tym momencie rozmiary okna są na sztywno, ale nie o to chodzi...}
b.height:=200;
b.width:=400;
Han1 := findwindowext('Roulette|Sportingbet.com - Mozilla Firefox');
okno:=getwindow(han1,GW_OWNER);
ShowWindow(okno, SW_RESTORE);
setforegroundwindow(okno);
can.Handle:= getwindowdc(findwindow(nil,'Roulette|Sportingbet.com - Mozilla Firefox'));
B.Canvas.CopyRect(Rect(0, 0, B.Width, B.Height), Can, Rect(0,0,B.Width,B.Height));
B.SaveToFile('zrzut.bmp');
end;
function tform1.FindWindowExt(Text: string): hWnd;
var
Han: hWnd;
cTitle: array [0..254] of Char;
sTitle: string;
begin
Han := FindWindow(nil, nil);
Text := AnsiLowerCase(Text);
while Han <> 0 do
begin
GetWindowText(Han, cTitle, 255);
sTitle := cTitle;
if cTitle = '' then
begin
Han := GetWindow(Han, GW_HWNDNEXT);
Continue;
end;
sTitle := AnsiLowerCase(sTitle);
Application.ProcessMessages;
if Pos(Text, sTitle) <> 0 then Break;
Han := GetWindow(Han, GW_HWNDNEXT);
end;
Result := Han;
end;