Español
Foro

Single-Instance Commandline ImageViewer con GDI+

 

Edelpfuscher
moin moin!
lo schreibt y grüßt stefan, 44 jahre, bits'n'bytes-verwurschtler de hamburg.

brauche en el job una bildbetrachter con el anforderungen: se ejecuta bajo el meisten win-versionen, fix, tauglich para todos gängigen formate, höhe/breite einpassen, zoomen, scrollen, fokus a aufrufende app zurückgeben, standalone, single-instance ... y zwar ausschließlich como kommandozeilen-tool.
(el ginge theoretisch auch alles con Irfan, allerdings es el viel a mächtig. lo son sí fast no buchstaben, el en ihm no como - bisweilen fataler - shortcut herhalten muss.)

después de el halbe inet durchforstet tener y todos downloads vergeblich ausgetestet waren, stand fest: selbermachen. irgendwo fand se entonces auch en el gesammelten werken el eingestaubte XProfan-cd (version 8.0) y el grundgerüst war erstaunlich rápidamente zusammen(-geklaut, vielen dank a el gemeinde!), así weit - tan bueno.

probs:
- sin 'SetAutoPaint 0' war gar nix con neuzeichnen - con flackert's bastante ordentlich
- el geschichte con el einmaligen instanz voluntad simplemente no correcto funzen

el fred 'Doppelstart Instanzen Mehrere Programmstarts Verhindern' Yo hoch y runter durchgekaut - danke nochmals a el spezialisten! außer el ansatz con FindWindow (en el beispiel auskommentiert, porque a langsam) flogen me el speicherverletzungen sólo así a ohren.

favorisieren sería Yo una comportamiento: alte instanz(en) bemerken y final.

en weitere tipps, anregungen, beispiele freue Yo mich ya,
danke y horrido!

6 kB
Kurzbeschreibung: XProfanCode (8.0)
Hochgeladen:05.11.2012
Ladeanzahl176
Descargar
 
05.11.2012  
 



Grüße!

Lo son no wirklich una siempre funktionierende Möglichkeit, una solchen

Doppelprogrammstart Windows-Versionen-übergreifend 100%ig zuverlässig

a verhindern. Usted puede user32::FindWindow benutzen aber auch hierauf kannst

Usted Usted de verschiedenen Gründen no 100%ig verlassen. Tal vez lo

todavía relativ sicher por TimerProc el regelmäßg (z.B. una vez pro Sekunde) por

FindWindow findet y ggf. una Beenden-Nachricht envía. Mutexe a

Programmstart oder Speicherdateien son no "sicherer" como en neueren Windows-

Versionen de Prozess a Prozess diferente Zugriffsrechte no siempre

disponible ser necesario. SetAutoPaint 0 características nichts neu, por lo tanto sí 0.

Un Ventana-APP se el Ventana incluso neu dibujar si el Nachricht

dazu bekommt. Usted könntest hierzu also con SubClassing trabajo si no

en el hWnd dibujar möchtest. Yo sería en Deinem Ejemplo wohl simplemente

el hWnd dibujar y %hDC2 sowie %HDC gleichermaßen beschreiben sodass

XProfan se incluso en el Neuzeichnen des %hWnd kümmern kann.
 
06.11.2012  
 




Edelpfuscher
besten dank!

y: schade, schade - el schlechten nachrichten Tuve befürchtet. lo kursieren sí diverse 'single instance dlls' - por lo tanto entstand el schwache hoffnung, dass lo irgendwie stabiler y allgemeingültiger a hacer wäre. (lo muss sí Por favor, no igual c# ser...)

el aufrufende HTA jongliert ya con reichlich anderem kram herum y debería de solchen aufgaben el 'instanz-kontrolle' eigentlich verschont bleiben. Temporizador wären wohl en cada Fall a langsam, como z.b. una 180°-drehung ggf. sólo el zeitspanne uno doppelklicks ausmacht, y esta evtl. ya zwei aufrufe absetzt.

immerhin: el zusammenhang con '%hDC2 sowie %HDC' tener Yo unos pocos male verfolgt y doch no wirklich kapiert. muss Yo wohl otra vez aufgreifen... :o)

horrido!
 
06.11.2012  
 




E.T.

...
favorisieren sería Yo una comportamiento: alte instanz(en) bemerken y final
...


Yo denke, como es wohl el FindWindow-Variante el beste. Yo löse el a ahora siempre así (para bessere Varianten bin Yo gern lernfähig), y dies ha a Win 7 a ahora todavía no Problemas verursacht.
Natürlich debería el propio Progg-Ventana no gerade "Explorer"  más o menos benannt voluntad...

Mit dieser Verfahrensweise es me auch todavía nie passiert, el mehrere Instanzen el Proggs al werkeln waren, porque sí el einzig laufende en Neustart des Proggs gekillt  se. Und wer en Nummer sicher ir voluntad, de hecho puede después de el "killen"  einer vorhandenen Instanz el Búsqueda todavía 3x wiederholen
 
XProfan X2
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
06.11.2012  
 




Jörg
Sellmeyer
Yo no Solución el problema aber una Möglichkeit, como Findwindow-Solución más rápido voluntad podría.
Anstatt el zuerst aufgerufene Programa a final y el neue Bild por el zweite Programa Mostrar que se, puede zweite Programa después de erfolgtem Check en Vorhandensein des ersten, diesem simplemente el neue Bild como Parámetro transferencia y se entonces otra vez selber final. Das erste Programa stellt entonces el Bild en gewünschter Größe dar. Como muss entonces no otra vez el Programmoberfläche aufgebaut voluntad, während parallel el este Programa geschlossen se.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
06.11.2012  
 




Edelpfuscher
moin y danke nochmals.

el búsqueda después de disponible instanzen se sí no dreimal wiederholt, pero así oft como nötig:

Mientras que (@FindWindow("iv") > 0)
MyHandle& = @FindWindow("iv")
PostMessage(MyHandle&, $10, 0, 0, 0)
Wend

genau el führt para problem: zwischen dieser schleife y el aufspannen des neuen, 'findbaren' fensters con titel vergeht ggf. así viel zeit, dass el doppelstart eben doch no sicher vermieden voluntad kann. el 'findbare' Ventana füher a conjunto (y natürlich vom kill auszuschließen), führt a uno augenkrebs-verdächtigen flackerei.

podría evtl. una 'kill-message' ($10, $12, etc.) más rápido ser como una otro?! oder liegt el flaschenhals, como a vermuten wäre, doch en FindWindow incluso?

el senden el parameter de instanz 2 a nr. 1 wäre sicher correcto knorke, gerade auch bezügl. des flackerns. aber como bekomme I möglichst vielen windoof-versionen el parameter heil rübergeschaufelt? gibt's como algo 'halbwegs' sicheres?

horrido!
 
06.11.2012  
 



Como funktioniert dies hier con usted?

Descargar
KompilierenMarcaSeparación
 {$cleq}
const appTitle="myApp"
const checkVersionMsg=wm_user+1234
//
windowstyle 1 | 2 | 4 | 8 | 16 | 512
windowtitle appTitle
cls
userMessages wm_close,checkVersionMsg
// Adresse nativer Proc beziehen und Opcode abholen
long myNativeTimerProcOpcode=globalAlloc(gPTR,1024)
rtlMoveMemory(myNativeTimerProcOpcode,procAddr(myNativeTimerProc),1024)
//Opcode patchen und Startzeit nativ hinterlegen
long myNativeTimerProcOpcode&,7=getTickCount
// nativen Timer erzeugen ud auf Opcode lenken
~setTimer(0,0,333,myNativeTimerProcOpcode)

do {

    waitinput

    select %uMessage

        caseof wm_close : break

        caseof checkVersionMsg

        case &ulParam<long(myNativeTimerProcOpcode,7) : break

    endSelect

}

end

nProc myNativeTimerProc(long wnd,uMsg,idEvent,dwTime){

    push $FFFFFF
    pop eax
    long myTime=eax
    long chk=findWindowX(appTitle)
    //
    case chk : sendMessage(chk,checkVersionMsg,0,myTime)

}

// https://xprofan.com/intl/de/quelltexte/findwindow-findwindowx-nproc-xprofan/

nProc findWindowX(string s){

    case s=="" : return 0
    long lst=dim(16)
    long lst&,0=0,addr(s),dim(512),len(s)
    enumWindows(procAddr(findWindowX.enumProc),lst)
    long h=long(lst,0)
    dispose(long(lst,8))
    dispose(lst)
    return h

}

nProc findWindowX.enumProc(long wnd,lst){

    PushAll

    if wnd==hWnd {

        popAll
        return true

    }

    long 	r=getWindowTextLength(wnd),\
    l=long(lst,12)

    if r<l {

        PopAll
        return true

    }

    ifnot r==getWindowText(wnd,long(lst,8),511) {

        PopAll
        return true

    }

    if char(long(lst,4),0,l)==char(long(lst,8),0,l) {

        long lst&,0=wnd
        PopAll
        return false

    }

    PopAll
    return 
ss=s4 href='./../../funzione-riferimenti/XProfan/true/'>true }

Damit el Ver código fuente con usted se ejecuta musst XProfan con XPSE pimpen: [...]  -

aber kannst sí primero el Exe testen.

En diesem Code restos el älteste Instanz obtener.

Kann auch ligeramente umgestellt voluntad en: Ältere final & Neuere obtener

Auf cada Fall verursacht dieser Code no Systemlast y arbeitet quasi en el

Hintergrund passiv y delegiert sólo el Programmbeenden. ¿Puede sí veces

en el Explorer en el Test.Exe con el Entertaste draufbleiben sodass schön

viele Instanzen producido voluntad - puede ser zusehen como ellos todos otra vez verschwinden/

zuverlässig abgearbeitet y ser sólo el Erste übrig restos.

1.167 kB
Hochgeladen:06.11.2012
Ladeanzahl119
Descargar
 
06.11.2012  
 




Edelpfuscher
muy fresco, danke!

rennt como gewünscht, ahora muss Yo sólo todavía doch el code durchsteigen...
y el se, wie's aussieht, una todo weile dauern... ;o)

rückmeldung folgt...
 
06.11.2012  
 



Wenns primero grundsätzlich así funzt como de Usted gewünscht entonces simplemente todavía fix

durchgeben qué todavía a erledigen es como Yo el entonces fix con einbauen sería.

Por ejemplo debería el "neuere" Ventana garnicht sólo erscheinen si ya

eins disponible es. Das hilfreiche a diesem Code es dass el XProfan-Programa

incluso eigentlich nichts a tun ha salvo a schauen si una UserMessage

checkVersionMsg vorliegt y lo final debería si &ulParam <

long(myNativeTimerProcOpcode,7).
 
06.11.2012  
 




Edelpfuscher
el versprochene rückmeldung:

mein wissensrückstand bezügl. XPSE y aktuelleren Profanversionen es offensichtlich viel a groß, en en angemessener zeit a una brauchbaren ergebnis a kommen.

kümmere mich also mittlerweile a otro lugar en el töten überzähliger instanzen y lebe con el krücke (el soweit zufriedenstellend y stabil se ejecuta).

de nuevo gracias dank para el tipps y anregungen.
wann Yo dazu kommen voluntad, mein profanes halbwissen a vertiefen, restos desafortunadamente ungewiss.

horrido!
 
15.11.2012  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

6.945 Views

Untitledvor 0 min.
Walter31.03.2016
Ernst25.04.2014
Peter Max Müller20.09.2013
trusel01.09.2013
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie