* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 18, 2024, 10:07:19 pm

Inserisci il nome utente, la password e la durata della sessione.

173 Visitatori, 0 Utenti

Autore Topic: Solo Windows: eseguibile in primo piano  (Letto 886 volte)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Solo Windows: eseguibile in primo piano
« il: Febbraio 22, 2021, 01:09:26 pm »
Ciao a tutti,
sapete dirmi se e come è possibile capire quale eseguibile ha un proprio form in primo piano?

Grazie, Mario

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows: eseguibile in primo piano
« Risposta #1 il: Febbraio 22, 2021, 07:51:23 pm »
Per il momento, ho trovato e sto provando questa, che sembra promettente:

Codice: [Seleziona]
function GetCurrentActiveProcessPath: String;
var pid     : DWORD;
    hProcess: THandle;
    path    : array[0..4095] of Char;
begin
    GetWindowThreadProcessId(GetForegroundWindow, pid);

    hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, pid);
    if hProcess <> 0 then
      try
        if GetModuleFileNameEx(hProcess, 0, @path[0], Length(path)) = 0 then
          RaiseLastOSError;

        result := path;
      finally
        CloseHandle(hProcess);
      end
    else
      RaiseLastOSError;
end;

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows: eseguibile in primo piano
« Risposta #2 il: Marzo 22, 2021, 09:43:03 pm »
Si, anche io usavo questa tecnica, ma se hai applicazioni UWP o applicazioni con livello di amministratore attive, la funzione ti ritorna o l'ApplicationFrame.exe o un errore (Code 5 mi pare processo non accessibile ?).

Poi non ho approfondito, di fatto non la uso da diverso tempo.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows: eseguibile in primo piano
« Risposta #3 il: Marzo 23, 2021, 07:02:25 am »
Poi non ho approfondito, di fatto non la uso da diverso tempo.

Intendi dire che usi altro, o che hai rinunciato?

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows: eseguibile in primo piano
« Risposta #4 il: Marzo 23, 2021, 09:28:28 am »
Non la uso perchè non mi e più utile.
Diversi anni fà la usavo, insieme alle tecniche di "impersonificazione" degli account, per alcune funzioni di monitoraggio che i software che sviluppavo per alcuni clienti dovevano avere (appunto trace delle applicazioni in primo piano e loro "abbattimento").

Semplicemente se il mio software non era in primo piano, voleva dire che un operatore stava "giocando" e questo doveva essere riportato in un log e l'applicazione in primo piano terminata.

Per fare ciò usavo quella funzione, poi il software impersonava un account amministratore e "killava" l'eventuale processo, riprendendo poi la sua funzione a livello di privilegi utente.

Quando sono comparsi i primi problemi, e non potendo per ragioni di sicurezza rimanere costantemente in uso come "amministratore",  il cliente decise di togliere la funzione (tanto capitava talmente di rado che si trovasse una applicazione in primo piano che di fatto non era più necessaria).

Non ho poi approfondito il percorso per bypassare tuttto ciò. Di fatto è possibile tracciare senza account amministratore (o impersonare un amministratore), a parte il "kill", basta vedere l'utility Process Explorer di Mark Russinovich (SysInternals) che traccia tutto senza i privilegi di amministratore.

Un giorno mi dovrò mettere di impegno .....  :)
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows: eseguibile in primo piano
« Risposta #5 il: Marzo 23, 2021, 09:50:00 am »
Ah, ok, praticamente avevi il problema inverso al mio.

La mia situazione è questa:
lancio un programma che deve fare alcuni lavori che durano qualche minuto. Quindi l'utente lo lancia e passa a fare altro.
Quando il mio programma termina i controlli, deve segnalare all'utente l'esito, e quindi lo porto in primo piano.
Questo però succedeva magari proprio nel momento in cui l'utente aveva bisogno di vedere altre finestre, quindi iconizzava la mia e poi magari se ne dimenticava, o se ne ricordava ore dopo.
Ho quindi aggiunto un timer con cui ogni X minuti verifico se la finestra è o meno in primo piano e, se non lo è, la riporta in primo piano.

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows: eseguibile in primo piano
« Risposta #6 il: Marzo 23, 2021, 10:19:16 am »
Scusami se intervengo nel modo, ma è solo per aprire nuovi orizzonti non per criticare.

Invece di portare in primo piano l'applicazione, che potrebbe effettivamente dare dei disagi notevoli all'utente perchè gli toglie il focus da ciò che stava facendo,
perchè non approcci altre soluzioni come un "fumetto" sulla taskbar o tramite il centro notifiche di Windows ?

Anche soluzioni multimediali banali, come l'emissione di una frase con la sintesi vocale integrata di Windows tramite gli altoparlanti potrebbe dare il suo effetto.

A disposizione per chiarimenti.
 
« Ultima modifica: Marzo 23, 2021, 10:21:16 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows: eseguibile in primo piano
« Risposta #7 il: Marzo 23, 2021, 10:57:09 am »
Figurati, è sempre bello avere altri punti di vista, perché spesso ci si fossilizza su una soluzione e manco si pensa alle alternative !!!
In linea di massima la penso come te, ma in questo caso specifico, le segnalazioni di quel programma vanno esaminate il prima possibile.
Quindi, se l'utente è al telefono quando esce la prima volta l'esito, può iconizzare la finestra o altro, ma in ogni caso sa che deve fare questa cosa il prima possibile.
In passato avevo provato con le notifiche di Windows, ma quelle stanno fuori per qualche secondo, e poi spariscono. Se in quel momento l'utente è in bagno o comunque sta guardando altrove, sono fregato.
Col metodo attuale, io continuo a portargli la finestra in primo piano, e gli rompo le balle volutamente, così è obbligato a guardare i messaggi il prima possibile!

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows: eseguibile in primo piano
« Risposta #8 il: Marzo 23, 2021, 11:03:57 am »
  ;)  ;D
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18771
  • Topic in totale: 2233
  • Online Today: 427
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 173
Total: 173

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.