【问】屏幕粉笔

我是一道光_ 2009-04-27 06:58:03
加精
小弟近期要参加一个程序设计比赛,自由选材。
我想到的是比较实用的 屏幕粉笔工具 的开发,虽说先网上有好多的这个类型的小工具,可是不是自己的东西不是~~
我只是知道这个跟api有关联、屏幕截图,还有一些详细的我就不知道了...

请各位路过的大侠给点建议和意见哈~~
帮帮忙,不胜感激
...全文
1060 74 打赏 收藏 转发到动态 举报
写回复
用AI写文章
74 条回复
切换为时间正序
请发表友善的回复…
发表回复
DreamOnTheGo 2010-07-05
  • 打赏
  • 举报
回复
to lyserver
这个东西以前自己写个过简单的。直接在桌面上画的。你这样画后在没退出程序,只ctrl+e后怎么防止在其他操作时画出的图像不被系统抹去呢?
我是一道光_ 2009-05-03
  • 打赏
  • 举报
回复
你这也不是VB代码呀~

有没有更简单一点的其他办法来实现呢?
zzPandazz 2009-04-30
  • 打赏
  • 举报
回复

.686
.model flat,stdcall
option casemap:none

includelib WINDOWS.INC
includelib KERNEL32.INC
includelib USER32.INC
include masm32.inc
include gdi32.inc

includelib KERNEL32.LIB
includelib USER32.LIB
includelib masm32.lib
includelib gdi32.lib

include macro.asm
; -----------------------------------
; INPUT red, green & blue BYTE values
; OUTPUT DWORD COLORREF value in eax
; -----------------------------------
RGB macro red, green, blue ;输入RGB,合成一个32位值放在EAX中
xor eax, eax
mov ah, blue ; blue
mov al, green ; green
rol eax, 16
mov al, red ; red
endm

.data?
lpMsg MSG <>
TimerID dd ?
iCount dd ?
buffer db 100 dup(?)
hMine dd ? ;找到的NotePad的handle
hdc dd ? ;找到的NotePad的DC的Hand
hFont dd ? ;创建一种字体
.code
TimerProc proc
local cfRGB:COLORREF
local fnText:HGDIOBJ

invoke FindWindow,CTEXT('notepad'),NULL
.if (EAX==0)
invoke wsprintf,offset buffer,CTEXT("%d 没有找到记事本",10,13),iCount
invoke StdOut, offset buffer
inc iCount
ret
.endif
mov hMine,EAX ;保存NotePad的Handler

invoke GetDC,EAX ;取得 DC
mov hdc,EAX

invoke CreateFont,\
100,\
40,\
0,\
0,\
FW_BLACK,\
0,\
0,\
0,\
ANSI_CHARSET,\
OUT_DEFAULT_PRECIS,\
CLIP_CHARACTER_PRECIS,\
DEFAULT_QUALITY,\
DEFAULT_PITCH or FF_SWISS,\
CTEXT("宋体")
mov hFont,eax ;保存一下这种字体的handle
invoke SelectObject,hdc,hFont ;将这种字体设置给DC

RGB 200,200,50
invoke SetTextColor,hdc,eax ;准备好笔
RGB 0,0,255
invoke SetBkMode,hdc,eax ;准备好背景

invoke TextOut,hdc,50, 50,CTEXT('很黄很暴力...'),14 ;写字啦

invoke DeleteObject,hFont ;释放字体
invoke ReleaseDC,hMine,hdc ;释放DC
invoke wsprintf,offset buffer,CTEXT("画一下",13,10),NULL
invoke StdOut, offset buffer
ret
TimerProc endp

Start:
invoke SetTimer, NULL, 0, 1000, addr TimerProc ;200ms一次,触发 TimerProc
mov TimerID,eax ;存一下,释放的时候还要用

.WHILE TRUE
invoke GetMessage, ADDR lpMsg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR lpMsg
invoke DispatchMessage, ADDR lpMsg
.ENDW
invoke KillTimer, NULL, TimerID ;释放定时器

;暂停显示,回车键关闭
invoke StdIn,addr buffer,sizeof buffer
invoke ExitProcess,0

end Start

在记事本写字
f50282912 2009-04-29
  • 打赏
  • 举报
回复

Private Const WS_EX_LAYERED = &H80000
Private Const LWA_ALPHA = &H2
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then
Unload Me
End If
End Sub

Private Sub Form_Load()
Me.WindowState = 2
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3
Dim rtn As Long
rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes Me.hwnd, 0, 128, LWA_ALPHA
DrawWidth = 5
ForeColor = RGB(0, 0, 0)
i = False
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
i = True
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If i Then
PSet (X, Y)
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
i = False
End Sub


skyell 2009-04-29
  • 打赏
  • 举报
回复
强悍,学习
东方之珠 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 58 楼 lfsfxy9 的回复:]
多谢马大哥的支持哈~~
对于 东方蜘蛛... 也是高人~~
[/Quote]

不是我的,是别人的,我哪有这本事?
我是一道光_ 2009-04-29
  • 打赏
  • 举报
回复
我试过了

setwindowlong 这些都提示未定义,我再加的声明 ,倒是能运行了,可是没效果

不知是不是我哪里错了,可只有最大化的窗体...
sherry521 2009-04-29
  • 打赏
  • 举报
回复
东方蜘蛛 那图片不会是用代码动态会出来的吧?
renxz 2009-04-29
  • 打赏
  • 举报
回复
好贴子!!!!!!!!
shentailai 2009-04-29
  • 打赏
  • 举报
回复
太强大了....
我是一道光_ 2009-04-29
  • 打赏
  • 举报
回复
加油哈~~
虽说问题是解决了,可是人家的代码毕竟不是自己的东西,现在自己还是要从人家的代码里看出门道来的哈~~
学会的要是思考,如何思考。
大家的力量还是强大的...
我是一道光_ 2009-04-29
  • 打赏
  • 举报
回复
多谢马大哥的支持哈~~
对于 东方蜘蛛... 也是高人~~
kingjin88 2009-04-29
  • 打赏
  • 举报
回复
小胖的问题解决了,牛,还是大家的力量强大啊!
newredhat2 2009-04-29
  • 打赏
  • 举报
回复
牛人呀,不错, 学习
嗷嗷叫的老马 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 Chen8013 的回复:]
东方蜘蛛在玩什么花样?

谁能说一下?
[/Quote]

东方蜘蛛
tulong403 2009-04-29
  • 打赏
  • 举报
回复
好牛
tom_li33 2009-04-29
  • 打赏
  • 举报
回复
看见了口
feifeiyiwen 2009-04-29
  • 打赏
  • 举报
回复
让大家都学习,谢了。
37楼的头像哪来的,特像我女儿的照片。
Element 2009-04-29
  • 打赏
  • 举报
回复
唯有努力,我别无选择!
我是一道光_ 2009-04-29
  • 打赏
  • 举报
回复
那能否介绍一下呢哈~~
让大家都学习学习呗~~

加载更多回复(54)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧