Uchwyt otawieranego programu.

0

Potrzebuje uchwyt okna gry.
FindWindow uzywa nazwy okna - czyli caption? Jesli tak to jest ona zmienna, wiec to chyba nie najlepszy pomysl
Czy jesli program bedzie uruchamiany z poziomu programu ktory potrzebuje uchwyt, to nie mozna go pobarac jakims sposobem.
Slyszalem tez o sposobie z lista aktywnych procesow i wyszukaniem po nazwie pliku uchwytu potrzebnego procesu. Gdzie znajde przykladowy kod?

// na 4p - program wtop - ŁF

0

HWND FindWindow(
LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);

Jako pierwsze podajesz nazwe klasy, a jako drugie tytuł. Jeśli nie chcesz podawac tytułu daj Nil.

Klasa sie rzadziej zmienia niż tytuł. :-)

0

Czy jesli program bedzie uruchamiany z poziomu programu ktory potrzebuje uchwyt, to nie mozna go pobarac jakims sposobem.

Mozna, wlaczasz go przy pomocy CreateProcess(info w helpie) to funkcja zwroci uchwyt.

0

Czy jesli program bedzie uruchamiany z poziomu programu ktory potrzebuje uchwyt, to nie mozna go pobarac jakims sposobem.

Mozna, wlaczasz go przy pomocy CreateProcess(info w helpie) to funkcja zwroci uchwyt.

Tak jest dobrze ?

const
exe = 'C:\cos\prog.exe';

var
si: TStartupInfo;
pi: TProcessInformation;
dir: string;
uchwyt: Thandle;
begin

dir := ExtractFileDir(exe);
FillCHar(si, SizeOf(si), 0); // co to wlasciwie robi?
FillCHar(pi, SizeOf(pi), 0);
si.cb := SizeOf(si);

if CreateProcess(
nil, //lpApplicationName
PChar(exe), //lpCommandLine
nil, //lpProcessAttributes
nil, //lpThreadAttributes
true, //bInheritHandles
0, //dwCreationFlags
nil, //lpEnvironment
PChar(dir), //lpCurrentDirectory
si, //lpStartupInfo
pi //lpProcessInformation
) then

uchwyt:=pi.hProcess; // czy moze pi.hThread ?
end;

Szymek, a mozna podac tylko fragment captiona? Np. poczatkowe 15 znakow.

0

W Operze nie dzialaja mi te przyciski edycji tresci ( B I U code, url email ... delphi ... )

// Skrypt nie działa róznież pod mozlka i netskejpem. Ale masz xp-pro, wiec masz na pewno ie. [mf]

0

Uchwyt := CreateProcess ...

0

Uchwyt := CreateProcess ...

Mozesz podac jakies szczegoly? Bo tak jak napisales nie da sie, CreateProcess zwraca wartosc boolean powodzenia wykonania operacji... Moj sposob tez nie dziala.

0

Jednak masz racje, te rzeczy sa w 'pi' w hProcess

hProcess
Handle to the newly created process. The handle is used to specify the process in all functions that perform operations on the process object.
hThread
Handle to the primary thread of the newly created process. The handle is used to specify the thread in all functions that perform operations on the thread object.
dwProcessId
Value that can be used to identify a process. The value is valid from the time the process is created until the time the process is terminated.
dwThreadId
Value that can be used to identify a thread. The value is valid from the time the thread is created until the time the thread is terminated.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_processes.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_information_str.asp

0

Co do szukania handle po captionie, to znalazlem taki kod:

function FindWindowByTitle(WindowTitle: string): Hwnd;
var
NextHandle: Hwnd;
NextTitle: array[0..260] of char;
begin
// Get the first window
NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
while NextHandle > 0 do
begin
// retrieve its text
GetWindowText(NextHandle, NextTitle, 255);
if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
begin
Result := NextHandle;
Exit;
end
else
// Get the next window
NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
end;
Result := 0;
end;

A co do tego co napisales Wolverine, to dzieki za linki, wg. opisow wnioskuje, ze te uchwyty sa podrzednymi uchwytami programu. Jak wiec znajac uchwyt podrzedny uzyskac glowny?

0

Próbowalem GetParent, ale wydaje sie nie dzialac... { Ide spac, wlasnie zauwazylem, ze chcialem skompilowac ten post i uruchomic }

1 użytkowników online, w tym zalogowanych: 0, gości: 1