Fortran Coder

查看: 2829|回复: 5
打印 上一主题 下一主题

[绘图界面库] fortran读写剪贴板

[复制链接]

125

帖子

33

主题

0

精华

宗师

F 币
1574 元
贡献
800 点
跳转到指定楼层
楼主
发表于 2022-4-12 10:42:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
VS+ivf+Win环境下,Fortran能否读、写系统的剪贴板呢?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

125

帖子

33

主题

0

精华

宗师

F 币
1574 元
贡献
800 点
6#
 楼主| 发表于 2023-2-28 16:42:00 | 只看该作者
fcode 发表于 2023-2-28 16:07
这......自己挖自己的坟?一年了,老哥。

一直用的Win 7

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

5#
发表于 2023-2-28 16:07:58 | 只看该作者
这......自己挖自己的坟?一年了,老哥。

125

帖子

33

主题

0

精华

宗师

F 币
1574 元
贡献
800 点
地板
 楼主| 发表于 2023-2-28 10:02:46 | 只看该作者
本帖最后由 andy8496 于 2023-2-28 10:07 编辑

我依葫芦画瓢写了个设置剪贴板内容的子程序,Win 7能正常运行,但是Win 10就不行了……烦请大神帮给看看,多谢多谢!





[Fortran] 纯文本查看 复制代码
subroutine setClipboardText( text )
  use , intrinsic :: ISO_C_Binding
  use user32
  use kernel32
  Character(len=*) :: text
  integer     :: hData , j
  type(c_ptr) :: cp
  character(len=len(text)) , pointer :: p

  if ( 0==OpenClipboard(0) ) return
  j = EmptyClipboard()

  hData = GlobalAlloc(GMEM_MOVEABLE,len(text)+1)
  if ( hData /= 0 ) then
    call c_f_pointer(transfer(GlobalLock(hData),cp),p)
    p = text
    j = GlobalUnlock(hData)
    j = SetClipboardData(CF_TEXT,hData)
  end if
  j = CloseClipboard()
End subroutine

125

帖子

33

主题

0

精华

宗师

F 币
1574 元
贡献
800 点
板凳
 楼主| 发表于 2022-4-12 15:16:02 | 只看该作者
楚香饭 发表于 2022-4-12 12:02
这个以前恰好写过。不过只能读取粘贴板里的纯文本。对于 图像,文件,其他数据类型没有用。

[mw_shl_code= ...

ISO_C_Binding真是大神器啊!
多谢老群主!

725

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
657 元
贡献
337 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2022-4-12 12:02:31 | 只看该作者
本帖最后由 楚香饭 于 2022-4-12 12:15 编辑

这个以前恰好写过。不过只能读取粘贴板里的纯文本。对于 图像,文件,其他数据类型没有用。

[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  implicit none
  character(len=100) :: c
  integer :: j
  j = getClipboardText(c)
  if(j>0) write(*,'(a)') trim(c)

contains

  Integer Function getClipboardText( text ) result( length )
    use , intrinsic :: ISO_C_Binding
    use user32
    use kernel32
    Character(len=*) :: text
    integer     :: hData , j
    type(c_ptr) :: cp
    character(len=len(text)) , pointer :: p
    length = 0
    text   = ""
    if ( 0==OpenClipboard(0) ) return
    hData = GetClipboardData(CF_TEXT)
    if ( hData /= 0 ) then
      call c_f_pointer(transfer(GlobalLock(hData),cp),p)
      length = index(p,c_null_char)-1
      if(length<0) length = len(text)
      text = p(:length)
      j = GlobalUnlock(hData)
    end if
    j = CloseClipboard()
  End Function getClipboardText

End Program www_fcode_cn

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-23 22:10

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表