2012-09-14 16:50:22 chenjl1031 阅读数 2300
  • VB程序设计入门基础

    VB入门基础。 清楚易懂,适合初学者 本课程主要从开发环境、窗体、命令按钮、文本框、标签、消息框和输入框、代码基础、选择结构、循环结构、数组、过程、控件等方面进行讲解

    3733 人正在学习 去看看 田万国

    有网友问我,VB的文本框控件TextBox能否打开Office的Word文档。VB的TextBox是Ansi版本的,通过open语句打开载入到TextBox中,肯定是乱码,没啥说的。但是,我们可以通过间接的方式打开Office的Word文档,通过一系列的API调用,将文档转换到TextBox中,而且保留了Word的版式(除字体变化以外)。请看下面程序:

    标准模块:

'标准模块
Option Explicit
Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Public Const WM_GETTEXT As Long = &HD&
Public Const WM_SETTEXT As Long = &HC&
Private Const EM_GETLINECOUNT As Long = &HBA&
Private Const EM_GETLINE As Long = &HC4&
Public Const WM_CLOSE As Long = &H10& '关闭窗口消息

Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function EnumChildWindows Lib "user32.dll" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
'Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Public OfficeWordFileName As String 'Office Word File Name(DOC格式的)
Public WordPadHwnd As Long '写字板窗口句柄

Public Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean
       Dim WindowCaption As String, LengthCaption As Long ', WindowClassName As String * 256
       LengthCaption = GetWindowTextLength(hWnd)
       WindowCaption = Space(LengthCaption)
       Call GetWindowText(hWnd, WindowCaption, LengthCaption + 1)
       If InStr(1, WindowCaption, OfficeWordFileName) > 0 Then
          EnumChildWindows hWnd, AddressOf EnumChildWindowsProc, ByVal 0&
          WordPadHwnd = hWnd '保存写字板句柄
          Debug.Print WordPadHwnd
          EnumWindowsProc = False
       End If
       EnumWindowsProc = True
End Function

Public Function EnumChildWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean
       Dim WindowClassName As String * 256
       Dim txtLineCount As Long, i As Long, TextString As String, sText As String
       Call GetClassName(hWnd, WindowClassName, 256)
       If InStr(1, WindowClassName, "RICHEDIT50W") > 0 Then
          txtLineCount = SendMessage(hWnd, EM_GETLINECOUNT, 0, ByVal 0&) '取得Word文档的行数
          If txtLineCount > 0 Then
             For i = 0 To txtLineCount - 1
                 Dim strTXT(1024) As Byte
                 strTXT(1) = 1
                 SendMessage hWnd, EM_GETLINE, i, strTXT(0) '取得每一行内容
                 sText = StrConv(strTXT, vbUnicode)
                 sText = Left$(sText, InStr(1, sText, Chr(0)) - 1) & vbCrLf
                 TextString = TextString & sText '连接每一行
             Next
             Form1.Text1.Text = TextString
          Else
             Form1.Text1.Text = "Word文件无内容"
          End If
          EnumChildWindowsProc = False
       End If
       EnumChildWindowsProc = True
End Function



Form1窗体模块:

'窗体上放1个文本框控件Text1、1个命令按钮Command1、1个通用对话框控件CommonDialog1
Option Explicit

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const SYNCHRONIZE As Long = &H100000

Private Sub Command1_Click()
    Dim Fname() As String, PIDshell As Long, hProcess As Long
    ' 设置“CancelError”为 True
    CommonDialog1.CancelError = True
    On Error GoTo ErrHandler
    ' 设置标志
    CommonDialog1.Flags = cdlOFNHideReadOnly
    ' 设置过滤器
    CommonDialog1.Filter = "Office Word Files(*.doc)|*.doc|All Files(*.*)|*.*"
    ' 指定缺省的过滤器
    CommonDialog1.FilterIndex = 1
    ' 显示“打开”对话框
    CommonDialog1.ShowOpen
    '取得选定文件的名字
    OfficeWordFileName = CommonDialog1.FileName
    PIDshell = Shell("C:\Program Files\Windows NT\Accessories\wordpad.exe " & OfficeWordFileName, vbHide)
    
    hProcess = OpenProcess(SYNCHRONIZE, 0, PIDshell)
    Debug.Print "PID:"; hProcess
    If hProcess <> 0 Then
       WaitForSingleObject hProcess, 1000& '等待1秒,让shell执行完毕
       CloseHandle hProcess
    End If
    
    Fname = Split(OfficeWordFileName, "\")
    OfficeWordFileName = Fname(UBound(Fname))

    'Sleep (1000) '等待1秒,让shell执行完毕

    EnumWindows AddressOf EnumWindowsProc, ByVal 0&
    
    Exit Sub
    
ErrHandler:
    ' 用户按了“取消”按钮
    Exit Sub
End Sub


Private Sub Form_Load()
    Command1.Caption = "打开 Office Word 文档"
End Sub

Private Sub Form_Unload(Cancel As Integer)
    SendMessage WordPadHwnd, WM_CLOSE, 0&, ByVal 0& '关闭写字板程序
End Sub

2005-04-07 08:47:00 qiqian_17 阅读数 1019
  • VB程序设计入门基础

    VB入门基础。 清楚易懂,适合初学者 本课程主要从开发环境、窗体、命令按钮、文本框、标签、消息框和输入框、代码基础、选择结构、循环结构、数组、过程、控件等方面进行讲解

    3733 人正在学习 去看看 田万国
我想再vb环境中调用word程序,打开一个word文档,请帮帮忙!!
2015-11-30 17:26:12 Eiceblue 阅读数 893
  • VB程序设计入门基础

    VB入门基础。 清楚易懂,适合初学者 本课程主要从开发环境、窗体、命令按钮、文本框、标签、消息框和输入框、代码基础、选择结构、循环结构、数组、过程、控件等方面进行讲解

    3733 人正在学习 去看看 田万国

如今,Microsoft Office PowerPoint在我们日常生活中的应用已经很广泛了,利用Microsoft Office PowerPoint不仅可以创建演示文稿,还可以在互联网上召开面对面会议、远程会议或在网上给观众展示演示文稿等。那么,怎样做出有趣、生动、美观的PowerPoint文档呢?其中一个很好的选择就是向文档中插入视频。这样可以使读者更好地理解文档的内容,增加读者的兴趣。那么开发者如何通过编程的方式来实现这一功能呢?本文将给大家分享如何使用免费版PowerPoint组件—Spire.Presentation以C#/VB.NET编程的方式来向PPT文档插入视频。

Spire.Presentation简介

Spire.Presentation for .NET是一款专业的PowerPoint兼容组件,使开发人员能够在.NET平台(C#,VB.NET,ASP.NET)上创建,读,写,修改,转换和打印PowerPoint文档,并且不需要安装Microsoft PowerPoint软件。Spire.Presentation for .NET 支持的格式有PPT,PPS,PPTX及PPSX。它提供了很多实用的功能,如管理文本,图像,形状,表格,动画,音频和视频等。此外,它还支持将幻灯片导出为EMF,JPG,TIFF,PDF等格式。

有需要的朋友可以从E-iceblue官网下载安装。

下面是详细步骤:

注意:在创建项目后,添加相关.dll文件作为项目引用。

代码片段:

步骤1:新建一个PPT文档。

Presentation presentation = new Presentation();

步骤2:使用presentation.Slides[0].Shapes.AppendVideoMedia()方法来插入视频。

presentation.Slides[0].Shapes.AppendVideoMedia(@"小毛驴.mp4", new RectangleF(100, 100, 20, 20));  //用户可以根据自己的需要来设置参数的大小

步骤3:添加形状来展示文本并保存PPT文档。

IAutoShape shape = presentation.Slides[0].Shapes.AppendShape(ShapeType.Rectangle, new RectangleF(50, 150, 600, 250));  //用户可以根据自己的需要来设置参数的大小
presentation.SaveToFile("video.pptx", FileFormat.Pptx2010);

效果图:

这里写图片描述

全部代码:
C#:

using System.Drawing;
using System.IO;
using Spire.Presentation;
using Spire.Presentation.Drawing;
namespace InsertVideo
{
    class Program
    {
        static void Main(string[] args)
        {
            Presentation presentation = new Presentation();

            //设置背景图片
            string ImageFile = @"花朵.jpg";
            RectangleF rect = new RectangleF(0, 0, presentation.SlideSize.Size.Width, presentation.SlideSize.Size.Height);
            presentation.Slides[0].Shapes.AppendEmbedImage(ShapeType.Rectangle, ImageFile, rect);
            presentation.Slides[0].Shapes[0].Line.FillFormat.SolidFillColor.Color = Color.FloralWhite;

            presentation.Slides[0].Shapes.AppendVideoMedia(@"小毛驴.mp4", new RectangleF(100, 100, 20, 20));

            IAutoShape shape = presentation.Slides[0].Shapes.AppendShape(ShapeType.Rectangle, new RectangleF(50, 150, 600, 250));
            shape.ShapeStyle.LineColor.Color = Color.White;
            shape.Fill.FillType = Spire.Presentation.Drawing.FillFormatType.None;
            shape.AppendTextFrame("我有一只小毛驴我从来也不骑,有一天我心血来潮骑着去赶集,");

            shape.TextFrame.Paragraphs.Append(new TextParagraph());
            shape.TextFrame.Paragraphs[1].TextRanges.Append(new TextRange("我手里拿着小皮鞭我心里正得意,不知怎么哗啦啦啦我摔了一身泥。"));
            foreach (TextParagraph para in shape.TextFrame.Paragraphs)
            {
                para.TextRanges[0].LatinFont = new TextFont("Arial Rounded MT Bold");
                para.TextRanges[0].Fill.FillType = FillFormatType.Solid;
                para.TextRanges[0].Fill.SolidColor.Color = Color.Black;
                para.Alignment = TextAlignmentType.Left;
                para.Indent = 35;
            }

            presentation.SaveToFile("video.pptx", FileFormat.Pptx2010);
            System.Diagnostics.Process.Start("video.pptx");
        }
    }
}

VB.NET:

Imports System.Drawing
Imports System.IO
Imports Spire.Presentation
Imports Spire.Presentation.Drawing
Module Module1

    Sub Main()
        Dim presentation As New Presentation()

        '设置背景图片
        Dim ImageFile As String = "花朵.jpg"
        Dim rect As New RectangleF(0, 0, presentation.SlideSize.Size.Width, presentation.SlideSize.Size.Height)
        presentation.Slides(0).Shapes.AppendEmbedImage(ShapeType.Rectangle, ImageFile, rect)
        presentation.Slides(0).Shapes(0).Line.FillFormat.SolidFillColor.Color = Color.FloralWhite

        presentation.Slides(0).Shapes.AppendVideoMedia("小毛驴.mp4", New RectangleF(100, 100, 20, 20))

        Dim shape As IAutoShape = presentation.Slides(0).Shapes.AppendShape(ShapeType.Rectangle, New RectangleF(50, 150, 600, 250))
        shape.ShapeStyle.LineColor.Color = Color.White
        shape.Fill.FillType = Spire.Presentation.Drawing.FillFormatType.None
        shape.AppendTextFrame("我有一只小毛驴我从来也不骑,有一天我心血来潮骑着去赶集,")

        shape.TextFrame.Paragraphs.Append(New TextParagraph())
        shape.TextFrame.Paragraphs(1).TextRanges.Append(New TextRange("我手里拿着小皮鞭我心里正得意,不知怎么哗啦啦啦我摔了一身泥。"))
        For Each para As TextParagraph In shape.TextFrame.Paragraphs
            para.TextRanges(0).LatinFont = New TextFont("Arial Rounded MT Bold")
            para.TextRanges(0).Fill.FillType = FillFormatType.Solid
            para.TextRanges(0).Fill.SolidColor.Color = Color.Black
            para.Alignment = TextAlignmentType.Left
            para.Indent = 35
        Next

        presentation.SaveToFile("video.pptx", FileFormat.Pptx2010)
        System.Diagnostics.Process.Start("video.pptx")
    End Sub

End Module
2019-08-10 15:24:44 systemino 阅读数 106
  • VB程序设计入门基础

    VB入门基础。 清楚易懂,适合初学者 本课程主要从开发环境、窗体、命令按钮、文本框、标签、消息框和输入框、代码基础、选择结构、循环结构、数组、过程、控件等方面进行讲解

    3733 人正在学习 去看看 田万国

宏混淆工具

Macro_Pack是一个用于自动化混淆及生成Office文档、VB脚本、快捷方式等文件的工具,其主要用于渗透测试、demo以及社会工程学评估。macro_pack的目标是简化利用流程,反恶意软件绕过,并自动化实现从vba生成到最终Office文档生成的过程。

Github:https://github.com/sevagas/macro_pack

Macro_Pack分为专业模式和普通模式,专业模式包含了更多的混淆手段,但源码现在并未公开出来。普通模式的混淆手段包括“名称混淆”、“字符串混淆”以及“格式混淆”。

 

如下为混淆执行流程,普通模式只会执行”ObfuscateNames”、”ObfuscateStrings”以及”ObfuscateForm”;而专业模式还会执行”AvBypass”、”UACBypass”等,通过函数名猜测其应该为杀软绕过、UAC绕过等功能,可以看出专业模式确实很强大且过于“武器化”,作者也是出于这方面考虑才没有公开。

 

名称混淆

通过关键字的正则匹配,查找出保留函数以外的自定义过程(Sub)及函数(Function)名称,并保存到列表vbaFunctions中:

 

保留函数为VBA的一些开始函数,如”AutoOpen”、”Workbook_Open”:xise

 

逐行查找vbaFunctions列表中的函数名,在定义及调用处将其替换为随机字符串:

 

同样的,通过“String”、”Integer”等关键字的正则匹配查找出变量声明,然后在其声明及使用处将其替换为随机字符串:

 

对常数“0”“1”“2”,在开头使用随机字符串定义为Const常量,然后在后面使用这3个常数的地方将其替换:二四六天天好

 

最后,用同样的方式将导入函数名替换为随机字符串

 

字符串混淆

识别到宏代码中的字符串后,将其随机进行切分后用“&”连接

 

 

将字符串编码为16进制,并作为参数传给16进制解码函数“HexToStr”

 

HexToStr函数如下,用于在VBA运行起来后解码字符串:

 

HexToStr函数名及其中使用的变量名用随机字符串替换:

 

格式混淆

移除宏代码中的注释

 

将制表符替换为空格:

 

移除每行宏代码前的空格,即缩进,降低代码可读性:

 

混淆效果

使用macro_pack可分别生成非混淆和混淆的宏,效果如下:

非混淆:

结构清晰,可读性强,能够看到包含明显的特征信息。

 

混淆:

上面的宏混淆后如下,可以看到混淆后的宏代码静态已经几乎不可读,并且也抹去了很多特征信息。

 

写在最后

防止逆向工程并不是Macro_Pack混淆的主要目的,其主要目的是防止防病毒检测。以上内容主要是针对Macro_Pack工具对宏代码的混淆方法进行分析,供测试人员,安全研究人员或其他有学习目的的人交流学习使用。

有点累
2008-07-28 13:08:00 ywmill 阅读数 176
  • VB程序设计入门基础

    VB入门基础。 清楚易懂,适合初学者 本课程主要从开发环境、窗体、命令按钮、文本框、标签、消息框和输入框、代码基础、选择结构、循环结构、数组、过程、控件等方面进行讲解

    3733 人正在学习 去看看 田万国

        中午终于开始写处理Office文档的程序了,不过目前还停留在利用Office的窗口控制的阶段,离权限控制似乎还有一段距离,其实MFC对OLE的支持提供了多种编程方法,我了解的应该是其中一种,另外一种构建OLEDOC的方法应该才是我真正需要的。不过对OFFICE这东西真的很恼火,明明C程序员也比较多,微软提供的大多数文档竟都只有针对VB和C#的,编程时遇到一些常数找不到之类的小问题也要大动肝火才能解决。

        本来上午定的是与老师一起讨论遇到的问题的,但临时取消了,正好给我多一点时间完成任务。上周似乎只有前几天真正做出了点成果,周六周日回家由于太舒服,看了看《寻秦记》,很快就度过了,以前很多情节都没看过,还是蛮有意思的。下周hy过生日,也没想好送什么,礼物还真是个伤脑筋的事。不管了,到时候看情况随机应变吧。

        今天下午想写一个嵌入word 2003的小东西,觉得肯定很有意思。以前对COM不了解,对OLE只是数据库中听说过,没想到这些少有人发掘的东西还有这么强大的功能。

        经过几周的学习,证明了我当初的想法是一个多么大的错误,只要我们还用着微软的OS,COM技术在这几年内都是不可能过时的。

 

  

office word插件开发1

阅读数 3671

转载请注明出处

博文 来自: qq_22381275
没有更多推荐了,返回首页