關於我自己

2012年5月15日 星期二

OPENGL Dev C++

Dev C++本身就有可以下載OpenGL ~然而剛才我卻白爛的去用最複雜的

跑去OpenGL下載dll元件去複製到Dev C++

之後才發現Dev C++本身就有了

介紹Open GL 最主要去讓你去算數學跑公式,藉由圖示跟動畫呈獻出來





2012年5月5日 星期六

用滑鼠座標偵測顏色

目的:
可以用滑鼠的座標取的顏色RGB
可利用在遊戲血條偵測
然後網頁可以利用只有火狐 ~ 因為火狐的CSS顏色是最標準的


程式碼:
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal y As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
        X As Long
        y As Long
    End Type
     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 Timer1_Timer()
    Dim lngDC As Long
    Dim lngColor As Long
    Dim PtMouse As POINTAPI
    Dim hwnd As Long
    Dim lngX As Long
    Dim lngY As Long
     Dim r As Integer
     Dim g As Integer
     Dim b As Integer
     Dim IntR As Long
IntR = SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3)
    GetCursorPos PtMouse            '取滑鼠位置
    hwnd = WindowFromPoint(PtMouse.X - 20, PtMouse.y)  '取滑鼠位置元件的Handle 值
    lngX = PtMouse.X
    lngY = PtMouse.y
    lngDC = GetDC(hwnd)         '取該Handle值的DC
    lngColor = GetPixel(lngDC, lngX, lngY)  '取該滑鼠位置的顏色
    Text1 = "位置: x:" & lngX & ", y:" & lngY & " ; 顏色:" & lngColor & " ; hwnd : " & hwnd & vbCrLf
   
      r = lngColor Mod 256
    b = Int(lngColor / 65536)
    g = (lngColor - (b * 65536) - r) / 256
     If r = -1 Then
r = 0
End If
If g = -1 Then
g = 0
End If
If b = -1 Then
b = 0
End If
    Label1.Caption = r
    Label2.Caption = g
    Label3.Caption = b
    Picture1.BackColor = RGB(r, g, b)
    ReleaseDC hwnd, lngDC       '將DC 釋放
      
    End Sub

滑鼠事件

滑鼠事件:
1.滑鼠左右鍵
2.滑鼠移動位置
3.滑鼠拖曳

首先宣告
'Win32 Api
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Const WHEEL_DELTA = 120
Private Const MOUSEEVENTF_WHEEL = &H800
Dim result As Boolean

result = SetCursorPos(40, 55)  '滑鼠會移到作標X =45 Y=55的位置

 mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
'啟動滑鼠左鍵 按下去又放開

mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
'啟動滑鼠右鍵 按下去又放開

 mouse_event MOUSEEVENTF_WHEEL, 0, 0, WHEEL_DELTA, 0
'滑鼠中間滾輪往上移

   SendKeys "^c"  'Ctrl+C  複製 Copy
 
  SendKeys "^v"   'Ctrl+V  貼上  Post

  SendKeys "^s"  'Ctrl+S   儲存 Save

接下來是拖曳部分:很簡單的說因為拖曳的理念是
點滑鼠左鍵不放,然後移動到一定的位置,再放開

例如:(滑鼠拖曳範例)

  Dim result As Boolean

  result = SetCursorPos(2, 55)

   mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0

   result = SetCursorPos(3, 198)

   mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

滑鼠作標偵測

目的:滑鼠作標偵測,意思是到時候可以設置讓滑鼠自動執行重複的動作

例如:訂火車票,一直按到有車票,但是按鍵的作標幾乎都不變,就可以使用此偵測




程式碼:
Option Explicit
Private Type PointAPI
      X As Long
      y As Long
End Type
Dim MousePos As PointAPI

Private Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) 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 Timer1_Timer()

Dim IntR As Long
IntR = SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3)
GetCursorPos MousePos
    Text1 = MousePos.X
    Text2 = MousePos.y

End Sub

VB 6.0 按鍵側錄

程式碼:

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 Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Sub Timer1_Timer()

Dim IntR As Long
IntR = SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3)
For i = 1 To 400
KeyResult = GetAsyncKeyState(i)
If KeyResult = -32767 Then
       If i = 13 Then
       Text1.Text = Text1.Text + "(Enter)"
       Else
       Text1.Text = Text1.Text + Chr(i)
       End If
     End If
Next i

End Sub
以上大約是用
GetAsyncKeyState涵式=>得到按件執 Ascii
SetWindowPos涵式=>把From表單一直顯示在圖層上面

最後我並沒有加下面兩個涵式
Form1.Hide   =>將表單隱藏
App.TaskVisible = False  =>然程式無法在工具管理員看到此EXE

2012年3月31日 星期六

SMS 簡訊編碼說明


 
0791889623077715240C918896333589910008705032015352232E6211661F671F4E94670356DE5B
9C862DFF0C51FA4F865403500B98EF5427FF01FF1F4F6090A3664267097A7AFF1F
==============================================================================

07 91 889623077715 24 0C91 889633358991 00 08 70 50 32 01 53 52 23 2E

07 91 => 07等於SMSC資訊長度  91等於SMSC地址格式
889623077715 => 發送者的電話號碼
24 => 基本參數
0C  91 => 0C等於回復個數  91 回復格式地址
00 08=> 00等於普通GSM 08等於代表示UCS2編碼
889633358991 => 電話
70 50 32 01 53 52 = > 70等於2007年 50等於05月 32等於23日 01等於10點 53等於35分 52等於25秒
                      所以是2007年05月23日10點35分25秒
35 => 正常來說應該是08 時間區域號碼
2E => 編碼的長度 46 不過的長度必須在乘於2 所以等於96
6211 661F 671F 4E94 6703 56DE 5B9C 862D FF0C 51FA 4F86 5403 500B 98EF 5427 FF01FF1F4F6090A3664267097A7AFF1F

6211 = 我
661F = 星
671F = 期
4E94 = 五
6703 = 會
56DE = 回
5B9C = 宜
862D = 蘭
51FA = 出
4F86 = 來
5403 = 吃
500B = 個
98EF = 飯
5427 = 吧

2012年2月26日 星期日

齒輪比跟圓弧長跟RPM跟馬達極數

1.齒輪比:

1圈所謂360度 ~ 假設10個齒鋸 360/10=36

假設A轉一圈 ~ D會轉多少度呢?          由上面齒輪比公式16分之1度

360/16= 22.5度

2.圓弧長

假設我有一臺車 ~ 輪胎半徑為5公分 ~ 我要如何算我的移動距離呢?



所以輪胎移動90度代表車子移動了7.85公分

180度 = 15.7公分

1圈 = 360度 =  31.4公分

3.RPM                                                                                                      

RPM = 每分鐘轉速,英文RPM,全寫是Revolution(s) Per Minute

假設 RPM = 3600

意味1分鐘轉3600圈

1圈代表360度

如果我要算1秒呢?

1分鐘=60秒

所以3600/60=60圈

1秒轉60圈

套上面的弧長移動距離

那麼60*31.4=1884公分

1公尺=100公分

所以1884/100=18.84公尺

(PS:Lego轉速沒那個快 ~ 看之前篇就知道了)

馬達極數
每分鐘轉速(rpm)=頻率(Hz) X 60 (sec/min) X 2  / 極數

1Hz * 60S *2 /極數
1*60*2/2=60
1*60*2/4=30
1*60*2/6=20
1*60*2/8=15
1*60*2/12=10

2P=1HZ為60 RPM  
4P=1HZ為30 RPM  
6P=1HZ為20 RPM
8P=1HZ為15 RPM  
12P=1HZ為10 RPM 

假設用6P ~ 在程式下指令80Hz
80*60*2/6=1600
所以一分鐘轉1600圈

2012年2月25日 星期六

LEGO NXT Motor Bricx

 task main()
{
   ClearScreen( );    //要先清空螢幕
   int t1 = CurrentTick( );   //取時間點t1
   OnFwd(OUT_A, 100);
   Wait(60000);        //讓馬達轉1秒=1000
   Off(OUT_A);     //停止馬達
   int angle = MotorRotationCount(OUT_A); //讀取馬達角度
   int t2 = CurrentTick( );   //讀取時間點t2
   while(1){
         TextOut(0,LCD_LINE1,"angle="); //LCD第一行顯示文字「angle=」
         NumOut(50,LCD_LINE1,angle);    //LCD第一行中間顯示馬達轉角
         TextOut(0,LCD_LINE2,"time=");  //LCD第二行輸出文字
         NumOut(50,LCD_LINE2,t2-t1);    //LCD第二行中間顯示經過時間
     

  }
}

解說:
 OnFwd(OUT_A, 100);  以100%電力輸出
  Wait(60000);       60000等於1分鐘
 所呈現的結果 ~ 讓我有點小小的吃驚 ~ 因為代表還會有一些少許的誤差
 angle = -12009
 time = -5536
一分種轉12009度  12009/360=33.3583   一分鐘轉33圈
看看上面圖片第一行的 33 rpm 的數值
(PS:更正 發現到MotorRotationCount讀的數值 ~ 只能讀到12000多數值就掛了
為什麼會發現呢? 因為看實際去轉並沒有那麼慢 ~ 然後用一秒去測為816度
816/360= 2.2666圈 ~ 等於1秒至少會轉2圈 ~ 意味      60*2=120 一分鐘至少要120圈左右  真正2.666*60=136圈
所以實際等於一分鐘360圈 ~ 有可能跟電壓跟電源有關 ~ 要實際用三用電表去測才知道)

另外可以參考

轉動的數值比較不會那麼吃驚
吃驚是時間 竟然有5536 換算下來有5秒
究竟5秒是怎麼來的 ~ 是因為要停馬達A所以花了5秒嗎?  Off(OUT_A);     //停止馬達

著點要再看看為什麼原因導致誤差5秒 ~ 自己在看轉動的時候要到1分鐘的時候
馬達好像在前5秒就開始轉慢了 ~ 給我的感覺像下面圖片的01
我本來期待是02的圖式 ~可以瞬間停下來的說

2011年12月13日 星期二

線性代數Elementary Linear Algebra 第二章矩陣(共有七章)

再第二章講解矩陣

解反矩陣

應用: 密碼學

C++程式 有點懶得打 ~ 引用別的網站所以只提供網址:
http://hi.baidu.com/xxwl04108/blog/item/fddcd06ea59057dd81cb4a01.html

2011年12月10日 星期六

線性代數Elementary Linear Algebra 高斯消去法 C++ 第一章(共有七章)

首先先講解看到高斯消去法讓我想到國中的解聯立方程式

不過應該說廢話,幾乎根本一模一樣,最後管他的能用就好了
為什麼我會寫此文章呢? 因為以前學生時代看到數學老實說連看都不想看,覺得數學很難

但是程式越寫越多,用到演算法也越來越多,到後面也就想自然去了解數學
而寫著篇如果是以前我,看到著篇應該會欣喜若狂就覺得很有幫助

所以怕有很多像以前的我

大概會引用比較簡單,並會用程式去引用,還有為什麼學著個有什麼用途呢?

線性代數一共有七章 所以等我有空的時候會一個個章結慢慢補上

Code
應用:

2011年11月29日 星期二

Window Device Kit You First Driver

The Very Easy Guide
1.Install Visual C++ 2008


2. Install DDK(Windows Driver kit)

3. Download the ddkwizard_setup.exe file from http://ddkwizard.assarbad.net/ to your desktop.



4.Install ddkwizard_setup_vx.x.xa

5. 
Open the Visual C++ 2008 express  Application.
In the menu bar, select Tools->Options
In the listing, choose Project and Directories->VC++ Directories.
First, select Include files from the "Show Directories for" List Box.
Click the Insert New icon,

and locate the folder where you have installed DDK
Consider that it is installed in "C:\WinDDK"

Choose Include files in the list box,
and locate and add the following directories:
"C:\WinDDK\6001.18001\inc\api"
"C:\WinDDK\6001.18001\inc\crt"
"C:\WinDDK\6001.18001\inc\ddk"


6. In the Execute files list, locate and add: 
   "C:\WinDDK"






7.Compressing your ddkbuild.cmd and ddkbuild.bat files

8.Setting up environmental variables for DDK

Finish
You First Driver Progrom
Reference ddkwizard Website
Moive:
http://ddkwizard.assarbad.net/demo/

2011年11月28日 星期一

載入驅動程式並引用驅動程式

主要目地用EXE去連結引用驅動程式:

1.把sys放在C:\mydriver\myDriver_Check理用程式載入驅動程式到登錄編輯程式裡
再去用CreateFile去測試 ~ 通常我都用來測試Com1跟USB ~ 但是自己寫了驅動程式HelloMyDriver01所以就直接用HelloMyDriver01測試

2011年10月26日 星期三

Opencv Visual C++ 2008 (VC2008)


參考網址: opencv 
http://opencv.willowgarage.com/wiki/Welcome/Introduction

首先先下載 Visual C++ 2008
http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express
網頁會看到
=>Download Visual Studio 2008 Express
=>Visual C++ 2008 Express Edition with SP1

下載之後安裝完成之後

影片教如何安裝opencv
http://www.youtube.com/watch?v=9nPpa_WiArI

下載:opencv
 http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008
VS2008 ~ 也就是VC2008專用的 "OpenCV-2.1.0-win32-vs2008.exe".
http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008
測試有沒有安裝成功到 ~ 安裝好的Opencv資料夾裡面

samples資料夾=>c資料夾裡隨便找個exe檔案值型就知道是否成功了
 切記:有些檔案是要用視訊裝置使用的說

安裝完成開啟Visual C++ 2008 =>工具=>選項=>VC++目錄=>加入安裝路徑
 之後再每次專案都要引用輸入
cv210.lib cxcore210.lib highgui210.lib