Posted on 五月 15, 2008 by brain
在程式中, 帶起其他執行檔的方式 ….
其實很簡單 只有短短的一行, 舉例如下 …
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
其中 path_to_folder 只需要帶入執行檔之位置 即可開啟程式 …
至於 ShellExecute 函式中所帶入之參數… 可由 MSDN 中查詢 …
其中除了 lpFile 外, 最重要的應該就是 lpOperation 以及 nShowwCmd
lpOperation 為開啟的 mode …如 “open” “edit” “print” 等等 …
nShowwCmd 則為開啟程式之初始大小 !! 有 Max/Min/SHow/Hide… 等
詳細內容可由 MSDN 得知 …
搭配上前一篇所提到的 RegisterKey 可以在 下列 登錄檔中放入一程式 …
HKEY_CURRENT_USER\software\Microsoft\Windows\CurrentVersion\Run
在程式開啟時 由單一程式一起帶起其他想要開啟之程式 … 其實也挺方便的不是嗎 :p
存放在: 技術相關 | 屬於此標籤: C++ | 張貼留言 »
Posted on 五月 9, 2008 by brain
揭開登錄檔神秘的面紗 !!
哈 其實也沒這麼神秘啦 … 但登錄檔 對大家來說總是一個相當陌生
相當 … 罕於接觸的區域 … 但那邊卻藏有許多安裝軟體的一些設定值 …
譬如說 每次開機後 到底有哪些程式會被 Windows 給帶起來 就可以去
HKEY_CURRENT_USER\software\Microsoft\Windows\CurrentVersion\Run
來找出來 … 並且予以新增/修改 ..
至於要如何開啟 [登錄編輯程式] 請在 “執行” 處 Key 入 “regedit” 即可 …
存放在: 技術相關 | 屬於此標籤: C++, RegisterKey | 張貼留言 »
Posted on 五月 8, 2008 by brain
在 Windows 視窗程式設計中, 有時除了偵測鍵盤動作外
還會另外需要去偵測滑鼠動作 … 簡易的 滑鼠單/雙擊左右鍵 或是捲動滾輪
其實都有相對應的 Message 可以去呼叫 …
下面介紹的是 判斷滑鼠滾輪向上/向下之判斷 …
下面舉例來說 …
BOOL CDrawView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: Add your message handler code here and/or call default
if(zDelta > 0){
// wheel up…
}
[...]
存放在: 技術相關 | 屬於此標籤: C++, Windows | 張貼留言 »
Posted on 三月 21, 2008 by brain
系統中總是充滿不知名 確佔系統資源的 process 嗎 !?
被不知名 process 佔住系統資源卻渾然不知嗎 !? (兩句好像意思ㄧ樣 0rz)
好吧 我不會寫 序 XD …..
總之 最近研究了一個小程式 是之前寫 AutoComplete 時說要研習的新目標 …
Kill System Process ….
存放在: 技術相關 | 屬於此標籤: C++, KillProcess | 4 留言 »
Posted on 一月 21, 2008 by brain
在上一篇文章中我們提到可以利用 SendMessage 方式主動關閉程式
那如果我今天想要關閉的程式非自己撰寫的 要怎麼作呢?
運用的技巧是透過取得該程式的 Window Caption 再來取得其 handle
在已知其 Caption 時可以透過於 OnTimer 函示中 加入如下程式來定時檢查並關閉
假設我們要關閉之程式為 “foobar v0.9.5 “
HWND hfoobar = ::FindWindow(NULL, "foobar2000 v0.9.5");
if (hfoobar)
{
::SendMessage( hfoobar, WM_SYSCOMMAND, SC_CLOSE, 0 );
}
但如果今日 軟體改版 (ex: foobar v0.9.6) 時 是否程式就沒有用了呢 !?
存放在: 非關分類 | 屬於此標籤: C++, SendMessage, Windows | 張貼留言 »
Posted on 一月 21, 2008 by brain
之前提到可以利用 SendMessage() 的方式來主動與視窗程式溝通
假設今天情境需求為 希望能定期檢查程式中某函數值 如果 FALSE 則主動關閉程式
那應該要如何實作呢 !?
產生 OnTimer() 函示 -> 定期 Polling
如果 Polling 結果為非 -> 關閉程式
假設需要關閉的是主程式 第一步一樣先取得其視窗 Handle
接著送出訊息告知關閉 ! 如下…
HWND hCloseWindow = this->GetSafeHwnd();
::SendMessage(hCloseWindow, WM_CLOSE, 0, 0);
(關閉所需送出之 MSG 為 WM_CLOSE)
如此即可定時檢查程式內某參數/函數 !!
–
更新 2008/01/21
雖然上述方式依舊可以成功 但正確用法應如下所示…
::SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, NULL);
可以參考 MSDN中有關 WM_SYSCOMMAND 的 class member 用法 [連結]
存放在: 技術相關 | 屬於此標籤: C++, SendMessage | 張貼留言 »
Posted on 一月 16, 2008 by brain
當我們對一個 App 最小化時 一般都是會將 App 給縮小到 工作列去….
那今天如果我們想將 App 於最小化時 給縮小至 系統列時(如下圖) 要怎麼做呢 !?
存放在: 技術相關 | 屬於此標籤: C++, Windows | 張貼留言 »
Posted on 一月 16, 2008 by brain
之前提過 PostMessage 的用法 其實 SendMessage 的用法也滿類似的
先看看他的定義:
LRESULT SendMessage(HWND hWnd, UINT Msg,WPARAM wParam, LPARAM lParam);
hWnd – handle of destination window
Msg – message to send
wParam – first variable
lParam – second variable
宣告跟 PostMessage 也滿類似的 差別僅在於回傳值的不同
PostMessage 是 BOOL 而 SendMessage 則是 LRESULT
故 SendMessage 用於需要即時得知處理結果的情況下
而 PostMessage則是將處理送出 不在意立即結果
下面兩篇網誌 有查到一些使用時機與用法 可以參考… [1]、[2]
存放在: 非關分類 | 屬於此標籤: Auto Complete, C++, SendMessage | 張貼留言 »
Posted on 一月 12, 2008 by brain
由上一篇靈感 發現其實 之前提到缺乏的 “Simulate Table” & “KeyBoard Action” 部分
可以藉由該方式完成 於是週末又開始著手修改 Auto Complete 的小程式 …
存放在: 技術相關 | 屬於此標籤: Auto Complete, C++ | 張貼留言 »
Posted on 一月 11, 2008 by brain
要 Parse KeyBoard 輸入的按鍵時…
舉例來說 要擋掉使用者按下 “ESC” or “ENTER” 時視窗會被關掉
首先在 .h 檔內定義
virtual BOOL PreTranslateMessage(MSG* pMsg);
而後於 .cpp 檔中 加入如下 function
存放在: 技術相關 | 屬於此標籤: C++, Windows | 2 留言 »