Mensaje    Asunto: CreateMutex y una manera fea de programa Responder citando

CreateMutex y una manera fea de programa

De la Fuente, no puedo acceder al OnClick de un TTooButton (en un TTollBar):

Código:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// Attempt to create a mutex. If the mutex already existed,
// GetLastError will return ERROR_ALREADY_EXISTS
HANDLE PrevInstHandle;
HANDLE hInstanceMutex = ::CreateMutex(NULL,TRUE, Application->Title.c_str());
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
   {  ...  }

           HWND pWnd = FindWindow("TForm1", "Form1");
           HWND hTol=FindWindowEx(pWnd,0,"TToolbar",NULL);
           HWND hBut=FindWindowEx(hTol,0,"TBBUTTON","Fechar");
           PostMessage(hBut, BM_CLICK, NULL, NULL);

           {  ...  }


Así que creé un TButton para llamar el OnClick de TToolButton::

Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ToolButton1Click(Sender);
   {  ...  }



A continuación, llame OnClick del TButton:

Código:

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// Attempt to create a mutex. If the mutex already existed,
// GetLastError will return ERROR_ALREADY_EXISTS
HANDLE PrevInstHandle;
HANDLE hInstanceMutex = ::CreateMutex(NULL,TRUE, Application->Title.c_str());
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
   {  ...  }

                  HWND pWnd = FindWindow("TForm1", "Form1");
                  HWND hBut=FindWindowEx(pWnd,NULL,"TButton","Button1paraToolButton1");
                  PostMessage(hBut, BM_CLICK, NULL, NULL);

           {  ...  }




Tampoco puedo pasar una cadena en una llamada a función::

Código:


HANDLE hInstanceMutex = ::CreateMutex(NULL,TRUE, Application->Title.c_str());

{  ...  }
               Form1->geraPaginas((AnsiString)ParamStr(1));


otra solución fea:

Código:

HANDLE hInstanceMutex = ::CreateMutex(NULL,TRUE, Application->Title.c_str());

{  ...  }
              const int size=ParamStr(1).Length();
              char* Buffer = new char[size+1];
              strcpy (Buffer, ParamStr(1).c_str());
              HWND hEdt=FindWindowEx(pWnd,NULL,"TEdit",0);
              SendMessage(hEdt, WM_SETTEXT, size, (LPARAM)Buffer);


no cpp:

Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ToolButton1Click(Sender);
   Form1->geraPaginas(Edit1->Text);


¿Cómo puedo hacer esto de una forma menos fea?

gracias