require 'mscorlib'
require 'System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
require 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Application = System::Windows::Forms::Application
Button = System::Windows::Forms::Button
ColumnHeader = System::Windows::Forms::ColumnHeader
DockStyle = System::Windows::Forms::DockStyle
Font = System::Drawing::Font
FontStyle = System::Drawing::FontStyle
Form = System::Windows::Forms::Form
FormBorderStyle = System::Windows::Forms::FormBorderStyle
FormStartPosition = System::Windows::Forms::FormStartPosition
Icon = System::Drawing::Icon
Label = System::Windows::Forms::Label
ListView = System::Windows::Forms::ListView
MainMenu = System::Windows::Forms::MainMenu
MenuItem = System::Windows::Forms::MenuItem
MessageBox = System::Windows::Forms::MessageBox
MessageBoxBittons = System::Windows::Forms::MessageBoxButtons
MessageBoxIcon = System::Windows::Forms::MessageBoxIcon
PictureBox = System::Windows::Forms::PictureBox
PictureBoxSizeMode = System::Windows::Forms::PictureBoxSizeMode
Point = System::Drawing::Point
Registry = Microsoft::Win32::Registry
Shortcut = System::Windows::Forms::Shortcut
Size = System::Drawing::Size
SortOrder = System::Windows::Forms::SortOrder
StatusBar = System::Windows::Forms::StatusBar
View = System::Windows::Forms::View
class Frm < Form
def initialize
#this path keeps codecs CLSIDs and names
@reg = 'CLSID\{083863F1-70DE-11d0-BD40-00A0C911CE86}\Instance'
self.InitializeComponent()
end
def InitializeComponent()
@mnuMain = MainMenu.new()
@mnuFile = MenuItem.new()
@mnuScan = MenuItem.new()
@mnuExit = MenuItem.new()
@mnuView = MenuItem.new()
@mnuSBar = MenuItem.new()
@mnuHelp = MenuItem.new()
@mnuInfo = MenuItem.new()
@lvCodec = ListView.new()
@chNames = ColumnHeader.new()
@chClsid = ColumnHeader.new()
@chItems = ColumnHeader.new()
@sbCount = StatusBar.new()
#
#mnuMain
#
[@mnuFile, @mnuView, @mnuHelp].each {|item| @mnuMain.MenuItems.Add item}
#
#mnuFile
#
[@mnuScan, @mnuExit].each {|item| @mnuFile.MenuItems.Add item}
@mnuFile.Text = '&File'
#
#mnuScan
#
@mnuScan.Shortcut = Shortcut.F5
@mnuScan.Text = '&Scan...'
@mnuScan.Click {|sender, e| mnuScan_Click(sender, e)}
#
#mnuExit
#
@mnuExit.Shortcut = Shortcut.CtrlX
@mnuExit.Text = 'E&xit'
@mnuExit.Click {|sender, e| mnuExit_Click(sender, e)}
#
#mnuView
#
@mnuView.MenuItems.Add @mnuSBar
@mnuView.Text = '&View'
#
#mnuSBar
#
@mnuSBar.Checked = true
@mnuSBar.Text = '&Show Status Bar'
@mnuSBar.Click {|sender, e| mnuSBar_Click(sender, e)}
#
#mnuHelp
#
@mnuHelp.MenuItems.Add @mnuInfo
@mnuHelp.Text = '&Help'
#
#mnuInfo
#
@mnuInfo.Text = 'About'
@mnuInfo.Click {|sender, e| mnuInfo_Click(sender, e)}
#
#lvCodec
#
@lvCodec.AllowColumnReorder = true
[@chNames, @chClsid, @chItems].each {|item| @lvCodec.Columns.Add item}
@lvCodec.Dock = DockStyle.Fill
@lvCodec.FullRowSelect = true
@lvCodec.GridLines = true
@lvCodec.MultiSelect = false
@lvCodec.Sorting = SortOrder.Ascending
@lvCodec.View = View.Details
#
#chNames
#
@chNames.Text = 'Name'
@chNames.Width = 183
#
#chClsid
#
@chClsid.Text = 'CLSID'
@chClsid.Width = 239
#
#chItems
#
@chItems.Text = 'Module'
@chItems.Width = 250
#
#sbCount
#
@sbCount.SizingGrip = false
#
#Frm
#
self.ClientSize = Size.new(573, 217)
[@lvCodec, @sbCount].each {|item| self.Controls.Add item}
self.Menu = @mnuMain
self.StartPosition = FormStartPosition.CenterScreen
self.Text = 'Codecs'
self.Load {|sender, e| frmMain_Load(sender, e)}
end
def mnuScan_Click(sender, e)
#clear before each scanning
@lvCodec.Items.Clear()
#loading info
rk = Registry.ClassesRoot
rk.OpenSubKey(@reg).GetSubKeyNames().each do |sub|
#name(s) of codec(s)
item = @lvCodec.Items.Add(rk.OpenSubKey(@reg + '\\' + sub).GetValue('FriendlyName'))
#CLSID
item.SubItems.Add(sub)
#looking for module(s) of codec(s)
item.SubItems.Add(rk.OpenSubKey('CLSID\\' + sub + '\\InprocServer32').GetValue(''))
end
#totaly
@sbCount.Text = @lvCodec.Items.Count.ToString() + ' item(s)'
end
def mnuExit_Click(sender, e)
Application.exit
end
def mnuSBar_Click(sender, e)
bln =! @mnuSBar.Checked
@mnuSBar.Checked = bln
@sbCount.Visible = bln
end
def mnuInfo_Click(sender, e)
FrmA.new().ShowDialog()
end
def frmMain_Load(sender, e)
@sbCount.Text = '0 item(s)'
end
end
class FrmA < Form
def initialize
self.InitializeComponent()
end
def InitializeComponent()
@pbImage = PictureBox.new()
@lblName = Label.new()
@lblCopy = Label.new()
@btnExit = Button.new()
#
#pbImage
#
@pbImage.Location = Point.new(16, 16)
@pbImage.Size = Size.new(32, 32)
@pbImage.SizeMode = PictureBoxSizeMode.StretchImage
#
#lblName
#
@lblName.Font = Font.new('Microsoft Sans Serif', 9, FontStyle.Bold)
@lblName.Location = Point.new(53, 19)
@lblName.Size = Size.new(360, 18)
@lblName.Text = 'Codecs v1.00'
#
#lblCopy
#
@lblCopy.Location = Point.new(55, 37)
@lblCopy.Size = Size.new(360, 23)
@lblCopy.Text = '(C) 2012 Grigori Zakharov gregzakh@gmail.com'
#
#btnExit
#
@btnExit.Location = Point.new(135, 67)
@btnExit.Text = 'OK'
#
#FrmA
#
self.AcceptButton = @btnExit
self.CancelButton = @btnExit
self.ClientSize = Size.new(350, 110)
[@pbImage, @lblName, @lblCopy, @btnExit].each {|item| self.Controls.Add item}
self.ControlBox = false
self.FormBorderStyle = FormBorderStyle.FixedSingle
self.ShowInTaskbar = false
self.StartPosition = FormStartPosition.CenterParent
self.Text = 'About...'
self.Load {|sender, e| frmAbout_Load(sender, e)}
end
def frmAbout_Load(sender, e)
begin
icon = Icon
@pbImage.Image = self.icon.ToBitmap()
rescue Exception => e
MessageBox.Show(e.Message, self.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop)
end
end
end
Application.enable_visual_styles
Application.run Frm.new()