1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit83.h"
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm83 *Form83;
HWND MelonHwnd=0;
bool __stdcall EnumProc(HWND hWnd,/*LPARAM*/long/*lp*/);
//---------------------------------------------------------------------------
__fastcall TForm83::TForm83(TComponent* Owner)
: TForm(Owner)
{
Panel1->Width=Form83->Width;
Panel1->Height=Form83->Height;
AnsiString LigneDeCommande("K-Meleon\\k-meleon.exe ");
LigneDeCommande+= ExtractFilePath(Application->ExeName) + "wwwBlocklyArduino\\index.html";
PROCESS_INFORMATION ProcInfo={0};
STARTUPINFO StartInfo={0}; // name structure
StartInfo.cb = sizeof(StartInfo); // Set structure size
StartInfo.wShowWindow=SW_HIDE;
CreateProcess(NULL, LigneDeCommande.c_str() , NULL, NULL, true, DETACHED_PROCESS, NULL,NULL, &StartInfo, &ProcInfo);
WaitForInputIdle(ProcInfo.hThread, INFINITE);
Sleep(2000);
Application->ProcessMessages();
PostMessage(Handle, WM_FILLPANEL, 0 ,0);
}
//---------------------------------------------------------------------------
bool __stdcall EnumProc(HWND hWnd,/*LPARAM*/long/*lp*/)
{
unsigned long* pPid; //LPDWORD
unsigned long result; //DWORD
void *hg; //HGLOBAL
unsigned long id;
if(hWnd==NULL)
return false;
hg = GlobalAlloc(GMEM_SHARE,sizeof(unsigned long));
pPid = (unsigned long *)GlobalLock(hg);
result = GetWindowThreadProcessId(hWnd,pPid);
if(result){
char title[110];
char className[95];
char totalStr[256];
GetClassName(hWnd,className,95);
if((string(className)).find("KMeleon Browser")!= -1) //recherche de la fenêtre dont le nom possède la chaîne "KMeleon..."
MelonHwnd=hWnd;
}
else{
GlobalUnlock(hg);
GlobalFree(hg);
return false;
}
GlobalUnlock(hg);
GlobalFree(hg);
return true;
}
//---------------------------------------------------------------------
void __fastcall TForm83::FillPanel(TMessage& Msg)
{
long lp=0;
EnumWindows((WNDENUMPROC)EnumProc,lp);
if(MelonHwnd){
LONG lStyle = GetWindowLong(MelonHwnd, GWL_STYLE);
lStyle &= ~(WS_BORDER | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
SetWindowLong(MelonHwnd, GWL_STYLE, lStyle);
SetWindowPos(MelonHwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED);
::SetParent(MelonHwnd,Panel1->Handle);
SendMessage(MelonHwnd,WM_CHANGEUISTATE,UIS_CLEAR,0);
ShowWindow(MelonHwnd,SW_MAXIMIZE);
}
}
//---------------------------------------------------------------------
void __fastcall TForm83::FormResize(TObject *Sender)
{
Panel1->Width=Form83->Width;
Panel1->Height=Form83->Height;
PostMessage(Handle, WM_FILLPANEL, 0 ,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm83::FormClose(TObject *Sender, TCloseAction &Action)
{
PostMessage(MelonHwnd,WM_CLOSE,0,0);
} |
Partager