用ironruby+sharpdevelop 來開發gui程式是十分便利的。《ironruby練手系列》計畫是用ruby來寫一系列的小工具,目的是來進一步熟悉ironruby.
我的機器裝的ironruby是ironruby 1.0 for .net 2.0 sp1
我的主頁:www.w-yong.com
本文章是寫乙個程序管理器,需要的主要知識點是:ruby語言,winform,win32 api等。本文的重點如題,是以ruby為主,而不是以"列舉程序"為主。
不過,還是略微提一下,取得系統中的程序資訊的方法主要有:
1.通過 tool help api 獲取
2.通過 psapi 獲取
3.通過 native api 獲取
4.通過 驅動來遍歷eprocess 獲取
5.對於.net,可以通過system.diagnostics 命名空間下的process類來獲取
6....
我們採用方式1,利用tool help api來獲取程序資訊。程式可以列舉出系統中正在執行的程序,選中某個程序,程式可以顯示出該程序載入的模組,還可以終止選中的程序。程式的執行結果如下:
這個程式的主要功能實際上是由processmanager這個類提供的。具體**的實現,大家可以看process_manager.rb這個檔案。processmanager中使用了cstruct這個類。cstruct是用ruby來模擬c語言的結構體,類似bitstruct。我寫cstruct這個類目的很明確,它不需要大而全,功能適中,使用起來比較方便。有了cstruct,我們就可以很方便的和win api打交道了。關於cstruct,我會另寫一篇文章來介紹它。在這裡,它只是跑龍套的。
我們先來看看 processmanager類提供的功能:
require 'process_manager'
#下面是一些使用procmgr的例子
procmgr = processmanager.new
# 列舉所有程序
procmgr.procs
# 根據名稱查詢程序資訊.(同名的都會被列舉)
procmgr.query("svchost.exe") id = #\n"}
# 按名稱終止程序(同名的都會終止)
procmgr.kill("notepad.exe")
# 按id終止程序
procmgr.kill(3412)
# 找出系統中載入了advapi32.dll的程序,
# 並列印出advapi32.dll在程序中的載入位置
procmgr.procs do |proc|
proc.modules do |mod|
if mod.name.casecmp('advapi32.dll')==0
printf"# loaded 'advapi32.dll' at %08x\n",mod.image_base
break
endend
end
有了processmanager提供的procs(列舉程序)和modules(列舉模組)這個兩個方法,我們就可以寫我們的gui版的程序管理器。大部分工作就是利用 sharpdevelop 做好介面布局。有一點需要說明,sharpdevelop 生成的變數名不太符合ruby的命名約定,你若覺得不習慣,可以改改。反正本文沒有改,兩者兼有之。程式中有兩個主要函式,show_processes和show_modules,**如下:
show_processes:
def show_processes
# 清空 listview 控制項
@proclistview.items.clear
@proc_cache.clear
# 列舉系統程序
@procmgr.procs do |proc|
# 快取proc物件
@proc_cache
def show_modules seleced_proc
return unless seleced_proc
# 列舉選中程序的模組
seleced_proc.modules do |mod|
mod_items = @modlistview.items
# 取出模組檔案的圖示
# 將相關資訊插入到listview控制項中。
mod_items << system::string.new(system::text::encoding.getencoding(0).getchars(mod.path))
mod_items[mod_items.count-1].imageindex = @small_mod_imagelist.images.size-1
mod_items[mod_items.count-1].subitems.add sprintf("%08x",mod.image_base)
mod_items[mod_items.count-1].subitems.add sprintf("%08x",mod.image_size)
end# 設定 imagelist
@modlistview.smallimagelist = @small_mod_imagelist
end具體的**,請參考附件中的原始碼。
設計模式系列之一 寫在系列前面
網上看到很多部落格寫了 設計模式 系列,很佩服別人把一本書看完,還做了那麼詳細的筆記!最近工作,忙於瑣事,很久沒有靜下心來仔細系統的閱讀一本書了,都是需要什麼,就查閱相關資料。於是乎我也決定寫乙個系列,當作讀書筆記,促進自己學習,希望能堅持下來!看看自己是不是老了,還有沒有這個毅力?本系列以 hea...
隨便寫一寫
簡單的來說,就是公私合營的一種模式。針對大型的公共設施建設,這種模式有著很大的優點。天子山鎮因其坐落於著名的天子山腳下而得名,鎮區內分布著奇特的石英砂巖峰林地貌 茂密的原始森林和清澈的溪流,自然村落形成的田園風光獨具特色,當地流傳的向王天子傳說 土家山寨和集鎮上臨街而建的吊腳樓 青石板人行街道 古香...
第一寫部落格
說一下python 與c或c 在語法上的一些不同之處。在python中不會出現像c或c 一樣麻煩的規定符號 一些指令也要簡便許多。在python中 當你打出 按下回車時 電腦會自動幫助你縮排一格 縮排使得python的語言顯得非常精簡 當然要正確使用 否則會報錯 當你輸入pr時按下tab 電腦會自動...