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 94 95 96 97 98
|
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <utilcls.h>
#include "deverou_VBE.h" // deverou_VBE est le nom du programme
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Variant vMSExcel, vXLWorkbooks, vXLWorkbook, vWorksheet;
Variant vWorksheets;
vMSExcel = Variant::CreateObject("Excel.Application");
vMSExcel.OlePropertySet("Visible", true);
Variant vFileName, vNotUsed;
vNotUsed = Unassigned;
vFileName = "C:\\test2_Word.xls";
vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed,
vNotUsed, vNotUsed);
vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
// ici on va ouvrir la fenetre Visual Basic pour Excel
Variant vbProj = vXLWorkbook.OlePropertyGet("VBProject");
vMSExcel.OlePropertyGet("VBE").OlePropertyGet("ActiveVBProject") = vbProj;
vMSExcel.OlePropertyGet("VBE").OlePropertyGet("MainWindow").OlePropertySet("Visible", true);
// ici la fenetre Visual Basic pour Excel est ouverte
HWND h = FindWindow("wndclass_desked_gsk", NULL);
HWND h3 = FindWindowEx(h, NULL, "MsoCommandBarDock", "MsoDockTop");
HWND h5 = FindWindowEx(h3, NULL, "MsoCommandBar", "Barre de menus");
// on selectionne la Barre de menus
SetForegroundWindow(h5);
// on active le premier element de la Barre de menus pour cela on simule "Alt"
PostMessage(h5, WM_KEYDOWN, VK_MENU, 0);
PostMessage(h5, WM_KEYUP, VK_MENU, 0);
// on simule la fleche vers la droite pour se deplacer dans le menu
for (int i = 1; i <= 8; i++)
{
PostMessage(h5, WM_KEYDOWN, VK_RIGHT, 0); // touche enfoncee
PostMessage(h5, WM_KEYUP, VK_RIGHT, 0); // touche relachee
}
// on simule la fleche vers le bas pour derouler le menu selectionne
for (int i = 1; i <= 5; i++)
{
PostMessage(h5, WM_KEYDOWN, VK_DOWN, 0); // touche enfoncee
PostMessage(h5, WM_KEYUP, VK_DOWN, 0); // touche relachee
}
Application->ProcessMessages(); // temporisation de stabilisation
// on simule la touche entree pour afficher la boite de dialogue
keybd_event(VK_RETURN,0,0,0); // touche enfoncee
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); //touche relachee
// ici la boite de dialogue entrez le mot de passe est ouverte
// on recupere le Handle de la boite de dialogue
Sleep(50);
Application->ProcessMessages(); // temporisation de stabilisation
HWND h66 = FindWindow("#32770", "VBAProject Mot de passe");
HWND h77 = FindWindowEx(h66, NULL, "Edit", NULL);
HWND h88 = FindWindowEx(h66, NULL, "Button", "OK");
// on teste si le programme est verrouille
// s'il ne l'est pas le Handle est NULL
if (h66 != NULL)
{
// mot de passe
String MPassWord = "jp";
// on selectionne le TEdit Mot de passe
SendMessage(h77, WM_SETTEXT, 0, (LPARAM) MPassWord.c_str());
Application->ProcessMessages(); // temporisation de stabilisation
// ici on valide par OK
// le programme est deverrouille
// on donne le Focus au Boutton "OK"
SetForegroundWindow(h88);
// on simule la touche entree
keybd_event(VK_RETURN,0,0,0); //touche enfoncee
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); //touche relachee
}
HWND h6 = FindWindow("#32770", "VBAProject - Propriétés du projet");
HWND h7 = FindWindowEx(h6, NULL, "#32770", NULL);
HWND h12 = FindWindowEx(h6, NULL, "Button", "OK");
// on donne le Focus au Boutton "OK"
SetForegroundWindow(h12);
Application->ProcessMessages(); // temporisation de stabilisation
// on simule la touche entree
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
// le programme est deverrouille mais si on le ferme la protection
// n'est pas retiree et le programme se reverrouille
//---
// on ferme le dossier
vXLWorkbook.OleProcedure("Close", false);
// fermeture d'excel
vMSExcel.OleFunction("Quit");
// liberation memoire
vMSExcel = Unassigned;
}
//--------------------------------------------------------------------------- |
Partager