Italia
Foro

Druckerauftrag ermitteln

 
- Page 1 -



Rolf
Koch
Hallöchen heut frag ich mal so in die Runde, da ich mit Drucken nie soviel gemacht habe.
Folgende Problemstellung:
Wir haben bei uns ein Computer mit Drucker auf dem Lager.
Wenn ein Kunde ein Gerät gekauft hat und an der Kasse bezahlt hat, so kommt bei uns ein entsprechender Beleg aus dem Drucker, damit wir die Waschmaschine, TV oder solch ein Zeugs raussuchen können.
Jetzt würde ich gerne ein nebenbeilaufendes Tool schreiben, welches einen Sound abspielt, wenn ein solcher Beleg aus dem Drucker kommt.
Meint Ihr, ich potuto dies irgendwie erreichen?
 
20.12.2008  
 



 
- Page 11 -



Rolf
Koch
Bekomme leider eine Warnung: Fehler im Assembler Linker ???
 
24.02.2013  
 



Normal nicht,

liegts am Pfad? Pack mal nach c:\dev\test\test.xprf
 
24.02.2013  
 




Rolf
Koch
Jo klappt - Kapiere was Du meinst.
 
24.02.2013  
 



Wenn die Kameraeinstellungen sowas wie "Automatische Belichtung/ Helligkeit"
anbieten dann würde ich diese Funktion hierzu deaktivieren.
 
24.02.2013  
 




Rolf
Koch
Jo alles klar
 
24.02.2013  
 




Rolf
Koch
Ich komm damit nicht klar. Ich hab jetzt testweise mal ohne Scroller und versucht das Cambild abzufragen. Papercolor egal welche Farbe ist immer 255
 
24.02.2013  
 



Der erste Param von getPaperColor muss der DC sein auf dem die Pixel liegen -
schau mal auf welchem DC das Kamerabild gemalt wird. Kannst Du mal Deinen
Kameracode posten? Wichtig ist dabei dass das Bild im "preview"-Modus
gemalt wird statt per Overlay. Morgen potuto ich an eine Webcam kommen und
auch selbst testen.
 
24.02.2013  
 




Rolf
Koch
Hier der Code (ist Dein IFanta) angepasst:
KompilierenMarkierenSeparieren
 {$cleq}
 {$res nomanifest,noversioninfo}
 {$res icon if.ico}
const appTitle="iFantaCam"
const appVer=0.0
#include C:\\p00x\\thread.archive\\thread.archive\\lib\\thread.pcu = thread.
long paperColor,oldPaperColor,diff,h
declare _dulcoiF%

proc dulcoiF

    case _dulcoiF% : return
    _dulcoiF%:=1
    settimer 1;waitinput;killtimer
    _dulcoiF%:=0

endproc

Proc BILDSAVE

    Parameters Filename$
    Sendmessage(previewHandle,&WM_CAP_FILE_SAVEDIB,0,ADDR(Filename$))

EndProc

long mouse.x,mouse.y
mem mouse.mem=point

mouse.doLeftKlick {

    mouse_event(2, 0,0  ,0,0)
    mouse_event(4, 0,0  ,0,0)
    dulcoiF

}

lm_{return if(getasynckeystate(1)==0,false,true)}
rm_{return if(getasynckeystate(2)==0,false,true)}

whilem_{

    while (lm_() | rm_()){

        sleep 10

    }

}

getmousepos{

    GetCursorPos(mouse.mem)
    mouse.x=mouse.mem::x&
    mouse.y=mouse.mem::y&

}

setmousepos(long x,y){;setcursorpos(x,y);}

clipmouse(long x,y,xx,yy){

    mem mem=rect
    mem::left&=x
    mem::top&=y
    mem::right&=xx
    mem::bottom&=yy
    clipcursor(mem)
    dispose mem

}

mouse.close{

    dispose mouse.mem

}

Def &WM_CAP_FILE_SAVEAS 1047
Def &WM_CAP_FILE_SAVEDIB 1049
const wm_cap_start = $400
const wm_cap_edit_copy = (wm_cap_start + 30)
const wm_cap_driver_connect = (wm_cap_start + 10)
const wm_cap_set_previewrate = (wm_cap_start + 52)
const wm_cap_set_overlay = (wm_cap_start + 51)
const wm_cap_set_preview = (wm_cap_start + 50)
const wm_cap_set_scale = (wm_cap_start + 53)
const wm_cap_driver_disconnect = (wm_cap_start + 11)
const wm_cap_dlg_videocompression = (wm_cap_start + 46)
const wm_cap_dlg_videodisplay = (wm_cap_start + 43)
const wm_cap_dlg_videosource = (wm_cap_start + 42)
const wm_cap_dlg_videoformat = (wm_cap_start + 41)
long dll=usedll("avicap32.dll")
windowtitle appTitle
windowstyle 80 | 1024
window 0,0 - 0,0
windowstyle 1 | 2 | 4 | 8 | 16 | 512
long dhWnd=createwindow(0,apptitle,100,100,350,300)
setStyle dhwnd,349118464
long nCameraID
long previewHandle = external("avicap32.dll","capCreateCaptureWindowA","Video", WS_CHILD + WS_VISIBLE, 0, 0, width(dhwnd), height(dhwnd), dhwnd, 1)
SendMessage(previewHandle, WM_CAP_DRIVER_CONNECT, nCameraID, 0)
SendMessage(previewHandle, WM_CAP_SET_PREVIEWRATE, 200, 0)
SendMessage(previewHandle, WM_CAP_SET_SCALE, true, 0)
SendMessage(previewHandle, WM_CAP_SET_OVERLAY, true, 0)
SendMessage(previewHandle, WM_CAP_SET_PREVIEW, true, 0)
usermessages wm_close,wm_size,wm_contextmenu
long hWndXX=width(dhwnd),hWndYY=height(dhwnd)

do {

    thread.start 1,8
    waitinput
    thread.stop 1

    select %umessage

        caseof wm_close : break

        caseof wm_contextmenu

        select dhWnd.contextMenu()

            caseof wm_close : break

        endselect

    endselect

}

SendMessage(previewHandle, WM_CAP_DRIVER_DISCONNECT, nCameraID, 0)
destroywindow(previewHandle)
freedll dll
end

nProc getPaperColor(long dc,x,y){

    long r,g,b,col,q,w

    whileloop 0,2 {

        q=loop

        whileloop 0,2 {

            w=loop
            col=getPixel(dhwnd,x+q,y+w)
            add r,getRValue(col)
            add g,getGValue(col)
            add b,getBValue(col)

        }

    }

    div r,9
    div g,9
    div b,9
    add r,g
    add r,b
    div r,3
    return r

}

dhWnd.contextMenu{

    createmenu

    if getstyle(dhwnd)==349118464 {

        appendmenu 2000,"Shot"

    } else {

        appendmenu 2000,"Shot"

    }

    separator
    appendmenu 1000,"Videosource"
    appendmenu 1010,"Videoformat"
    appendmenu 1020,"Videodisplay"
    appendmenu 1030,"Videokompression"
    separator
    appendmenu 3000,"Beenden"
    getmousepos()
    trackmenu mouse.x,mouse.y

    select %menuitem

        caseof 1000 : sendmessage(previewHandle,WM_CAP_DLG_VIDEOSOURCE,0,0)

        caseof 1010 : sendmessage(previewHandle,WM_CAP_DLG_VIDEOFORMAT,0,0)

        caseof 1020 : sendmessage(previewHandle,WM_CAP_DLG_VIDEODISPLAY,0,0)

        caseof 1030 : sendmessage(previewHandle,WM_CAP_DLG_VIDEOCOMPRESSION,0,0)

        caseof 2000 : BILDSAVE "C:\\TEMP\\TEST.BMP"

        caseof 3000 : return wm_close

    endselect

    setmenuitem 0
    return false

}

thread.do{

    BILDSAVE "C:\\TEMP\\TEST.BMP"
    oldPaperColor=paperColor
    paperColor=getPaperColor(hDC,100,100)
    diff=paperColor-oldPaperColor

    if diff>64 {

        SetText dhwnd,"BOING, Blatt wurde gedruckt!  "+Str$(diff)

    } elseif diff<-64 {

        SetText dhwnd,"BOING, Blatt wurde aus dem drucker genommen!"

    }

    long xx=width(dhwnd),yy=height(dhwnd)

    if xx-hwndXX+yy-hwndyy {

        setwindowpos previewHandle=0,0 - width(dhwnd),height(dhwnd);0
        hWndXX=xx
        hWndYY=yy

    }

    return null

}

/*
clearclip
put
tri(getwindowlong(hwnd,gwl_style)) 349118464 256 -1810948096-1810948096 256 setstyle hwnd,-1810948096 */
 
24.02.2013  
 



Höllencode,

müsste erstmal ganze thread.pcu ausgebaut werden.

Setze mal SendMessage(previewHandle, WM_CAP_SET_OVERLAY, true, 0) auf
false statt true.
 
24.02.2013  
 




Rolf
Koch
War mir klar, war ja nur n testcode
und das ändern auf false ändert leider auch nichts bleibt bei 255.
 
24.02.2013  
 



Löl, hab ne WebCam rausgekrümelt und es fix umgefärcht:
KompilierenMarkierenSeparieren
 {$cleq}
const appTitle="iFantaCam"
const appVer=0.0
long paperColor,oldPaperColor,diff,h

Proc BILDSAVE

    Parameters Filename$
    Sendmessage(previewHandle,&WM_CAP_FILE_SAVEDIB,0,ADDR(Filename$))

EndProc

long mouse.x,mouse.y
mem mouse.mem=point

mouse.doLeftKlick {

    mouse_event(2, 0,0  ,0,0)
    mouse_event(4, 0,0  ,0,0)

}

lm_{return if(getasynckeystate(1)==0,false,true)}
rm_{return if(getasynckeystate(2)==0,false,true)}

whilem_{

    while (lm_() | rm_()){

        sleep 10

    }

}

getmousepos{

    GetCursorPos(mouse.mem)
    mouse.x=mouse.mem::x&
    mouse.y=mouse.mem::y&

}

setmousepos(long x,y){;setcursorpos(x,y);}

clipmouse(long x,y,xx,yy){

    mem mem=rect
    mem::left&=x
    mem::top&=y
    mem::right&=xx
    mem::bottom&=yy
    clipcursor(mem)
    dispose mem

}

mouse.close{

    dispose mouse.mem

}

Def &WM_CAP_FILE_SAVEAS 1047
Def &WM_CAP_FILE_SAVEDIB 1049
const wm_cap_start = $400
const wm_cap_edit_copy = (wm_cap_start + 30)
const wm_cap_driver_connect = (wm_cap_start + 10)
const wm_cap_set_previewrate = (wm_cap_start + 52)
const wm_cap_set_overlay = (wm_cap_start + 51)
const wm_cap_set_preview = (wm_cap_start + 50)
const wm_cap_set_scale = (wm_cap_start + 53)
const wm_cap_driver_disconnect = (wm_cap_start + 11)
const wm_cap_dlg_videocompression = (wm_cap_start + 46)
const wm_cap_dlg_videodisplay = (wm_cap_start + 43)
const wm_cap_dlg_videosource = (wm_cap_start + 42)
const wm_cap_dlg_videoformat = (wm_cap_start + 41)
long dll=usedll("avicap32.dll")
windowtitle appTitle
windowstyle 80 | 1024
window 0,0 - 0,0
windowstyle 1 | 2 | 4 | 8 | 16 | 512
long dhWnd=createwindow(0,apptitle,100,100,350,300)
setStyle dhwnd,349118464
long nCameraID
long previewHandle = external("avicap32.dll","capCreateCaptureWindowA","Video", WS_CHILD + WS_VISIBLE, 0, 0, width(dhwnd), height(dhwnd), dhwnd, 1)
SendMessage(previewHandle, WM_CAP_DRIVER_CONNECT, nCameraID, 0)
SendMessage(previewHandle, WM_CAP_SET_PREVIEWRATE, 200, 0)
SendMessage(previewHandle, WM_CAP_SET_SCALE, true, 0)
SendMessage(previewHandle, WM_CAP_SET_OVERLAY, false, 0)
SendMessage(previewHandle, WM_CAP_SET_PREVIEW, true, 0)
usermessages wm_close,wm_size,wm_contextmenu
long hWndXX=width(dhwnd),hWndYY=height(dhwnd)
setWIndowPos previewHandle=0,0 - 320,200
//
long dc=getDC(previewHandle)
//

do {

    waitinput 100
    thread.do()

    select %umessage

        caseof wm_close : break

        caseof wm_contextmenu

        select dhWnd.contextMenu()

            caseof wm_close : break

        endselect

    endselect

}

SendMessage(previewHandle, WM_CAP_DRIVER_DISCONNECT, nCameraID, 0)
destroywindow(previewHandle)
freedll dll
end

nProc getPaperColor(long dc,x,y){

    long r,g,b,col,q,w

    whileloop 0,2 {

        q=loop

        whileloop 0,2 {

            w=loop
            col=getPixel(dc,x+q,y+w)
            add r,getRValue(col)
            add g,getGValue(col)
            add b,getBValue(col)

        }

    }

    div r,9
    div g,9
    div b,9
    add r,g
    add r,b
    div r,3
    return r

}

dhWnd.contextMenu{

    createmenu

    if getstyle(dhwnd)==349118464 {

        appendmenu 2000,"Shot"

    } else {

        appendmenu 2000,"Shot"

    }

    separator
    appendmenu 1000,"Videosource"
    appendmenu 1010,"Videoformat"
    appendmenu 1020,"Videodisplay"
    appendmenu 1030,"Videokompression"
    separator
    appendmenu 3000,"Beenden"
    getmousepos()
    trackmenu mouse.x,mouse.y

    select %menuitem

        caseof 1000 : sendmessage(previewHandle,WM_CAP_DLG_VIDEOSOURCE,0,0)

        caseof 1010 : sendmessage(previewHandle,WM_CAP_DLG_VIDEOFORMAT,0,0)

        caseof 1020 : sendmessage(previewHandle,WM_CAP_DLG_VIDEODISPLAY,0,0)

        caseof 1030 : sendmessage(previewHandle,WM_CAP_DLG_VIDEOCOMPRESSION,0,0)

        caseof 2000 : BILDSAVE "C:\\TEMP\\TEST.BMP"

        caseof 3000 : return wm_close

    endselect

    setmenuitem 0
    return false

}

thread.do{

    //BILDSAVE "C:\\TEMP\\TEST.BMP"
    oldPaperColor=paperColor
    paperColor=getPaperColor(dc,160,120)
    diff=paperColor-oldPaperColor

    if diff>64 {

        SetText dhwnd,"BOING, Blatt wurde gedruckt!  "+Str$(diff)

    } elseif diff<-64 {

        SetText dhwnd,"BOING, Blatt wurde aus dem drucker genommen!"

    }

    return null

}

/*
clearclip
putclip stri(getwindowlo
d,gwl_style)) 349118464 256 -1810948096-1810948096 256 setstyle hwnd,-1810948096 */

Wie lustig ist das denn... funktioniert!
 
25.02.2013  
 




Rolf
Koch
Bohaaaa wie GEIIIILLL - DANKE IF - Jetzt hab ich eine Grundlage
Wenn Du mir nun verraten kannst, wie ich es umgehe, dass ich nicht in C:\DEV\TEST speichern muss. Immer wenn ich woanders speichere, bekomme ich Assembler Meldung
 
25.02.2013  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

112.734 Views

Untitledvor 0 min.
rquindt17.05.2020
Rainer Hoefs10.03.2018
Rolf Koch20.01.2018
p.specht08.02.2017
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie