| |
|
|
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! |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
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! |
|
|
| |
|
|
|
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 X2Grüß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! |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
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... |
|
|
| |
|
|
|
| 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). |
|
|
| |
|
|
|
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! |
|
|
| |
|
|