[j]Widzę dwie możliwości. Po pierwsze mając uchwyt do okna można wysłać konkretny komunikat, ale trzeba by wiedzieć o jaki typ komunikatu chodzi i jaką ma wartość. Gdyby posłużyć się jakimś programem, który potrafi przechwytywać komunikaty wysyłane z aplikacji do systemu i pokazuje jakie to są komunikaty, to można by je namierzyć i potem wysłać do okna konkretny komunikat.
Inny sposób to symulacja wciśnięcia klawisza myszy. Taka symulacja wymaga podania współrzędnych względem lewego górnego rogu ekranu. Pozycję okna względem ekranu można pobrać za pomocą funkcji [b]GetWindowRect(HWND hWnd, TRect &Rect)[/b]. Trzeba przywołać okno na pierwszy plan, potem do pozycji okna względem ekranu należy dodać pozycję przycisku względem okna programu. Następnie trzeba przesunąć kursor w wyliczoną pozycję i dokonać symulacji wciśnięcia lewego przycisku myszy.
Pokaże to na przykładzie okna programu Firefox oraz jego przycisku wstecz, który w przy rozdzielczości 1280x1024 znajduje się w pozycji do okna: left = 20, top = 60.[/j]
void BringWindowToFront(HWND hWnd)
{
bool Result;
DWORD ForegroundWindowThreadID;
DWORD WindowThreadID;
if(hWnd != GetForegroundWindow())
{
ForegroundWindowThreadID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
WindowThreadID = GetWindowThreadProcessId(hWnd, NULL);
if(ForegroundWindowThreadID != WindowThreadID)
{
AttachThreadInput(ForegroundWindowThreadID, WindowThreadID, true);
SetForegroundWindow(hWnd);
AttachThreadInput(ForegroundWindowThreadID, WindowThreadID, false);
}
else
SetForegroundWindow(hWnd);
}
}//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd = FindWindow(L"MozillaUIWindowClass", NULL);
if(hWnd == NULL)
{
ShowMessage("Nie odnaleziono okna programu");
return;
}
TRect wRect;
GetWindowRect(hWnd, &wRect);
BringWindowToFront(hWnd);
POINT cP;
GetCursorPos(&cP);
int dx = wRect.Left + 20;
int dy = wRect.Top + 66;
SetCursorPos(dx, dy);
<span class="posthilit">mouse_event</span>( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
<span class="posthilit">mouse_event</span>( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
Sleep(100);
SetCursorPos(cP.x, cP.y);
BringWindowToFront(this->Handle);
}
Tyle na razie udało mi się wymyślić.