目前分類:軟體與通訊工程專欄 (79)

瀏覽方式: 標題列表 簡短摘要
換台電腦後 找不到.dll模組的錯誤警告:

使用Visual C++ 2010 產生win32 dll檔 給vb2010 引用 , 在裝有開發環境visual IDE下跑 可以正常呼叫dll 內的函數
但是把vb2010產生的執行檔和 dll 拿到另一台沒裝 visual IDE 的電腦
無論是xp or win7 都會出現 找不到.dll模組的錯誤警告

除了注意執行檔要跟呼叫的dll放在同目錄下以外
另有一點需要特別注意
在編譯C dll 的時候 , 預設會產生動態dll , (檔案較小)
如果遇到以上問題, 可以在編譯C dll的時候 設定為產生靜態dll (檔案變大5倍!!)



解決方法:
會發生這個問題的原因是因為當選擇編譯native win32程式的時候,VC2005是預設動態連結.dll函數庫,這個函數庫是要安裝VC2005才會裝上去的,所以在沒有安裝VC2005的電腦上您編譯的原生程式無法執行,這時我們選擇靜態連結函數庫即可解決這個問題。

作法是:
1.在專案上按右鍵,然後選properties。
2.看左側,打開C/C++折疊,選Code Generation。
3.之後看右邊的Runtime Library欄位,改選為靜態連結/MT(這個不包含debug資訊)或是/MTD(這個包含debug資訊)即可。

prague12 發表在 痞客邦 留言(0) 人氣()

Imports System.IO
Imports System.Data
Public Class Form2
Public Function getCSVtoDataTable(ByVal path As String) As DataTable

Dim dt As New DataTable()
Dim line As String = Nothing
Dim i As Integer = 0
Dim column_j As Integer = -6
Using sr As StreamReader = File.OpenText(path)
line = sr.ReadLine()

Do While line IsNot Nothing
Dim dataArray() As String = line.Split(",")
If dataArray.Length > 0 Then

'----- 為了在第一次產生column :only i=0----
If i = 0 Then
For Each item In dataArray 'N項 就先產生 N個column
dt.Columns.Add(New DataColumn(column_j.ToString))
column_j = column_j + 1
Next item
i += 1
End If
'----- /為了在第一次產生column :only i=0/----
Dim row As DataRow = dt.NewRow() ' 注意 Datarow 必須依附datatable 來新增 row
row.ItemArray = dataArray
dt.Rows.Add(row)
End If
line = sr.ReadLine() ' 對每一行row 處理
Loop

End Using

Return dt
End Function



Private Sub TabPage1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabPage1.Click
Dim table = New DataTable
Try
table = getCSVtoDataTable("c:\temp\t1.csv")
Catch ex As Exception
MsgBox(ex.ToString)
End Try

DataGridView1.DataSource = table
DataGridView1.AutoResizeColumns()
End Sub

Private Sub TabPage2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabPage2.Click
Dim table = New DataTable
Try
table = getCSVtoDataTable("c:\temp\t2.csv")
Catch ex As Exception
MsgBox(ex.ToString)
End Try

DataGridView2.DataSource = table
DataGridView2.AutoResizeColumns()
End Sub
End Class

prague12 發表在 痞客邦 留言(0) 人氣()

vb2010~傳"陣列"給C原生dll使用,傳址呼叫使用方法
注:vb 的 二維陣列宣告AA(x,y) 本質上與C 宣告二維陣列 AA[x][y] 是一樣的, 實質上都是連續的串接一維陣列!!

=============
Part A. (由C/C++ 產生dll , 非COM元件型動態dll)
=============
// dll.cpp : 定義 DLL 應用程式的匯出函式。
#include "stdafx.h"
#include
#include
//using namespace std;

extern "C"
{
__declspec(dllexport) void add(int a ,int b , float &c);
__declspec(dllexport) void add_array(int* data , int *c,int *d );
__declspec(dllexport) void add_array2D(int* data , int *c,int *d, int *e);
}


__declspec(dllexport) void add_array2D(int* data , int *c,int *d ,int *e)
{
*c= data[0];
*d= data[1];
*e= data[2];
}
__declspec(dllexport) void add_array(int* data , int *c,int *d)
{
*c= data[0];
*d= data[1];
}

__declspec(dllexport) void add(int a ,int b , float &c)
{
c= (float) a+b;
}





//==========================
PartB . (由 vb2010 重新引用 dll, 並對應傳址呼叫 傳陣列進出dll)
//================================

Imports System.Runtime.InteropServices

Public Class Form1

Public Declare Auto Sub ADD Lib "dll" Alias "add" (ByVal a As Integer, ByVal b As Integer, ByRef c As Single)
'__declspec(dllexport) void add_array(int* data , int *c,int *d );
Public Declare Auto Sub ADD_array Lib "dll" Alias "add_array" (ByRef data As Int32, ByRef c As Int32, ByRef d As

Int32)
'__declspec(dllexport) void add_array2D(int* data[] , int *c,int *d)
Public Declare Auto Sub ADD_array2D Lib "dll" Alias "add_array2D" (ByRef data As Int32, ByRef c As Int32, ByRef

d As Int32, ByRef e As Int32)





Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim c As Int32 = 0
Dim d As Int32 = 0
Dim ee As Int32 = 0
'ADD(11, 22, cc)
Dim data As Int32() = {4, 8}
Dim data2D(,) As Int32 =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}
'data2D(0, 0) = 1
'data2D(0, 1) = 2
'data2D(0, 2) = 3
'data2D(1, 0) = 4
'data2D(1, 1) = 5
'data2D(1, 2) = 6
'data2D(2, 0) = 7
'data2D(2, 1) = 8
'data2D(2, 2) = 9


' ADD_array(data(0), c, d) '------- ok

ADD_array2D(data2D(0, 0), c, d, ee) '------------ok

MsgBox("c=" + c.ToString + "d=" + d.ToString + "e=" + ee.ToString)

End Sub
End Class

prague12 發表在 痞客邦 留言(0) 人氣()

'----混合table 後 依時間排序---------
Dim Table_mix As New DataTable
'產生強型欄位
Table_mix.Columns.Add("DataTime", System.Type.GetType("System.DateTime")) '0
Table_mix.Columns.Add("AlarmCount", System.Type.GetType("System.Int32")) '1
Table_mix.Columns.Add("ActionCount", System.Type.GetType("System.Int32")) '2

For Each row In Table_AlarmRate.Rows
Dim rr As DataRow
rr = Table_mix.NewRow
rr(0) = row(0)
rr(1) = row(1)
rr(2) = 0
Table_mix.Rows.Add(rr)
Next
For Each row In Table_AlarmAction.Rows
Dim rr As DataRow
rr = Table_mix.NewRow
rr(0) = row(0)
rr(1) = 0
rr(2) = row(1)
Table_mix.Rows.Add(rr)
Next
Dim Table_mix_sortRows = From row In Table_mix Order By row.Item(0) Ascending Select row '依時間項(0)排序
' DataGridView2.DataSource = ss.CopyToDataTable
'Dim Table_mix_orderbyTime = ss.CopyToDataTable

' Dim NN = ss.Count
' Table_mix.Clear()
Dim Table_mix_orderbyTime As New DataTable
For Each col In Table_mix.Columns
Table_mix_orderbyTime.Columns.Add(col.ToString)
Next
For Each row In Table_mix_sortRows
Table_mix_orderbyTime.ImportRow(row)
' Dim a = 1
Next

DataGridView2.DataSource = Table_mix_orderbyTime
DataGridView2.Columns("DataTime").DefaultCellStyle.Format = "yyyy-MM-dd hh:mm:ss"
DataGridView2.Columns(0).Width = 150
' ---/混合table 依時間排序/---------

prague12 發表在 痞客邦 留言(0) 人氣()

引用自:
http://tw.myblog.yahoo.com/w047/article?mid=1694&sc=1


注意,如果主機的閘道器 IP address改變,MAC address通常也會跟著變動,這時下達 arp -d 就可以將原先設定的 ARP table對應資訊清除掉。



ARP命令的各參數的功能如下:

-s:將相應的IP地址與物理地址的捆綁,如本文中的例子。
-d:刪除相應的IP地址與物理地址的捆綁。
-a:通過查詢ARP協議表顯示IP地址和對應物理地址情況。


NetCUT原理

要破解使用Netcut造成的斷線問題,必須先了解Netcut的運作原理。由於Netcut使用的是假造ARP封包造成目標主機ARP table記錄錯誤來達成斷線目的,因此必須先由ARP協議開始說明。

在乙太網路上僅僅知道某台主機的IP address,並不能立即將封包傳送過去,必須先查明該主機的實體位址(Physical address / MAC address)才能真正發送出去,而ARP協議的功用就是在於將IP address轉換成實體位址。

網路上每一台主機都有一個ARP table,此table中記錄了最近一段時間裡其它IP address及其MAC address的對應關係。如果本機想跟某一台主機通信,則會先在ARP table中查尋對應目的主機IP address的MAC address,如果該對應記錄存在,則直接將目的主機的MAC address填入Data Link層的封包表頭中,然後將封包發送出去;如果該對應記錄不存在,則會向本網段廣播一個ARP請求封包,當目的主機聽見該請求封包後,會將本身的 MAC address填入封包並用廣播方式回送出去,本機收到此回應封包後,就會將相關訊息記錄在ARP table中,然後將目的主機的MAC address填入Data Link層的封包表頭裡。

由於ARP請求封包發送端只管接收回應訊息,卻無法分辨訊息的真偽,因此第三方主機只要建構一個ARP欺騙封包,就可以造成請求端的ARP table資訊錯誤。由於MAC address不正確,所以封包就再也無法傳送到目的主機上,這就是Netcut造成連線中斷的原因。

舉例來說,裝有Netcut的A主機向受害B主機發送假的ARP訊息,使得B主機上ARP table中對應到閘道器IP address的MAC address,更新成錯誤的MAC address。由於B主機上網必須透過閘道器傳送,閘道器的MAC address資訊錯誤,當然會造成B主機的封包再也無法傳送到閘道器上,原本建立好的連線也會因為timeout而導致斷線的情形發生。

知道Netcut的運作原理了,可是要怎樣才能預防或解決被Netcut斷線的問題呢?其實只要下達一個小小的指令就可以對Netcut完全免疫了~~

方法很簡單,由於Netcut的工作原理是透過假造ARP封包,造成你主機上的ARP table記錄到錯誤的閘道器MAC address,藉此讓你的主機跟目地主機間的往來封包發生中斷,所以你只要將正確的對應位址設定成static記錄就可以避免狀況發生。

設定指令如下:

arp -s 閘道器IP address 閘道器MAC address

舉例來說,假設閘道器的IP address是192.168.88.254,打開命令提示字元,執行ping 192.168.88.254,只要ping得通就可以得到正確的閘道器MAC address。這時執行 arp -a 就可以查出192.168.88.254的對應MAC address(就是Physical Address)。例如192.168.88.254的MAC address是00-90-cc-4f-db-18,那麼只要執行 arp -s 192.168.88.254 00-90-cc-4f-db-18 就搞定了。

假如你的主機已經被斷線,這時該怎麼辦呢?很簡單,你只要借用同網段的其他主機查詢閘道器的MAC address,然後用上述方法將正確的對應資訊加入到你的主機上就行了。

注意,如果主機的閘道器IP address改變,MAC address通常也會跟著變動,這時只要下達 arp -d 就可以將原先設定的ARP table對應資訊清除掉。

prague12 發表在 痞客邦 留言(0) 人氣()

透過Excel的內部ode交換 將XLS轉換成CSV輸出

//'------------------------------------------

namespace XLStoCSV
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string sourceFile, worksheetName, targetFile;
sourceFile = "source.xls";
worksheetName = "sheet1";
targetFile = "targetAA.csv";

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
sourceFile = openFileDialog1.FileName;
}


convertExcelToCSV(sourceFile, worksheetName, targetFile);

MessageBox.Show("OK");
}

//==================
static void convertExcelToCSV(string sourceFile, string worksheetName, string targetFile)
{

// string strConn = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = ' " + sourceFile + " ' " + ";Extended Properties=Excel 8.0 ; HDR=Yes;IMEX=1\" ";
// sourceFile = "new_N40SM1.1.xls";
string strConn = " Provider='Microsoft.Jet.OLEDB.4.0';"+ "Data Source='" + sourceFile +"';Extended Properties='Excel 8.0;IMEX=1;HDR=NO;' ";
OleDbConnection conn = null;
StreamWriter wrtr = null;
OleDbCommand cmd = null;
OleDbDataAdapter da = null;
try
{
conn = new OleDbConnection(strConn);
conn.Open();

cmd = new OleDbCommand("SELECT * FROM [" + worksheetName + "$]", conn);
cmd.CommandType = CommandType.Text;
wrtr = new StreamWriter(targetFile);

da = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

for (int x = 0; x < dt.Rows.Count; x++)
{
string rowString = "";
for (int y = 0; y < dt.Columns.Count; y++)
{
rowString += "\"" + dt.Rows[x][y].ToString() + "\",";
}
wrtr.WriteLine(rowString);
}
//Console.WriteLine();
//Console.WriteLine("Done! Your " + sourceFile + " has been converted into " + targetFile + ".");
//Console.WriteLine();

}
catch (Exception exc)
{
MessageBox .Show ( exc.ToString());

}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
conn.Dispose();
cmd.Dispose();
da.Dispose();
wrtr.Close();
wrtr.Dispose();
}
}

//=================
}
}

prague12 發表在 痞客邦 留言(0) 人氣()

~取得Debug .exe 根目錄 路徑方法~

參考:
http://hi.baidu.com/sneer_owen/blog/item/61ec67a92af22eaccb130cbc.html

Application.StartupPath.ToString();  //获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称


 

'--------------------------

 其中:以下两个方法可以获取执行文件名称

  1、Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名。

  2、Application.ExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称

 1、取得控制台应用程序的根目录方法

  方法1、Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径

  方法2、AppDomain.CurrentDomain.BaseDirectory 获取基目录,它由程序集冲突解决程序用来探测程序集

  2、取得Web应用程序的根目录方法

  方法1、HttpRuntime.AppDomainAppPath.ToString();//获取承载在当前应用程序域中的应用程序的应用程序目录的物理驱动器路径。用于App_Data中获取

  方法2、Server.MapPath("") 或者 Server.MapPath("~/");//返回与Web服务器上的指定的虚拟路径相对的物理文件路径

  方法3、Request.ApplicationPath;//获取服务器上ASP.NET应用程序的虚拟应用程序根目录

  3、取得WinForm应用程序的根目录方法

  1、Environment.CurrentDirectory.ToString();//获取或设置当前工作目录的完全限定路径

  2、Application.StartupPath.ToString();//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称

  3、Directory.GetCurrentDirectory();//获取应用程序的当前工作目录

  4、AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集

  5、AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称






prague12 發表在 痞客邦 留言(0) 人氣()

http://coolshell.cn/articles/582.html
http://www.metamuse.net/2007/12/google-chart-api.html google 統計圖表API


畫統計圖表google介面網站
http://imagecharteditor.appspot.com/

產生3D餅圖 url
http://chart.apis.google.com/chart?chxs=0,676767,14&chxt=x&chs=500x300&cht=p3&chco=4D89F9&chds=0,160&chd=t:10,50,44,6&chdl=%E6%9D%B1|%E8%A5%BF|%E5%8D%97|%E5%8C%97&chdlp=b&chl=%E6%9D%B1+10%25|%E8%A5%BF+50%25|%E5%8D%97+44%25|%E5%8C%97+6%25&chma=0,0,10&chtt=Horizontal+bar+chart&chts=676767,12.5

prague12 發表在 痞客邦 留言(0) 人氣()

台灣簡訊
http://ui.twsms.com/index.php?page=dl_doc.htm

發送url
http://api.twsms.com/send_sms.php?username=0912754176&password=12121221&type=now&encoding=big5&mobile=0912754176&message=傳送內容 Test Sms 123&vldtme=3600

============================

Imports System.IO
Imports System.Net

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
' =============主程式=利用WWW連線方式(GET)傳送簡訊=======================
'Dim strURL As String = ""
'Dim userID As String = "*帳號*"
'Dim password As String = "*密碼*"
'Dim m_num As String = "*手機號嗎*"
'Dim message As String = "*傳送內容*"
Dim strURL As String = ""
Dim userID As String = "0912754176"
Dim password As String = "12121221"
Dim m_num As String = "0912754176"
Dim message As String = "傳送內容 Test Sms 123"

strURL = "http://api.twsms.com/send_sms.php?username=" & userID _
& "&password=" & password & "&type=now&encoding=big5&mobile=" & m_num _
& "&message=" & message & "&vldtme=3600"


Dim myHttpWebRequest As HttpWebRequest
Dim myHttpWebResponse As HttpWebResponse

Try
myHttpWebRequest = CType(WebRequest.Create(strURL), HttpWebRequest)

myHttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse)

GetResponseData(myHttpWebResponse.GetResponseStream())


myHttpWebResponse.Close()
Catch ex As Exception


End Try
End Sub


'======================副程式=====接收對方的回應,儲存在文字檔內=========
Private Sub GetResponseData(ByVal myStream As Stream)

Dim mypath = "D:\mytest.txt" '儲存位置
Dim sw2 As StreamWriter = New StreamWriter(mypath, True, System.Text.Encoding.Default)
Dim myStreamReader As StreamReader = New StreamReader(myStream, System.Text.Encoding.Default)
Dim strOut As String = myStreamReader.ReadToEnd()
Try
sw2.WriteLine(strOut)
sw2.Close()
myStreamReader.Close()
Catch
myStreamReader.Close()
sw2.Close()
End Try

End Sub
End Class

prague12 發表在 痞客邦 留言(0) 人氣()

'--------動態A 2D List ---------------------
Dim aa As New List(Of String())
aa.Add(New String() {"3AQA"})
aa.Add(New String() {"2AQA"})
aa.Add(New String() {"1AQA"})
aa.Add(New String() {"4AQA"})
'--------/動XE態A 2D List/ ---------------------




'-------全陣列轉型----------------
Dim sArray = New String() {"1", "2", "3"}
'dim i = Array.ConvertAll (s, int.Parse) 'C# 寫法
Dim ii_array = Array.ConvertAll(Of String, UInteger)(sArray, AddressOf UInteger.Parse)
'--------------------
Dim aa_int = UInteger.Parse("221") '字串轉數字函數動作
'-------/全陣列轉型/-------------------

prague12 發表在 痞客邦 留言(0) 人氣()

數字型態與Bytes 的互轉



Public Class Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
' 數字轉成 Bytes
Dim iCountS As Single = 45.11
Dim iCountD As Double = 45.11 ' single 相當於 float 是4個Byte
Dim byInputDataS = BitConverter.GetBytes(iCountS)
Dim byInputDataD = BitConverter.GetBytes(iCountD)


'Bytes 轉成數字
Dim iCountSS = BitConverter.ToSingle(byInputDataS, 0)
' Dim iCountDD = BitConverter.ToSingle(byInputDataD, 0) '跟原本型態不合 轉換後會數值錯掉
Dim iCountDD = BitConverter.ToDouble(byInputDataD, 0)


MsgBox(iCountSS)


End Sub
End Class

prague12 發表在 痞客邦 留言(0) 人氣()

參考: http://rfid-fantasy.blogspot.com/2009/07/byte.html 字串轉bytes

using System.Text;
String name = "張京介";
Encoding.UTF8.GetBytes(name); // {229, 188, 181, 228, 186, 172, 228, 187, 139}
Encoding.Default.GetBytes(name); // {177, 105, 168, 202, 164, 182}
Encoding.Unicode.GetBytes(name); // {53, 95, 172, 78, 203, 78}

'------byte陣列轉字串--------

MsgBox(Encoding.Default.GetString(item_bytes))



以下是應用範例


'-------針對RecodrType來做 frame內部項目分離------------------------
Select Case Record_type
Case "MIR"
item_list = Class_stdf_MIR.decode_MIRtoCP(Bcontent)
Dim iss = 0

'---組合item 字串------------
'
' frame/
' frame/
' item->item_str
' item->item_str
Dim item_str(31) As String
For j = 0 To item_list.Length - 1
Dim mm = item_list(j)
Dim item_bytes = Class_stdf_MIR.get_frameBuffer(Bcontent, mm, Bcontent(mm))
Dim str As New StringBuilder(50) '假設item最大長度50

'------byte陣列轉字串----------
'法1:
For Each m In item_bytes
str.Append(Convert.ToChar(m)) '轉換BYTEtoCHAR to組合每item字串
Next
'法2:MsgBox(Encoding.Default.GetString(item_bytes))
'------/byte陣列轉字串/--------
item_str(j) = str.ToString
ListBox1.Items.Add((j + 1).ToString + "_" + item_str(j).ToString)
Next


'---------填入 CP 項目表---------------
MIRtoCP.LOT_ID = item_str(0)
MIRtoCP.PART_TYP = ""
MIRtoCP.NODE_NAM = item_str(2)
MIRtoCP.TSTR_TYP = item_str(3)
MIRtoCP.JOB_NAM = item_str(4)
MIRtoCP.JOB_REV = item_str(5)
MIRtoCP.SUB_ID = item_str(6)
MIRtoCP.OPER_NAM = item_str(7)
MIRtoCP.FAMLY_ID = item_str(12)
MIRtoCP.FACIL_ID = item_str(17)
MIRtoCP.FLOW_ID = "CP1"
'--------/填入 CP 項目表/--------------


'---/組合item 字串-/--------------
Case "WIR"

Case "MRR"

Case "SDR"

Case "WRR"

Case "WCR"

Case "HBR"

Case "SBR"

Case "PRR"

End Select
'-------/針對RecodrType來做 frame內部項目分離/------------------------
-----------------------------------------

prague12 發表在 痞客邦 留言(0) 人氣()

Stream 和 byte[] 之间的转换

http://www.cnblogs.com/anjou/archive/2007/12/07/986887.html

prague12 發表在 痞客邦 留言(0) 人氣()

參考: http://www.cnblogs.com/LifelongLearning/archive/2011/03/30/1999652.html

//-------JK fixed ok----------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
//using System.Drawing; //  在此 iTextSharp 有自己的image 類別
using System.Linq;
using System.Text;
using System.Windows.Forms;
using iTextSharp.text; //要加入這個iTextSharp.dll 的參考
using iTextSharp.text.pdf;  //官網下載dll  http://sourceforge.net/projects/itextsharp/
using System.IO;

namespace forPDF
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


   
        private void button1_Click(object sender, EventArgs e)
        {


            //=========================================
            //建立另外的pdf檔案  圖片處理


            //添加文本
            //创建文档对象
            Document document = new Document();
            //实例化生成的文档
            PdfWriter.GetInstance(document, new FileStream(@"c_image.pdf", FileMode.Create));
            //打开文档
            document.Open();
            //在文档中添加文本内容
            document.Add(new Paragraph("Hello World!"));

           // string filename = "Desert.jpg";
//            Image image = Image.GetInstance(@"D:\Desert.jpg");  //讀取圖片來源
            Image image = Image.GetInstance(@"Desert.jpg");  //讀取圖片來源

                image.Alignment = Image.ALIGN_LEFT;
                image.ScalePercent(30);//'縮小到30%才放的進版面
               document.Add(image);

                document.Add(new Paragraph("居中对齐:"));
               image.Alignment = Image.ALIGN_MIDDLE;
               image.ScaleToFit(100,100);//指定大小縮放 (還是會保持原比例)
               document.Add(image);
   
               document.Add(new Paragraph("适合页面对齐:"));
               image.Alignment = Image.ALIGN_JUSTIFIED_ALL;
               image.ScalePercent(30);
               document.Add(image);
               document.NewPage();//'加新空白頁
           
            var p = new Paragraph("旋转一:");
               p.Add(Chunk.NEWLINE);
   
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
              p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
              p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
              image.Alignment = Image.ALIGN_JUSTIFIED_ALL;
              image.ScalePercent(30);
               image.RotationDegrees = 30;
               p.Add(new Chunk(image, 50, -30)); //x向右為正   y向下為負
               document.Add(p);
   
             p = new Paragraph("旋转二:");
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
              p.Add(Chunk.NEWLINE);
              p.Add(Chunk.NEWLINE);
              p.Add(Chunk.NEWLINE);
              p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
              p.Add(Chunk.NEWLINE);
              p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
               p.Add(Chunk.NEWLINE);
              image.Alignment = Image.ALIGN_JUSTIFIED_ALL;
               image.ScalePercent(40);
               image.RotationDegrees = -30;
               p.Add(new Chunk(image, 0, -55));//x向右為正   y向下為負
               document.Add(p);

            //关闭文档对象
            document.Close();

      

            //=========================================
            //建立另外的pdf檔案

            document = new Document();
            // 创建文档写入实例
            PdfWriter.GetInstance(document, new FileStream("D:\\d.pdf", FileMode.Create));
      
            //打开文档内容对象
            document.Open();
            //设计各页的内容
            document.Add(new Paragraph("This is First Page"));
            //新添加一个页
            document.NewPage();
            //第2页中添加文本
            document.Add(new Paragraph("This is second page"));
            //重置页面数量
            document.ResetPageCount();
            //关闭文档对象
            document.Close();


            //=========================================
            //建立另外的pdf檔案

 

            //转换数据表为PDF文档
            //初始化一个目标文档类
            document = new Document();
            //调用PDF的写入方法流
            PdfWriter pdfWriter = PdfWriter.GetInstance(document, new FileStream("D:\\e.pdf", FileMode.Create));
            //打开目标文档对象
            document.Open();
            //创建PDF文档中的字体
            BaseFont baseFont = BaseFont.CreateFont();
            //根据字体路径和字体大小属性创建字体
            float f = 12;
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, f);
            PdfPTable table = new PdfPTable(6);
            //遍历原table的内容
            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    table.AddCell(new Phrase(Convert.ToString(i + 1) + ":" + Convert.ToString(j + 1), font));
                }

            }
            //在目标文档中添加转化后的表数据
            document.Add(table);
            //关闭目标文件
            document.Close();

        }
    }
}

prague12 發表在 痞客邦 留言(0) 人氣()

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//'---------------------------
using System.Diagnostics; // for process class
using System.ComponentModel; //for Win32Exception class

// 詳細參考 http://www.dotblogs.com.tw/yc421206/archive/2009/04/18/8048.aspx

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//-----------------------------------------

foreach (Process p in System.Diagnostics.Process.GetProcessesByName("winword")) //找出有沒word 有就關掉
{
try
{
p.Kill();
p.WaitForExit(); // possibly with a timeout
}
catch (Win32Exception winException)
{
// process was terminating or can't be terminated - deal with it
}
catch (InvalidOperationException invalidException)
{
// process has already exited - might be able to let this one go
}
}

//-------------------------------------

}//endMain
}//end Program
}// ConsoleApplication1

prague12 發表在 痞客邦 留言(0) 人氣()

Imports System.Threading
Imports System.Threading.Tasks
'命名空間: System.Threading.Tasks
'組件: mscorlib (在 mscorlib.dll 中)
Imports System.Collections.Concurrent

'------------
'平行 for 使用方法+ ConcurrentStack
'------------


Module Module1 'VB2010 主控台程式

Sub Main()

Dim results As New ConcurrentStack(Of Double)() '用來承接pfor的安全型別 ' 要匯入Imports System.Collections.Concurrent

' i is the iteration variable. loopState is a
' compiler-generated ParallelLoopState
Parallel.For(0, 200, Sub(i, loopState)
'會生出200組for 同時運行

'Qi 也不會出現100個以後才出現wi
'-------------------------------------------
If i < 100 Then ' 當i<100
Dim d As Double = i
results.Push(d) '相當於 arraylist.add()
Console.WriteLine("Q" + i.ToString) '不論順序 總共應該有放入100次
'Qi 的出現不會照i順序
Else '當i>100
'loopState.[Stop]() '會停止所有的for
'Exit Sub '只會結束一個本身的for
Console.WriteLine("w" + i.ToString)
'wi 的出現不會照i順序
End If
'-----------------------------------------------------
End Sub)
' Close Parallel.For
Console.WriteLine("Results contains {0} elements", results.Count())
'----------------------------------------------
Console.ReadKey() '等待鍵入一個字元後結束
End Sub

prague12 發表在 痞客邦 留言(0) 人氣()

Imports System.Threading
Imports System.Threading.Tasks

'命名空間: System.Threading.Tasks
'組件: mscorlib (在 mscorlib.dll 中)

'------------
'平行 for 使用方法
'------------

Module Module1 'VB2010 主控台程式

Sub Main()
Dim N As Integer = 10
'For i = 0 To N
' Method_123(i)
'Next


'----------------------------------
'寫法1
' Parallel.For(0, N, AddressOf Method_123)
' " AddressOf Method_123" = mm 這是委派 mm是個函數動作

'----------------------------------

'寫法2
' Using a lambda expression.
Parallel.For(0, N, Sub(mm)
Method_123(mm)
End Sub)


'----------------------------------------------
Console.ReadKey() '等待鍵入一個字元後結束
End Sub

Sub Method_123(ByVal i As Integer)
Console.WriteLine("11111111111111111111")
Console.WriteLine("2222")
Console.WriteLine("1111")

End Sub




End Module

prague12 發表在 痞客邦 留言(0) 人氣()

Imports System.Threading
Imports System.Threading.Tasks
Imports System.Drawing
'要專案 參考 System.Drawing.dll

'------------
'平行 foreach 使用方法
'------------

Module Module1 'VB2010 主控台程式

Sub Main()

' A simple source for demonstration purposes. Modify this path as necessary.
Dim files As String() = System.IO.Directory.GetFiles("C:\11", "*.jpg") '從C:\11 資料夾 找副檔名.jpg 的圖
Dim newDir As String = "C:\JK" '在 C:\ 產生JK目錄
System.IO.Directory.CreateDirectory(newDir)
' Method signature: Parallel.ForEach(IEnumerable source, Action body)
' Be sure to add a reference to System.Drawing.dll.
Parallel.ForEach(files, Sub(mm)
'上一行不能有註解 會破壞語法


' The more computational work you do here, the greater
' the speedup compared to a sequential foreach loop.
Dim filename As String = System.IO.Path.GetFileName(mm)
Dim bitmap As New System.Drawing.Bitmap(mm)

bitmap.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone) '抓一張圖來旋轉180度
bitmap.Save(System.IO.Path.Combine(newDir, filename)) '把轉後的圖存在新目錄底下

' Peek behind the scenes to see how work is parallelized.
' But be aware: Thread contention for the Console slows down parallel loops!!!

Console.WriteLine("Processing {0} on thread {1}", filename, Thread.CurrentThread.ManagedThreadId)
'close lambda expression and method invocation
End Sub)

' Keep the console window open in debug mode.
Console.WriteLine("Processing complete. Press any key to exit.")
Console.ReadKey() '讀取任意鍵入字元後結束


End Sub

End Module

prague12 發表在 痞客邦 留言(0) 人氣()

最小封包 8 +6 + 6+ 2+ 46+ 2 =72 Bytes
前綴+目的+來源+協定+內文+檢查= 72

prague12 發表在 痞客邦 留言(0) 人氣()

參考:
http://www.dotblogs.com.tw/chou/archive/2010/06/29/16263.aspx


以下為JKfix OK

1.全螢幕 下 可以單首mv循環播放
2.全螢幕下 如果是不同mv切換 會有跳出全螢幕的狀況 只能重新安排切入全螢幕模式 所以會有切換的畫面
'==========================================================

Dim path As String = "c:/video_home/r.mpg"
Dim path_pre As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
' path = OpenFileDialog1.FileName
'End If


'Dim path1 = "c:/video_home/r.mpg"
'Dim path2 = "c:/video_home/g.mpg"
'If path = path1 Then
' path = path2
'Else
' path = path1
'End If

If path <> path_pre Then
AxWindowsMediaPlayer1.URL = path
AxWindowsMediaPlayer1.Ctlcontrols.play() '必須不偵錯的啟動 才會跑
AxWindowsMediaPlayer1.settings.setMode("loop", True)
path_pre = path

If Me.AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsPlaying Then
' 才能設定全螢幕播放
Me.AxWindowsMediaPlayer1.fullScreen = True
End If
End If

'--------------------------


End Sub



Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As System.Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange

' 判斷當狀態是 WMPLib.WMPPlayState.wmppsPlaying 撥放狀態

If DirectCast(e.newState, WMPLib.WMPPlayState) = WMPLib.WMPPlayState.wmppsPlaying Then

' 設定以全螢幕播放
Me.AxWindowsMediaPlayer1.fullScreen = True

End If

End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Button1.PerformClick()

End Sub

prague12 發表在 痞客邦 留言(0) 人氣()

1 234