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".
PrivateSub InterpretValue(rawValue asObject, interpretAsType as RegistryValueKind)
' REG_BINARYDim byteArray AsByte() = DirectCast(rawValue, Byte())
' Do something appropriateExitSelectCase RegistryValueKind.DWord
' REG_DWORDDim signedValue32 AsInteger = DirectCast(rawValue, Integer)
' Do something appropriateExitSelectCase RegistryValueKind.QWord
' REG_QWORDDim signedValue64 AsLong = DirectCast(rawValue, Long)
' Do something appropriateExitSelectCase RegistryValueKind.Unknown, RegistryValueKind.String, RegistryValueKind.ExpandString
Dim stringValue asString = rawValue.ToString()
' Do something appropriateExitSelectCase RegistryValueKind.MultiString
' REG_MULTI_SZDim stringArray AsString() = TryCast(rawValue, String())
' Do something appropriateExitSelectEndSelectEndSub
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.
The .NET RegistryKey exposes a small subset of the full Windows Registry API and to get the LastWriteTime requires the Windows RegQueryInfoKey function. Microsoft made this really difficult prior to .NET 4, as the RegistryKey class did not expose the operating system registry key handle.
With the restriction of .NET 4 it should be a simple matter of using P/Invoke to call RegQueryInfoKey with the twelve parameters set correctly! I haven't done this but most of them are optional, so can probably be set to null or IntPtr.Zero.
If you have to work on a lower (lesser?) version of .NET then I don't think this will be an easy task as there is no facility to exchange handles between the .NET RegistryKey class and the native Windows functions. I think the only option would be using RegOpenKeyEx to get the handle and then call RegQueryInfoKey.
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.
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)
MsgBox("port does not exist")
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
btn_app1.Text = "ON"
btn_app1.BackColor = Color.Green
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
btn_app2.Text = "ON"
btn_app2.BackColor = Color.Green
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
btn_app3.Text = "ON"
btn_app3.BackColor = Color.Green
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
btn_app4.Text = "ON"
btn_app4.BackColor = Color.Green
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
btn_app5.Text = "ON"
btn_app5.BackColor = Color.Green
Private Sub io(ByVal bit As Integer)
val = axHwinterface1.InPort(888)
axHwinterface1.OutPort(888, CShort(val Or bit))
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
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.
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.
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.