Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Обновить страницу в браузере


Автор: zone51 5.6.2008, 16:01
Доброго времени суток. Подскажите пожалуйста как лучше послать сообщение о нажатии кнопки браузеру чтобы он обновил страницу?
Я делаю так:

Код

BOOL CALLBACK EnumIEWindowsCallback(HWND hWnd,LPARAM lParam)
{
 //variable for window title
 char title[500] = {0};
 //getting window text
 GetWindowText(hWnd, title, sizeof(title)-1);
 //If we need this window just setting handler
 if(strstr(title, "Sample Caption"))
  {
   windowHandle = hWnd;
   return FALSE;
  }
 return TRUE;
}
...
EnumWindows((WNDENUMPROC)EnumIEWindowsCallback,0);
SendMessage(windowHandle,WM_KEYDOWN,VK_F5,0);
SendMessage(windowHandle,WM_KEYUP,VK_F5,0);


Однако не срабатывает. Почему? Буду очень признателен за помощь. smile 

Автор: NiJazz 5.6.2008, 21:48
IE? Или нужно для всех?

Автор: zone51 5.6.2008, 22:53
NiJazz

под ишак но ф5 под все вроде идет обновление

Автор: 586 6.6.2008, 09:26
OLE-автоматизация не подходит?
Код
var wsh = new ActiveXObject("WScript.Shell");
var ie = new ActiveXObject("InternetExplorer.Application");
ie.visible = true;
ie.Navigate("http://forum.vingrad.ru")
while (ie.busy) WScript.sleep(100);

if(wsh.popup("Update page?", 0, "", 4)==6)
{
    ie.refresh()
}

Автор: 586 6.6.2008, 11:05
Код
//---------------------------------------------------------------------------
#define STRICT
#include <vcl.h>
#include <ole2.h>
#include <objbase.h>
#include <exdisp.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    OleInitialize(0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    CLSID clsid;
    IWebBrowser2 *ie;

    HRESULT hr = CLSIDFromProgID(L"InternetExplorer.Application", &clsid);
    hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&ie);
    if(FAILED(hr)) { ShowMessage("Can't get IWebBrowser2 interface: "+SysErrorMessage(hr)); return; }
    ie->put_Visible(TRUE);
    VARIANT v;
    v.vt = VT_NULL;
    ie->Navigate(L"http://forum.vingrad.ru", &v, &v, &v, &v);
    while(1) {
        VARIANT_BOOL bs;
        ie->get_Busy(&bs);
        if(!bs) break;
        Sleep(100);
    }
    if(MessageBox(Handle, "Update page?", "", MB_YESNO) == IDYES)
    {
        ie->Refresh();
    }
    ie->Release();
}

Автор: Rrader 11.6.2008, 15:38
Проще:
Код

HANDLE HWnd = FindWindow("IEFrame", NULL); //windowHandle
HWnd = FindWindowEx(HWnd, 0, "Shell DocObject View", NULL);
HWnd = FindWindowEx(HWnd, 0, "Internet Explorer_Server", NULL);
SendMessage(HWnd, WM_COMMAND, 0x179a, 0);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)