i face check txt file location problem in window mobile 6 professional.
code testing for window form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim FILE_NAME As String = "c:\Users\Chee Kang\Desktop\New folder (2)\testFile.txt"
If System.IO.File.Exists(FILE_NAME) = True Then
MessageBox.Show("File already Exist")
Else
MsgBox("File Does Not Exist")
End If
End Sub
coding above show me the correct answer :File already Exist (i pasted the file there before i start my program)
but when i apply the same thing in window mobile 6 professional, it give me the wrong answer "File Does Not Exist" although i pasted the file there before i start my program.
i try to figure out the reason, but so far i can't get any correct reason.
Kindly advise.
thanks
Windows Mobile does not use drive letters.
Your path does not exist.
When we work with files on WinMo 6, we store and retrieve all files in directories relative to the installed application so that we don't have to worry about the WinMo directory structure.
To get the path to the installed app, you can use code similar to the following:
''' <summary>
''' Because the Windows Mobile doesn't have a current directory, this
''' method provides a way to get to the directory for this assembly.
''' </summary>
Public ReadOnly Property GetBaseDirectory() As String
Get
Dim sName As String = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
sName = IO.Path.GetDirectoryName(sName)
'
' Support for unit testing on the desktop. CodeBase returns a path with "file:\" at the start
' under Windows, but not under Windows CE. The code that uses this property expects
' the path without the file:\ at the start.
'
If Environment.OSVersion.Platform <> PlatformID.WinCE Then
If sName.StartsWith("file:\") Then
sName = sName.Remove(0, 6)
End If
End If
Return sName
End Get
End Property
Note that this code also supports unit testing on non-CE platforms. Once you get the base directory, you can use standard System.IO functionality to create directories, save files, and access files.
Other than the above code, much of our file interaction logic is the exact same code for WinMo and WinForms.
Related
I have done a simple VB application with this code:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim procName As String = Process.GetCurrentProcess().ProcessName
Dim processes As Process() = Process.GetProcessesByName(procName)
If processes.Length > 1 Then
Process.GetProcessesByName("keyinput")(0).Kill()
End If
End Sub
Public Sub type(ByVal int As Double, str As String)
For Each c As Char In str
SendKeys.Send(c)
System.Threading.Thread.Sleep(int * 1000)
Next
End Sub
Sub vai()
Dim line As String = ""
If File.Exists("trans.txt") Then
Using reader As New StreamReader("trans.txt")
Do While reader.Peek <> -1
line = reader.ReadLine()
type(0.155, line)
'SendKeys.Send(line)
SendKeys.Send("{ENTER}")
Loop
End Using
File.Delete("trans.txt")
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
vai()
End Sub
Basically the timer in it check if a file exists, read it and type the content simulating the keyboard.
I want this exe to start automatically when user login, it does it, apparently, I can see the form1 pop up but doesn't really works. Everyting is fine only if I run it manually by double-clicking the icon. Why and what can I do? Thanks
ps. i already tried to execute it with windows task manager, or putting a shortcut in the windows startup folder, or calling it from a cmd
EDIT:
when app starts automatically , process is running, but windows form is showing like this
Instead starting manually is showing like this:
I don't know this for a fact but I suspect that the issue is the fact that you are not specifying the location of the file. If you provide only the file name then it is assumed to be in the application's current directory. That current directory is often the folder that the EXE is in but it is not always and it can change. DO NOT rely on the current directory being any particular folder. ALWAYS specify the path of a file. If the file is in the program folder then specify that:
Dim filePath = Path.Combine(Application.StartupPath, "trans.txt")
If File.Exists(filePath) Then
Using reader As New StreamReader(filePath)
EDIT:
If you are running the application at startup by adding a shortcut to the user's Startup folder then, just like any other shortcut, you can set the working directory there. If you haven't set the then the current directory will not be the application folder and thus a file identified only by name will not be assumed to be in that folder.
If you are starting the app that way (which you should have told us in the question) then either set the working directory of the shortcut (which is years-old Windows functionality and nothing to do with VB.NET) or do as I already suggested and specify the full path when referring to the file in code. Better yet, do both. As I already said, DO NOT rely on the current directory being any particular folder, with this being a perfect example of why, but it still doesn't hurt to set the current directory anyway if you have the opportunity.
It was a Windows task scheduler fault, that for some reason didn't executed the exe correctly at logon. I've solved the issue by using Task Till Down and everything works fine now.
I am using the below code to navigate to a specific web address as follows :
WebBrowser1.Navigate("http://192.168.0.157/cm?cmnd=POWER%20Toggle"
The fact is that the the link returns a .json file and the WebBrowser controls displays the default save file dialog asking if i want to save the file or run it.
I want to ignore it the dialog and read from the .json file directly(i mean after downloading it).
I just want to get rid of the Save dialog of the webbrowser.I am a newbie so i don't know what to search or how to ask properly.
Though your post is not even close to be standard and hardly explains the issue, what i understand so far is that you have a few issues and i will answer them separately.
Disabling the download dialog of the webbrowser and downloading the files automatically
Firstly, you mentioned it returns a .json file. So , you can easily add a SaveFileDialogto your form or set a custom path(maybe in a variable) and check if the webbrowser is trying to download any .json files. Then you will Cancel the call(typically i mean that cancel the popup that says Save , Run ...) and make use of the SaveFileDialog or the local variable to save the file directly to disk. Here's a sample which uses a local string variable as the path and saves the .json file directly to disk :
Imports System.ComponentModel
...
Dim filepath As String '''class lever variable
Private Sub myBroswer_Navigating(sender as Object, e As WebBrowserNavigatingEventArgs) Handles myBroswer.Navigating
If e.Url.Segments(e.Url.Segments.Length - 1).EndsWith(".json") Then
e.Cancel = True
filepath = "C:\test\" + e.Url.Segments(e.Url.Segments.Length - 1)
Dim client As WebClient = New WebClient()
AddHandler client.DownloadFileCompleted , AddressOf New AsyncCompletedEventHandler(DisplayJson);
client.DownloadFileAsync(e.Url, filepath)
End If
End Sub
Displaying the result AKA .json
It is very easy to de-serialize/parse .json files.But first, download this , extract the ZIP and Add Reference to Newtonsoft.Json.dll. Now consider the bellow code snippet :
Private Sub DisplayJson()
Dim parseJson = Newtonsoft.Json.Linq.JObject.Parse(File.ReadAllLines(filepath))
MsgBox(parseJson("element name here").ToString)
End sub
Hope this helps
This question already has an answer here:
How to reference the current Windows user's video folder path in VB.net
(1 answer)
Closed 6 years ago.
I am trying to set the initial directory to the downloads folder but it doesn't work, Even though it's a perfectly valid path. Here is the code that I am using:
Private Sub btn_AddMod_Click(sender As Object, e As EventArgs) Handles btn_AddMod.Click 'This brings up the file dailoge
Dim Downloads As String = "\Downloads" 'A variables called \Downloads
Dim UserprofilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) 'This finds the directory to the User profile environment variable
Dim Downloadspath As String = UserprofilePath.Insert(0, "") + Downloads 'This adds \downloads to userpath
OpenFileDialog1.InitialDirectory = Downloadspath 'This sets the Open File Dialog to go to the users downloads
txt_setmodname.Text = Downloadspath 'This is used for debugging, it sets a textbox to the path
OpenFileDialog1.ShowDialog() 'This opens the Dialog
End Sub
When I copy the output text, the path is perfectly valid but instead of taking me to the path, it takes me to MyDocuments
That's some wacky code you have there. I'm not sure why it doesn't work and I'm not too interested in finding out. I just tested this and it worked as you want:
Using ofd As New OpenFileDialog
ofd.InitialDirectory = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads")
ofd.ShowDialog()
End Using
Obviously you can use an OpenFielDialog that you created in the designer instead of created in code if you want.
By the way, it should be noted that the user's Downloads folder is not necessarily in that location. Mine is on my D: drive, while my personal folder is on my C: drive. For people who keep C: only for system files, all their libraries and the like may be on a secondary drive. Unfortunately, there's no easy way to get the path for the Downloads folder like there is for Documents and some others. I'm guessing that the path is stored in the Registry or the like, but I'm not sure where.
I looked further into it and found out that there is a registry entry for the downloads path, so I used that instead and that seemed to have worked, My code is as follows.
Private Sub btn_AddMod_Click(sender As Object, e As EventArgs) Handles btn_AddMod.Click
Using ofd As New OpenFileDialog
Dim DownloadsPath = My.Computer.Registry.GetValue(
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\", "{374DE290-123F-4565-9164-39C4925E467B}", Nothing)
ofd.InitialDirectory = DownloadsPath
ofd.ShowDialog()
End Using
I'm not sure why the other method didn't work, it always took me to the MyDocuments folder for some reason.
Looking for a way that I can get the path of all exe files on an already specified drive. Or, get the path of a specified program.
Eg: specified c drive, program is excel. Code should then find the path for excel.
Or
Eg: gets path of all exe files, puts them in an array, can then search the array for the program that needs to be fetched.
Is there an easy way to do this?
Thanks in advance for any help
Ash
this code returns all exe files full paths from c:\Program Files\Microsoft Office directory into szFiles array then fetch for excel...
Imports System.IO
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim szFiles() As String, i As UInteger
szFiles = Directory.GetFiles("C:\Program Files\Microsoft Office", "*.exe", SearchOption.AllDirectories)
For i = 0 To szFiles.Length - 1
If InStr(szFiles(i), "EXCEL", CompareMethod.Text) > 0 Then MessageBox.Show("Result found for Excel..." & szFiles(i))
Next
End Sub
End Class
Hope it helps.
I am writing an application that needs admin rights to run in VB.NET (VS2012,framework 4)
It is an app to protect the Hosts file from modification.
I want the app to start automatically with windows with the command line argument "autorun".
So I have made a check box with the following code:
Private Sub CheckBox_autoupdate_Click(sender As Object, e As EventArgs) Handles CheckBox_autoupdate.Click
Dim oreg As RegistryKey = Registry.CurrentUser
Dim okey As RegistryKey = oreg.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
If CheckBox_autoupdate.Checked = True Then
okey.SetValue("HostProtect", Application.ExecutablePath & " /autoupdate")
Else
okey.DeleteValue("HostProtect")
End If
My.Settings.Save()
End Sub
When I open regedit, the value is present but when I restart my system the program is not executed at all!
Is it because the app needs admin priviledges? How can I make it start AND correctly pass the command line argument?
Anticipating your answers!
HKey_CurrentUser entries don't run when Windows starts. They run when the user logs in and the user's registry hive is loaded. If you want it to run when Windows starts, you'll need to use HKey_LocalMachine. Or even better, write this as a Windows Service.
Application.ExecutablePath will get the .exe link, not the path, so it should be:
Application.StartupPath & " \autoupdate.exe"