Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    WIN32 - GetChildWindow non trova le finestre

    Salve!
    Ho una applicazione (fatta in Visual Fox Pro) e non mia che nella sua immensità, ha 2 campi, Codice e Nome completo.

    L'applicazione cerca in una istanza di SQL Server e caccia i risultati.
    L'applicazione però permette di cercare solo per codice (ed è una cosa alquanto scomoda).

    Così ho fatto un rapido Dialog In C++ e WIN32 e usando SQL Native Client direttamente in C++ (OLEDB) mi sono fatto la mia ricerca personale per Nome completo.

    Devo però ancora copiarmi il codice e incollarlo nell'altra APP.
    Così ho deciso di automatizzarmi questo processo.

    Il punto è che in tutti i modi, non riesco ad acchiappare le TEXTBox interne al form.

    E' strutturato in questo modo
    Un form (penso MDI), con un form dentro e in tal form ci sono le textbox.

    1)EnumChildWindow
    Chiamando questa funzine usando l'HWND della finestra in cui c'è la textbox, semplicemente ritorna e non chiama mai la mia funzione di Callback

    2) GetNextDlgItem
    Ritorna sempre l'HWND della finestra, mai bottoni, label o textbox

    3) GetGuiThreadInfo
    La proprietà .hWndFocus è sempre sull'HWND principale, anche se il focus è diretto sulla textbox interessata (funziona con un semplice dialog di prova)

    4) Spy++ non riesce a rilevare i controlli interni.

    Ma che siano disegnati a mano?

    Potreste dirmi "continua a incollare", ma oramai è una sfida.
    Così ho deciso di trovare la posizione della finestra, simulare movimenti del mouse, click e i keystroke necessari
    Ho usato GetClientRect ma la struttura RECT ha coordinate dipendendi dallo schermo. Questo è male, se mai cambierò monitor.
    Ho trovato funzioni del tipo LogicalToPhysical conversion,ma possono essere usate solo in Windows Vista!
    Avete qualcosa del tipo "screen independent resolution"?

    Devo fare il subclass della wndproc? Ma tra processi diversi è impossibile...devo andare di WriteProcessMemory?
    Grazie!!!
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2

    Re: WIN32 - GetChildWindow non trova le finestre

    Originariamente inviato da XWolverineX
    [...]
    4) Spy++ non riesce a rilevare i controlli interni.

    Ma che siano disegnati a mano?
    Quasi. Da quanto leggo, FoxPro usa controlli windowless, ossia l'applicazione non usa finestre figlie come controlli, ma disegna e gestisce degli oggetti sullo schermo completamente da sé, e, dato che è roba semplicemente "disegnata" e non finestre, questi non hanno handle.
    Potreste dirmi "continua a incollare", ma oramai è una sfida.
    Così ho deciso di trovare la posizione della finestra, simulare movimenti del mouse, click e i keystroke necessari
    Ho usato GetClientRect ma la struttura RECT ha coordinate dipendendi dallo schermo. Questo è male, se mai cambierò monitor.
    Ho trovato funzioni del tipo LogicalToPhysical conversion,ma possono essere usate solo in Windows Vista!
    Avete qualcosa del tipo "screen independent resolution"?
    Non capisco bene quale sia il problema... trova l'handle della finestra padre più vicina che puoi nella gerarchia di finestre ai controlli che vuoi toccare (FindWindow e compagnia), ottienine l'area client (GetClientRect), convertila in coordinate relative allo schermo (ClientToScreen), determina i punti su cui "muovere" il mouse tramite offset rispetto ai lati e simula i movimenti (SendInput/mouse_event/keyb_event o SendMessage, a seconda di come preferisci gestire la questione).
    Se temi che usando schermi diversi gli offset in pixel cambino, tieni conto che il problema si presenta solo se si cambiano le dimensioni e i tipi di caratteri predefiniti e/o i "finti DPI" dello schermo (che poi di fatto sono usati semplicemente per avere un riferimento per il rendering a schermo del testo). In ogni caso, non hai alternativa, visto che l'area client della finestra viene semplicemente disegnata dal codice dell'applicazione, pertanto non hai appigli sulla struttura interna della finestra a cui aggrapparti.
    Devo fare il subclass della wndproc? Ma tra processi diversi è impossibile...devo andare di WriteProcessMemory?
    Non vedo come il subclassing ti possa aiutare.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Il punto in cui non sono sicuro è sull'offset

    In una risoluzione 1024x768 dal bordo della finestra la casella distera 10 pixel, ma a 1280x720 disterà sempre 10 pixel?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Originariamente inviato da XWolverineX
    Il punto in cui non sono sicuro è sull'offset

    In una risoluzione 1024x768 dal bordo della finestra la casella distera 10 pixel, ma a 1280x720 disterà sempre 10 pixel?
    Si.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    A parità di tipo di carattere e di finti DPI dello schermo, sì. Ovviamente se si attivano i caratteri grandi (alterando quindi i finti DPI) la questione cambia.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.