1.下載 MySQL, 建議下載 noinstall 版本, 解壓縮後將 include 及 lib 取出.
2.下載 mingw-utils, 建議下載此連結版本, 較新的版本似乎會有問題. 解壓縮後將其中的 reimp.exe 複製到 C:\Qt\2010.05\mingw\bin 資料夾內.
3.執行 Qt Command Prompt, 輸入以下指令:
cd C:\Lib\MySQL-5.1.56\lib\opt
reimp -d libmysql.lib
dlltool -k -d libmysql.def -l libmysql.a (PS:-l 是小寫的 L)
4.將執行後產生的 libmysql.a 複製到 C:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql 資料夾內.
5.回到 Qt Command Prompt, 輸入以下指令:
cd C:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\Lib\MySQL-5.1.56\include" "LIBS+=C:\Lib\MySQL-5.1.56\lib\opt\libmysql.a" mysql.pro
mingw32-make
6.複製 C:\Lib\MySQL-5.1.56\lib\opt\libmysql.dll 到 C:\Qt\2010.05\mingw\bin 資料夾內.
範例如下:
#include <QtSql>
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("demo");
db.setUserName("root");
db.setPassword("123456");
if(db.open())
QMessageBox::information(this, "information", "Connected to database", QMessageBox::Ok, QMessageBox::Ok);
else
QMessageBox::information(this, "error", "Connection fail", QMessageBox::Ok, QMessageBox::Ok);
PS:在 pro 檔要加入 QT += sql.
參考來源:
1.Qt4 Gossip: Qt 的 MySQL 驅動程式
2.How to build the QMYSQL plugin under Windows using MinGW
2011年4月21日 星期四
2011年4月12日 星期二
ShellExecute in MSDN
函式:
HINSTANCE ShellExecute( HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd );
參數:
hwnd 視窗的名稱
lpOperation 進行的操作,如"open","print","explore"分別對應 "開啟","列印","瀏覽", 也可以為空(""),此時表示進行預設的操作。
lpFile 要操作的文件。
lpParameters 如果lpFile指定的是一個可執行檔則表示參數
lpDirectory 操作進行的目錄
nShowCmd 新的應用程式的運行方式。其可用的值如下:
SW_HIDE 隱藏
SW_MAXIMIZE 最大化
SW_MINIMIZE 最小化,並把Z order順序在此視窗之後(即視窗下一層)的視窗啟動
SW_RESTORE 啟動視窗並還原為初始化大小
SW_SHOW 以當前大小和狀態啟動視窗
SW_SHOWDEFAULT 以預設方式運行
SW_SHOWMAXIMIZED 啟動視窗並最大化
SW_SHOWMINIMIZED 啟動視窗並最小化
SW_SHOWMINNOACTIVE 最小化但不改變當前啟動的視窗
SW_SHOWNA 以當前狀態顯示視窗但不改變當前啟動的視窗
SW_SHOWNOACTIVATE 以初始化大小顯示視窗但不改變當前啟動的視窗
SW_SHOWNORMAL 啟動並顯示視窗,如果是最大(小)化,視窗將會還原。第一次運行程式 時應該使用這個值
DWORD error = GetLastError();
若 error 非 0 則檢查錯誤
PS:前後要加 CoInitialize(NULL) 和 CoUninitialize().
HINSTANCE ShellExecute( HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd );
參數:
hwnd 視窗的名稱
lpOperation 進行的操作,如"open","print","explore"分別對應 "開啟","列印","瀏覽", 也可以為空(""),此時表示進行預設的操作。
lpFile 要操作的文件。
lpParameters 如果lpFile指定的是一個可執行檔則表示參數
lpDirectory 操作進行的目錄
nShowCmd 新的應用程式的運行方式。其可用的值如下:
SW_HIDE 隱藏
SW_MAXIMIZE 最大化
SW_MINIMIZE 最小化,並把Z order順序在此視窗之後(即視窗下一層)的視窗啟動
SW_RESTORE 啟動視窗並還原為初始化大小
SW_SHOW 以當前大小和狀態啟動視窗
SW_SHOWDEFAULT 以預設方式運行
SW_SHOWMAXIMIZED 啟動視窗並最大化
SW_SHOWMINIMIZED 啟動視窗並最小化
SW_SHOWMINNOACTIVE 最小化但不改變當前啟動的視窗
SW_SHOWNA 以當前狀態顯示視窗但不改變當前啟動的視窗
SW_SHOWNOACTIVATE 以初始化大小顯示視窗但不改變當前啟動的視窗
SW_SHOWNORMAL 啟動並顯示視窗,如果是最大(小)化,視窗將會還原。第一次運行程式 時應該使用這個值
DWORD error = GetLastError();
若 error 非 0 則檢查錯誤
PS:前後要加 CoInitialize(NULL) 和 CoUninitialize().
2011年4月9日 星期六
AutoHotKey + VS2010
最近在找把 AutoHotKey 放入 VS2010 來開發, 方便結合當辨識某手勢來觸發對應事件.
建置步驟如下:
1.下載 AutoHotKey.dll, 按此連結.
2.加入以下程式碼
typedef int (*ahkdll)(wchar_t *, wchar_t *, wchar_t *);
typedef int (*ahktextdll)(wchar_t *, wchar_t *, wchar_t *);
typedef int (*ahkReady)();
typedef int (*ahkExec)(wchar_t *);
HINSTANCE hinstLib = LoadLibrary(L"AutoHotkey.dll");
if(hinstLib == NULL)
return -2;
ahkdll ahkdll_ = (ahkdll)GetProcAddress(hinstLib, "ahkdll");
if(ahkdll_ == 0)
return -3;
ahktextdll ahktextdll_ = (ahktextdll)GetProcAddress(hinstLib, "ahktextdll");
if(ahktextdll_ == 0)
return -4;
ahkReady ahkReady_ = (ahkReady)GetProcAddress(hinstLib, "ahkReady");
if(ahkReady_ == 0)
return -5;
ahkExec ahkExec_ = (ahkExec)GetProcAddress(hinstLib, "ahkExec");
if(ahkExec_ == NULL)
return -6;
//移動滑鼠
ahktextdll_(L"MouseMove, 20, 30, 50", L"", L"");
//顯示訊息視窗
ahktextdll_(L"MsgBox % A_ScriptDir", L"", L"");
//定義函式
ahktextdll_(L"#persistent \necho(x){\ny := x . \" hello\"\nMsgBox % y\nreturn x\n}", L"", L"");
//呼叫函式(可傳參數)
ahkExec_(L"echo(\"ervis\")");
建置步驟如下:
1.下載 AutoHotKey.dll, 按此連結.
2.加入以下程式碼
typedef int (*ahkdll)(wchar_t *, wchar_t *, wchar_t *);
typedef int (*ahktextdll)(wchar_t *, wchar_t *, wchar_t *);
typedef int (*ahkReady)();
typedef int (*ahkExec)(wchar_t *);
HINSTANCE hinstLib = LoadLibrary(L"AutoHotkey.dll");
if(hinstLib == NULL)
return -2;
ahkdll ahkdll_ = (ahkdll)GetProcAddress(hinstLib, "ahkdll");
if(ahkdll_ == 0)
return -3;
ahktextdll ahktextdll_ = (ahktextdll)GetProcAddress(hinstLib, "ahktextdll");
if(ahktextdll_ == 0)
return -4;
ahkReady ahkReady_ = (ahkReady)GetProcAddress(hinstLib, "ahkReady");
if(ahkReady_ == 0)
return -5;
ahkExec ahkExec_ = (ahkExec)GetProcAddress(hinstLib, "ahkExec");
if(ahkExec_ == NULL)
return -6;
//移動滑鼠
ahktextdll_(L"MouseMove, 20, 30, 50", L"", L"");
//顯示訊息視窗
ahktextdll_(L"MsgBox % A_ScriptDir", L"", L"");
//定義函式
ahktextdll_(L"#persistent \necho(x){\ny := x . \" hello\"\nMsgBox % y\nreturn x\n}", L"", L"");
//呼叫函式(可傳參數)
ahkExec_(L"echo(\"ervis\")");
2011年4月8日 星期五
AutoHotKey setting mouse event
最近玩了一個懶人用工具 : AutoHotKey
官網 : http://www.autohotkey.com/
功能非常強大, 可以自己撰寫腳本來設定當按下某按鍵時執行某個指令及動作.
EX:懶人輸入
:*:'g::http://www.google.com.tw
即按下鍵盤 ' 再按下鍵盤 g, 即輸入 http://www.google.com.tw
EX:控制滑鼠點選
^+b::
Run %A_WinDir%\system32\mspaint.exe
WinWaitActive, ahk_class MSPaintApp,, 2
if ErrorLevel
return
Click 350, 450, down
Click 350, 350, up
return
即按下鍵盤 Ctrl 再按下鍵盤 Shift 再按下鍵盤 b, 即打開小畫家, 並在坐標(350, 450)將滑鼠左鍵按下不放, 再坐標(350, 350)放開
EX:控制滑鼠拖拉
^+a::
Run %A_WinDir%\system32\mspaint.exe
WinWaitActive, ahk_class MSPaintApp,, 2
if ErrorLevel
return
SetMouseDelay, 80
MouseClickDrag, L, 350, 450, 350, 350
即按下鍵盤 Ctrl 再按下鍵盤 Shift 再按下鍵盤 a, 即打開小畫家, 並在坐標(350, 450)將滑鼠左鍵按下不放, 再坐標(350, 350)放開
EX:控制滑鼠移動
^+d::
MouseMove, 20, 30
return
即按下鍵盤 Ctrl 再按下鍵盤 Shift 再按下鍵盤 d, 即將滑鼠移到坐標(350, 450)
PS: R代表全域畫面計算坐標
PS:SetMouseDelay設定滑鼠延遲時間(0-最快, 100最慢)
官網 : http://www.autohotkey.com/
功能非常強大, 可以自己撰寫腳本來設定當按下某按鍵時執行某個指令及動作.
EX:懶人輸入
:*:'g::http://www.google.com.tw
即按下鍵盤 ' 再按下鍵盤 g, 即輸入 http://www.google.com.tw
EX:控制滑鼠點選
^+b::
Run %A_WinDir%\system32\mspaint.exe
WinWaitActive, ahk_class MSPaintApp,, 2
if ErrorLevel
return
Click 350, 450, down
Click 350, 350, up
return
即按下鍵盤 Ctrl 再按下鍵盤 Shift 再按下鍵盤 b, 即打開小畫家, 並在坐標(350, 450)將滑鼠左鍵按下不放, 再坐標(350, 350)放開
EX:控制滑鼠拖拉
^+a::
Run %A_WinDir%\system32\mspaint.exe
WinWaitActive, ahk_class MSPaintApp,, 2
if ErrorLevel
return
SetMouseDelay, 80
MouseClickDrag, L, 350, 450, 350, 350
即按下鍵盤 Ctrl 再按下鍵盤 Shift 再按下鍵盤 a, 即打開小畫家, 並在坐標(350, 450)將滑鼠左鍵按下不放, 再坐標(350, 350)放開
EX:控制滑鼠移動
^+d::
MouseMove, 20, 30
return
即按下鍵盤 Ctrl 再按下鍵盤 Shift 再按下鍵盤 d, 即將滑鼠移到坐標(350, 450)
PS: R代表全域畫面計算坐標
PS:SetMouseDelay設定滑鼠延遲時間(0-最快, 100最慢)
訂閱:
文章 (Atom)