forums.silverfrost.com Forum Index forums.silverfrost.com
Welcome to the Silverfrost forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Is there a need for this capability?
Goto page Previous  1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> General
View previous topic :: View next topic  
Author Message
wahorger



Joined: 13 Oct 2014
Posts: 1214
Location: Morrison, CO, USA

PostPosted: Wed Mar 31, 2021 5:02 pm    Post subject: Reply with quote

P.S. Is the grhandle=42 a literary reference?
Back to top
View user's profile Send private message Visit poster's website
DanRRight



Joined: 10 Mar 2008
Posts: 2813
Location: South Pole, Antarctica

PostPosted: Wed Mar 31, 2021 6:38 pm    Post subject: Reply with quote

Paul,
Can you for simplicity create separate function
copy_entire_graphics_screen_to_clipboard@ or i miss something and it exists already?
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Wed Mar 31, 2021 7:19 pm    Post subject: Reply with quote

Dan

There is no such routine at the moment.

It would be possible to put Bill's method into a ClearWin+ routine but it is generally not good practice to highjack the user's clipboard. It would be necessary to copy the clipboard and restore it after use.

It appears that screen capture can be done directly in other contexts but not in C and the Windows API which is what ClearWin+ uses.
Back to top
View user's profile Send private message AIM Address
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Thu Apr 01, 2021 12:24 pm    Post subject: Reply with quote

Here is the latest update on this subject. There is an undocumented function called grab_desktop_dib@ that avoids the need to use the clipboard. It works for 32 bits but not for 64 bits at the moment.

Code:
        use clrwin
        integer, parameter::grhandle = 42
        integer(7) hdib
        integer actual_width,actual_height,my_error
        actual_width = clearwin_info@("SCREEN_WIDTH")
        actual_height = clearwin_info@("SCREEN_DEPTH")
        call grab_desktop_dib@(hdib,0,0,actual_width,actual_height)
        my_error = create_graphics_region@(grhandle,actual_width,actual_height)
        my_error = dib_paint@(0,0,hdib,0,0)
        my_error = export_image@("image42.png")
        my_error = delete_graphics_region@(grhandle)
        call release_screen_dib@(hdib)
        end
Back to top
View user's profile Send private message AIM Address
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Thu Apr 01, 2021 2:33 pm    Post subject: Reply with quote

ClearWin+ has now been fixed so that the above sample will work for 64 bits as well as for 32 bits. Updated DLLs are available on request for users of v8.70.
Back to top
View user's profile Send private message AIM Address
DanRRight



Joined: 10 Mar 2008
Posts: 2813
Location: South Pole, Antarctica

PostPosted: Fri Apr 02, 2021 12:25 pm    Post subject: Reply with quote

Looks interesting. One question: is it possible with this method to save just the selected portion of the entire screen ? PrintScreen button started to offer recently such capability: you hit the PrintScreen and the monitor screen gets grayed and offer you to select the region to save
Back to top
View user's profile Send private message
John-Silver



Joined: 30 Jul 2013
Posts: 1520
Location: Aerospace Valley

PostPosted: Sat Apr 03, 2021 11:12 am    Post subject: Reply with quote

Dan, (and Bill)since:
Quote:

grhandle=42

... anything is possible ... life ... the universe .... and everything
(except 6x9 of course) ;Smile

... as for your enquiry to Paul:
Quote:
I perceive you are busy enough as it is.

... intergalactic gargleblasters , or 2, are a program developers' mainstay I'd have thought o no surprise to me that he works so quickly Wink
_________________
''Computers (HAL and MARVIN excepted) are incredibly rigid. They question nothing. Especially input data.Human beings are incredibly trusting of computers and don't check input data. Together cocking up even the simplest calculation ... Smile "
Back to top
View user's profile Send private message
wahorger



Joined: 13 Oct 2014
Posts: 1214
Location: Morrison, CO, USA

PostPosted: Sat Apr 03, 2021 2:48 pm    Post subject: Reply with quote

As far as grabbing the entire desktop, I think this is a great functionality to have, but does not satisfy the requirement that I have imposed so that I can grab a window and not have to select it (using the Windows snapshot function) or edit it (as I would for a full desktop grab). It is a function of convenience. Keystroke: done and saved.

One could debate that the ability to grab a window programmatically by the user does take control of the clipboard and changes the contents, but if you already would have done it anyway using a Windows Snapshot or Alt+PrntScrn, there is no additional harm done by doing this programmatically.

I have seen (MSDN documentation) that it is possible to dig deep into device contexts in Windows to grab video memory that shows the current window, but it exceeds both my expertise and willingness to invest time.
Back to top
View user's profile Send private message Visit poster's website
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Sat Apr 03, 2021 5:31 pm    Post subject: Reply with quote

Bill

I have added a routine that exports an image of a given window and I will provide details shortly (probably Monday).
Back to top
View user's profile Send private message AIM Address
wahorger



Joined: 13 Oct 2014
Posts: 1214
Location: Morrison, CO, USA

PostPosted: Sat Apr 03, 2021 7:13 pm    Post subject: Reply with quote

Awesome, Paul! Looking forward to giving it a try!
Back to top
View user's profile Send private message Visit poster's website
DanRRight



Joined: 10 Mar 2008
Posts: 2813
Location: South Pole, Antarctica

PostPosted: Sat Apr 03, 2021 8:29 pm    Post subject: Reply with quote

I use for videorecording nice program called Snaggit (right now it does not matter if this program is good or bad and it is not about making videorecording functionality) and what it doing really handy is that after you start it - it offers you to select one of many your open windows with mouse by highlighting each window when you move your mouse over the screen. As soon as you click on the window you want, it grabs the position of the window and the video recording starts. Same actions are for the photo recording. Same windows selection functionality with Clearwin would be great. You can then grab series if still images of specific window during the program run and later user with different software could make a movies out of them. This Clearwin function would ask you to select the window you want and then all next times it will be called it will use this selection without asking
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Mon Apr 05, 2021 4:08 pm    Post subject: Reply with quote

Bill

Here is a sample program that illustrates what you will be able to do with the updated ClearWin+....

Code:
module mymod
  use clrwin
  integer(7) hwnd
contains
integer function export()
  iw = export_window_image@(hwnd,"image.png",0_3)
  export = 2
end function
end module

winapp
program main
 use mymod
 iw = winio@("%ca[Capture Window Image]&")
 iw = winio@("%hw&",hwnd)
 iw = winio@("%cn%^bb[Export]", export)
end program


export_window_image@ uses the HWND of the current window and exports its image to the given file. The third argument is reserved and must be zero.
Back to top
View user's profile Send private message AIM Address
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Mon Apr 05, 2021 4:18 pm    Post subject: Reply with quote

Dan

Your request posed an interesting challenge. The following program illustrates what will be possible with an updated ClearWin+. It presents a symbol. When you drag this symbol and drop it over a window then an image of that window is copied to the speciified file.
Code:
module mymod
  use mswin
  integer(7) hMain,hStatus
  logical mouseDown
contains
integer function find()
  integer(7) hOld,hCur
  mouseDown = .true.
  hCur = SetCursor(LoadResource@("find","Cursor"))
  hOld = SetCapture(hMain)
  find = 3
end function

integer function export()
  integer(7) hThis,hfgrd,hCur
  logical L
  mouseDown = .false.
  L      = ReleaseCapture()
  hCur   = SetCursor(LoadResource@("Arrow","Cursor"))
  hThis  = WindowAtCursor@(0_3)
  hfgrd  = GetForegroundWindow()
  L      = BringWindowToTop(hThis)
  iw     = export_window_image@(hThis,"image.png",0_3)
  L      = BringWindowToTop(hfgrd)
  call set_status_text@(hStatus, 0, " Window image saved to image.png")
  export = 3
end function

integer function move()
  integer pos(2)
  character(40) txt
  logical L
  if(mouseDown)then
    L  = GetCursorPos(pos)
    write(txt, "('(',i4,',',i4,')')") pos
    call set_status_text@(hStatus, 0, trim(txt))
  else
    call set_status_text@(hStatus, 0, "Drag the symbol to capture a window image")
  endif 
  move = 3
end function
end module mymod

winapp
use mymod
mouseDown = .false.
iw = winio@("%ca[Capture Window Image]&")
iw = winio@("%mg&", WM_LBUTTONDOWN, find)
iw = winio@("%mg&", WM_LBUTTONUP,   export)
iw = winio@("%mg&", WM_MOUSEMOVE,   move)
iw = winio@("%sb%lc&", hStatus)
iw = winio@("%hw&", hMain)
iw = winio@("%cn%`bm[static]&", LoadResource@("capture","Bitmap"))
iw = winio@("%ff%nl%cn%6bb[Close]")
end

resources
find    CURSOR find.cur
capture BITMAP capture.bmp
Back to top
View user's profile Send private message AIM Address
wahorger



Joined: 13 Oct 2014
Posts: 1214
Location: Morrison, CO, USA

PostPosted: Mon Apr 05, 2021 6:21 pm    Post subject: Reply with quote

Paul, this would be perfect for me.

Thanks, I shall await the updated Clearwin+!

Bill
Back to top
View user's profile Send private message Visit poster's website
DanRRight



Joined: 10 Mar 2008
Posts: 2813
Location: South Pole, Antarctica

PostPosted: Mon Apr 05, 2021 10:19 pm    Post subject: Reply with quote

Thanks Paul,
please inform when the DLLs will be ready, right now these functions are missing

WINDOWATCURSOR#
EXPORT_WINDOW_IMAGE
LOADRESOURCE
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> General All times are GMT + 1 Hour
Goto page Previous  1, 2, 3, 4, 5  Next
Page 3 of 5

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group