|
Hi All,
I am attempting to retrieve USB Usage History using VB.NET. I am using VS 2012.
The following block of code lists this entry.
Dim RegKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Enum\USBSTOR\", False)
Dim str1 As String
For Each subKeyName As String In RegKey.GetSubKeyNames()
Dim tempKey As RegistryKey = RegKey.OpenSubKey(subKeyName)
Debug.Print("USBSTORE KEY: " & subKeyName & RegKey.GetValue(subKeyName, "").ToString())
Debug.Print(" -----------")
For Each NxtSubKeyName As String In tempKey.GetSubKeyNames()
Dim tempKey1 As RegistryKey = tempKey.OpenSubKey(NxtSubKeyName)
Debug.Print("USBSTOR SUBKEY: " & NxtSubKeyName.ToString() & " Value Count: " & tempKey1.ValueCount.ToString())
For Each valueName As String In tempKey1.GetValueNames()
Debug.Print(valueName & ": " & tempKey1.GetValue(valueName).ToString())
Next
Next
Next
My code produces this output:
USBSTORE KEY: Disk&Ven_SanDisk&Prod_Cruzer&Rev_1100
-----------
USBSTOR SUBKEY: SDXX1005181106121551&0 Value Count: 12
DeviceDesc: @disk.inf,%disk_devdesc%;Disk drive
Capabilities: 16
HardwareID: System.String[]
CompatibleIDs: System.String[]
ContainerID: {2471d8a3-e22c-5a5e-8b09-f0bb7616119d}
ConfigFlags: 0
ClassGUID: {4d36e967-e325-11ce-bfc1-08002be10318}
Driver: {4d36e967-e325-11ce-bfc1-08002be10318}\0010
Class: DiskDrive
Mfg: @disk.inf,%genmanufacturer%;(Standard disk drives)
Service: disk
FriendlyName: SanDisk Cruzer USB Device
But when I export this registry entry to a text file, I get the following results:
Obviously we see much more information in the exported data. Why is there so much more info here and how can I get my VB program to access this information?
I am trying to write some code to obtain USB Usage History.
Thanks for any help,
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer&Rev_1100
Class Name: <NO CLASS>
Last Write Time: 1/17/2013 - 2:51 PM
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer&Rev_1100\SDXX1005181106121551&0
Class Name: <NO CLASS>
Last Write Time: 1/17/2013 - 2:51 PM
Value 0
Name: DeviceDesc
Type: REG_SZ
Data: @disk.inf,%disk_devdesc%;Disk drive
Value 1
Name: Capabilities
Type: REG_DWORD
Data: 0x10
Value 2
Name: HardwareID
Type: REG_MULTI_SZ
Data: USBSTOR\DiskSanDisk_Cruzer__________1100
USBSTOR\DiskSanDisk_Cruzer__________
USBSTOR\DiskSanDisk_
USBSTOR\SanDisk_Cruzer__________1
SanDisk_Cruzer__________1
USBSTOR\GenDisk
GenDisk
Value 3
Name: CompatibleIDs
Type: REG_MULTI_SZ
Data: USBSTOR\Disk
USBSTOR\RAW
Value 4
Name: ContainerID
Type: REG_SZ
Data: {2471d8a3-e22c-5a5e-8b09-f0bb7616119d}
Value 5
Name: ConfigFlags
Type: REG_DWORD
Data: 0
Value 6
Name: ClassGUID
Type: REG_SZ
Data: {4d36e967-e325-11ce-bfc1-08002be10318}
Value 7
Name: Driver
Type: REG_SZ
Data: {4d36e967-e325-11ce-bfc1-08002be10318}\0010
Value 8
Name: Class
Type: REG_SZ
Data: DiskDrive
Value 9
Name: Mfg
Type: REG_SZ
Data: @disk.inf,%genmanufacturer%;(Standard disk drives)
Value 10
Name: Service
Type: REG_SZ
Data: disk
Value 11
Name: FriendlyName
Type: REG_SZ
Data: SanDisk Cruzer USB Device
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer&Rev_1100\SDXX1005181106121551&0\Device Parameters
Class Name: <NO CLASS>
Last Write Time: 1/17/2013 - 2:51 PM
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer&Rev_1100\SDXX1005181106121551&0\Device Parameters\MediaChangeNotification
Class Name: <NO CLASS>
Last Write Time: 9/5/2011 - 8:07 PM
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer&Rev_1100\SDXX1005181106121551&0\Device Parameters\Partmgr
Class Name: <NO CLASS>
Last Write Time: 9/5/2011 - 8:07 PM
Value 0
Name: Attributes
Type: REG_DWORD
Data: 0
Value 1
Name: DiskId
Type: REG_SZ
Data: {00af4242-d76c-11e0-8169-0024e8e34876}
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer&Rev_1100\SDXX1005181106121551&0\LogConf
Class Name: <NO CLASS>
Last Write Time: 1/17/2013 - 2:51 PM
|
|
|
|
|
Looks like you are only reading one level down - your sub-key has further sub-keys.
Suggestion - use recursion to get at all the info.
HTH
Happiness will never come to those who fail to appreciate what they already have. -Anon
|
|
|
|
|
Your code is essentially correct but what you haven't done is to read the type of data stored in each name-value pair so that the correct cast can be applied.
The raw data obtained from GetValue(valueName) is typed as Object and the ToString() conversion gives a correct representation in most cases, the exceptions being when the actual type is an array (REG_BINARY, REG_MULTI_SZ)
The technique is read the type via GetValueKind(valueName) and then apply a cast to the Object returned from GetValue(valueName) . The incomplete method below shows the basics and in your case formatting the values ready for display should be done in the gaps left as "do something appropriate".
Private Sub InterpretValue(rawValue as Object, interpretAsType as RegistryValueKind)
Select Case interpretAsType
Case RegistryValueKind.Binary
Dim byteArray As Byte() = DirectCast(rawValue, Byte())
Exit Select
Case RegistryValueKind.DWord
Dim signedValue32 As Integer = DirectCast(rawValue, Integer)
Exit Select
Case RegistryValueKind.QWord
Dim signedValue64 As Long = DirectCast(rawValue, Long)
Exit Select
Case RegistryValueKind.Unknown, RegistryValueKind.String, RegistryValueKind.ExpandString
Dim stringValue as String = rawValue.ToString()
Exit Select
Case RegistryValueKind.MultiString
Dim stringArray As String() = TryCast(rawValue, String())
Exit Select
End Select
End Sub
|
|
|
|
|
Thanks for the explanations. I understand that I should be considering the data type. I can change my code accordingly. But what about the "Last Write Time" information that is displayed in the exported text data for these keys? How can I access that? My goal is to capture the History of each USB device that was used in the system, with dates and times. I'm assuming that the Last Write Time on the exported text will give me this information, but I don't see how my code, even with the data type considerations, will access that.
Thanks,
|
|
|
|
|
|
|
Hi All,
I developed my app using VS 2012.
I designed my report using the Report Viewer control. The data on my report is not tabular. It is a fixed-field form that spans several pages. I set the data source to a collection of an object that I developed and all the data for the report comes from my collection (which will always only have one item in it).
The report seems to be working fine, I setup a header and footer. When my code refreshes the report, my data is displayed nicely on the report as i designed it. However, when I convert to Print view, the report seems to be inserting page breaks while rendering. my nice little 4-page form becomes a 10 page report with page breaks occurring on every other page and some extra at the end.
What can I look at to determine why these extra page breaks occur in the rendering process? I thought it may be page layout related, so I changed the margins to all zeros and still see the additional page breaks.
Also, another thing I noticed is that when I added the footer, the footer height is about 2.5 inches and the designer will not allow me to change it.
Any help will be greatly appreciated.
Thanks,
|
|
|
|
|
What are the printer parameters? The printer selected, page size and margins will determine how many pages are rendered...
HTH
Happiness will never come to those who fail to appreciate what they already have. -Anon
|
|
|
|
|
Hi ChandraRam,
Thanks for your quick reply. My page size is 8.5x11. Page Units = Inches. Orientation in Portrait. I originally had the margins set at .5 for all, but I also tried changing them all to 0 with no change in the resulting number of pages.
In designing my report I used the Report Ruler to ensure that my data is only setup between 1 inch on the left and 7inch on the right. I used a Rectangle control to contain the different sections of my form so I can insure that each rectangle is only 6 inches long, starting at 1 inch on the right and all my field data is contained within a rectangle control. I am currently not specifying page breaks in the properties of any of my rectangle controls, although I did try to add a page break property on some rectangles which did not affect the additional page breaks when printing.
So my issue now is how can I determine what is specifically causing a page break.
|
|
|
|
|
my pc's operating system
windows 7 ultimate 32 bit
-------------------------
i am working on a project that will control 5 devices through pc parallel port/printer port.
when i run the program it will first appear a loginform
then when i enter.
it always returns that the port doesnt exist.
even though i have the port it cant detect it.. i dont know what is wrong with my code.
--------------------------------------------------------
Dim FILE_NAME As String = "LPT1"
If System.IO.File.Exists(FILE_NAME) Then
Dim objWriter As New System.IO.StreamWriter(FILE_NAME)
objWriter.Write("hi")
objWriter.Close()
MsgBox("ok")
Else
MsgBox("port does not exist")
End If
------------------------------------------------------
then after the login the next form is homepage. there you'll see the switch buttons that will turn on and off a device. when i clicked any of this buttons an error will prompt. its say that object reference not set to an instance of an object
NullReferenceException was unhandled.
Private Sub btn_app1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_app1.Click
If btn_app1.Text = "ON" Then
btn_app1.Text = "OFF"
btn_app1.BackColor = Color.Red
io(0)
Else
btn_app1.Text = "ON"
btn_app1.BackColor = Color.Green
io(1)
End If
End Sub
Private Sub btn_app2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_app2.Click
If btn_app2.Text = "ON" Then
btn_app2.Text = "OFF"
btn_app2.BackColor = Color.Red
io(0)
Else
btn_app2.Text = "ON"
btn_app2.BackColor = Color.Green
io(2)
End If
End Sub
Private Sub btn_app3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_app3.Click
If btn_app3.Text = "ON" Then
btn_app3.Text = "OFF"
btn_app3.BackColor = Color.Red
io(0)
Else
btn_app3.Text = "ON"
btn_app3.BackColor = Color.Green
io(4)
End If
End Sub
Private Sub btn_app4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_app4.Click
If btn_app4.Text = "ON" Then
btn_app4.Text = "OFF"
btn_app4.BackColor = Color.Red
io(0)
Else
btn_app4.Text = "ON"
btn_app4.BackColor = Color.Green
io(8)
End If
End Sub
Private Sub btn_app5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_app5.Click
If btn_app5.Text = "ON" Then
btn_app5.Text = "OFF"
btn_app5.BackColor = Color.Red
io(0)
Else
btn_app5.Text = "ON"
btn_app5.BackColor = Color.Green
io(16)
End If
End Sub
Private Sub io(ByVal bit As Integer)
val = axHwinterface1.InPort(888)
axHwinterface1.OutPort(888, CShort(val Or bit))
End Sub
--------------------------------------------------------
please help me im new in this.. i need your help guys.. thank you in advance..
every response is very much appreciated
if you want to see my whole project you can Download it here
http://www.mediafire.com/?1zvx1ty736r2nnb
|
|
|
|
|
There is an important and great technology: it's called debugging .
Set a break point somewhere in your code, e.g at Private Sub btn_app1_Click(...) and then run the code step by step. Thus you will detect the line of code where the exception is thrown.
I guess it happens at Private Sub io(...) . Either axHwinterface1 is Nothing , or InPort(888 ) returns Nothing , then the next line fails.
Debugging will tell you the exact reason.
|
|
|
|
|
thank you for the reply Mr. Bernhard.. im sorry but i don't know exactly how to debug it i need a lot of information to understand the errors. i know that i dont know a lot of things in VB but im willing to learn, im still a student.
thank very much you sir for the advice. i'll tell you i comes up with a solution.
|
|
|
|
|
Take a look here[^].
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
thank you for your reply Mr.Richard
in the link you gave me. do i need all that codes in my project? im sorry but some of its content is new to me.
hope you can help me what to add in my project.
i'll try test those code in the link if it will make my device work.
thank you again.. looking forward for you reply.
|
|
|
|
|
Sorry I don't know. You need to read the article and the code and figure out how much of it you need in your project. It largely depends on which parts you are having difficulty with.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
its ok.. i'll just read the article..
im wonder if i can do this in time but.i hope i'll found out the solution as soon as possible
i just learn vb in tutorials. and i dont see any tutorials about my project thats why im having a hard time figuring out things just by myself.
thank you again Mr. Richard all of your reply is very much appreciated.
|
|
|
|
|
Lord Christian wrote: i just learn vb in tutorials. and i dont see any tutorials about my project If you are just learning then this seems a rather ambitious project. Also, you cannot guarantee that a tutorial will exist for every possible combination of circumstances, that is why developers need to practice their skills all the time.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
i know this is an ambitious project.
But the good part is if i make it, i can say it is the biggest project that i achieve.
yes it will take a lot of time to finish this in my current intelligence state.
but still i'm very desperate of finishing this project. if this project became successful im gonna post an article about it here.
|
|
|
|
|
When I said this was an ambitious project, I did not mean to suggest that you should abandon it completely. Rather, that you should focus on some simpler projects in order to increase your knowledge and experience. Once you are fully comfortable with the language, the framework and the hardware platform, then come back to this project and continue. And writing an article about your final project when it is working is an excellent idea.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
Thank you sir for your advice. Your right i should go for simpler projects. i guess im gonna take your advice. i'll let you know if i have questions in my future projects
|
|
|
|
|
Hello,
Any body knows how to run visual basic program using
matlab COM Object ?
http://www.codeproject.com/Articles/6236/Building-COM-Components-Using-MATLAB-Part-I
Regards.
|
|
|
|
|
The same way you run other applications from MatLab. There's an example here[^].
|
|
|
|
|
|
VB6 is no longer supported.
|
|
|
|
|
When debugging user control, having Subclass handler, put your mouse on the user control not clicking, Sub zSubclass_Proc has promptly run, how to troubleshoot? is there a way that I can right-click on an object then run to? anyone knows please help.
|
|
|
|