Forum Coders' city Strona Gwna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UytkownicyUytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj si, by sprawdzi wiadomociZaloguj si, by sprawdzi wiadomoci   ZalogujZaloguj 

Potrzebuj szybkiej odpowiedzi na moje pytanie... Zasady

[.NET + WinApi] Generowanie fokusa do innej aplikacji



 
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Biblioteki
Zobacz poprzedni temat :: Zobacz nastpny temat  
Autor Wiadomo
Bassman



Doczy: 14 Cze 2005
Posty: 140
Skd: Bydgoszcz

PostWysany: Pi Lut 24, 2017 12:39 pm  OP    Temat postu: [.NET + WinApi] Generowanie fokusa do innej aplikacji Odpowiedz z cytatem Pisownia

Witam
Mam dwie aplikacje ktre wsppracuj ze sob korzystajc z jednej bazy danych, Pierwsza aplikacja mojej produkcji o nazwie (A) wysyajca do bazy wiersz "X", druga aplikacja (B) innego autora, aby odczytaa wiersz przeze mnie zapisany do bazy "X" naley w ni klikn, a dokadniej w jej grid'a wtedy nastpuje odwieenie. I teraz nie majc moliwoci w ingerencje kodu aplikacji (B) wymyliem sobie, e za pomoc WinApi wymusz z aplikacji (A), po dodaniu wiersza "X" do bazy danych, odwienie w aplikacji (B), wic musiabym wygenerowa albo Fokus albo Click myszk w aplikacje (B)
Pomoecie jaki WinApi do tego wykorzysta ?
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo Odwied stron autora Numer GG
Olo



Doczy: 22 Sty 2010
Posty: 172

PostWysany: Sob Lut 25, 2017 1:38 am      Temat postu: Odpowiedz z cytatem Pisownia

Poeksperymentuj z poniszym programikiem napisanym naprdce.
Zadziaa na starcie, po klikniciu prawym klawiszem myszki oraz
po wciniciu lewego i puszczeniu go nad innym programem.

Programik szuka nazwy klasy gwnego okna programu, a nastpnie
znajduje uchwyt tego okna.

Trzeba wczeniej uruchomi Notatnik, mona wpisa kilka literek.

Kod:

#include <windows.h>

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

BOOL CALLBACK WyliczDzieciaczki(HWND hwnd, LPARAM lParam)
{
   char ClassName[55] = {0};
   //Notatnik ma dwa okna potomne, ale tylko jedno klasy "Edit"
   GetClassName(hwnd, ClassName, 50 );
  
   if ( !lstrcmp(ClassName, "Edit"))
   {
      *(HWND*)lParam = hwnd;
      return FALSE;
   }
   return TRUE;
}

BOOL CALLBACK EnumWndProc (HWND hwnd, LPARAM lParam)
{
   char ClassName[55] = {0};
  
   if ( IsWindowVisible(hwnd) )
   {
      GetClassName(hwnd, ClassName, 50);
      lstrcat((char*)lParam, ClassName);
      lstrcat((char*)lParam, "\r\n");
   }
   return TRUE;
}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszArgument, int nCmdShow)
{              
   static
   WNDCLASS    wndclass ;
   HWND        hwnd;
   MSG         msg;
  
   wndclass.lpfnWndProc   = WndProc ;
   wndclass.hInstance     = hInstance ;
   wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
   wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;
   wndclass.lpszClassName = "test" ;


   if (!RegisterClass (&wndclass))
        return 0;
  
   hwnd = CreateWindow ("test", "Test",
            WS_OVERLAPPEDWINDOW, 100, 200, 600, 200,
            NULL, NULL, hInstance, NULL) ;

   ShowWindow (hwnd, nCmdShow ) ;
   UpdateWindow(hwnd);
    
   while ( GetMessage (&msg, NULL, 0, 0) )
   {
      TranslateMessage (&msg) ;
      DispatchMessage (&msg) ;
   }
   return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   static HWND hwndNotepad, hwndNotepadEdit;
   static HWND hwndEdit;
   char   NotepadEditTekst[200];
   char   NotepadClassName[50];
   char   Tekst[1000];//powinno wystarczy :-)
   POINT  Mysza;
   PAINTSTRUCT ps ;
   HDC         hdc ;
  
   switch (message)
   {
   case WM_CREATE :

      hwndEdit = CreateWindow ("edit", 0,
         WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_VSCROLL,
         0, 0, 500, 100, hwnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL) ;

      hwndNotepad = FindWindow(NULL, "Bez tytuu - Notatnik");
      
      if (hwndNotepad)
      {
         EnumChildWindows (hwndNotepad, WyliczDzieciaczki, (LPARAM)&hwndNotepadEdit) ;
         SendMessage(hwndNotepadEdit, WM_GETTEXT, (WPARAM)150, (LPARAM)NotepadEditTekst) ;
        
         GetClassName(hwndNotepad, NotepadClassName, 40);
         wsprintf(Tekst, "Tekst: %s \r\n NotepadClassName: %s",
                           NotepadEditTekst, NotepadClassName);
                          
         SetWindowText(hwndEdit, Tekst) ;
         SendMessage(hwndNotepadEdit, WM_SETTEXT, (WPARAM)0, (LPARAM)Tekst) ;
         //wcale nie jest pewne czy to zaktualizuje zawarto okna
         UpdateWindow(hwndNotepad);
         SetForegroundWindow(hwndNotepad);
         SetFocus(hwndNotepad);
      }
      else
      {
         SetWindowText(hwndEdit, "Nie znaleziono okna") ;
      }
      return 0 ;
  
   case WM_RBUTTONDOWN:
      hwndNotepad = FindWindow("Notepad", 0);
      wsprintf(Tekst, "Uchwyt ze znanej klasy: 0x%X \r\n\r\n"
                      "Klasy widocznych okien:\r\n", hwndNotepad );
      
      EnumWindows(EnumWndProc, (LPARAM)Tekst);
      SetWindowText(hwndEdit, Tekst) ;
      
      UpdateWindow(hwndNotepad);
      SetForegroundWindow(hwndNotepad);
      SetFocus(hwndNotepad);      
      break;    

   case WM_LBUTTONDOWN:
      SetCapture(hwnd);
      break;    
      
   case WM_LBUTTONUP:
      Mysza.x = (SHORT)LOWORD(lParam) ;
      Mysza.y = (SHORT)HIWORD(lParam) ;
      ClientToScreen(hwnd, &Mysza) ;
      
      hwndNotepadEdit = WindowFromPoint(Mysza);
      
      if ( hwndNotepadEdit )
      {
         HWND hwndMatka;
         hwndMatka = hwndNotepadEdit;
         while ( (hwndMatka = GetParent(hwndMatka)) )
         {
            hwndNotepad = hwndMatka;
         }
         //GetParent() zwrcio 0, hwndNotepad jest oknem gwnym
         GetClassName(hwndNotepad, NotepadClassName, 44 );
         SetWindowText(hwndEdit, NotepadClassName);
        
         UpdateWindow(hwndNotepad);
         SetForegroundWindow(hwndNotepad);
         SetFocus(hwndNotepad);
      }
      else
      {
         SetWindowText(hwndEdit, "Nie znaleziono okna");
      }
      ReleaseCapture() ;
      break;
      
   case WM_PAINT:
      hdc = BeginPaint (hwnd, &ps) ;
      EndPaint (hwnd, &ps) ;
      return 0 ;  
      
   case WM_DESTROY:
      PostQuitMessage (0) ;
      return 0 ;
      
   }
   return DefWindowProc (hwnd, message, wParam, lParam) ;
}



_________________
2 2 = 3,999999999997
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
Wywietl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Biblioteki Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Moesz pisa nowe tematy
Moesz odpowiada w tematach
Nie moesz zmienia swoich postw
Nie moesz usuwa swoich postw
Nie moesz gosowa w ankietach
Moesz dodawa zaczniki na tym forum
Moesz pobiera pliki z tego forum




Debug: strone wygenerowano w 0.14226 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |