|
This can be achieved by using Win32 API. Create a method and add a Hook to get the windows notifications including logon, logoff, locked, unlocked etc.
So if you are using a Winform application include this namespace
using System.Windows.Interop;
In the initialize method add this piece:
HwndSource source = HwndSource.FromHwnd(this.Handle);
source.AddHook(new HwndSourceHook(WndProc));
where WndProc is
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled);
Let me know if you need a detailed implementation. I can help. Also you need to add some interop methods to access the WM_WTSSESSION_CHANGE, WTS_SESSION_UNLOCK etc.
Sunil
|
|
|
|
|
I add my files to my project, and I want open my pdf files from source of my project, how can i do this?
please help
|
|
|
|
|
You need to supply a little more info, ASPX you can just open it in a new instance of the browser and rely on the default PDF viewer (usually adobe) I think the same will work with winforms, WPF/Sliverlight is another problem.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
With Winforms you would typically use System.IO.Process.Start and rely on default application for the file type to open it.
|
|
|
|
|
you can try the following piece of code.
string filename;
filename = "report.pdf";
HttpContext.Current.Response.Clear();
Response.ClearContent();
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename= " + fileName);
HttpContext.Current.Response.Charset = "";
HttpContext.Current.Response.ContentType = "application/pdf";
string filepathtemp = "C:/inetpub/wwwroot/files/" + fileName;
HttpContext.Current.Response.WriteFile(filepathtemp);
HttpContext.Current.Response.End();
Dhyanga
modified 9-Jul-12 16:38pm.
|
|
|
|
|
Hi all,
I 'm trying to loop through a List<T> to see which element in the List is empty, then add strings entered via a text box into the empty element. I tried to display the content of the List element to check what it contains. I Get the error "Index was out of range. Must be non-negative and less than the size of the collection". The following is my code:
//Function to add string dynamically in Class1
private List<string> list1 = new List<string>();
public string AddText(string myText)
{
if(list1[i]=="" & k<1)
{
k = i;
list1[i] = myText;
k++;
}
return list1[i];
}
//Calling AddText() function from Class2
private void btn8_Click(object sender, EventArgs e)
{
string myText = txtDisplay.Text;
ExpressionEval k = new ExpressionEval();
string g = k.AddText(myText);
txtDisplay.Text = g;
}
Please point out why I'm getting this error, thanks in advance.
-- modified 7-Jul-12 9:05am.
|
|
|
|
|
Difficult to know without all the source code. However, from your description, seems that variable i in function AddText is out of range. You should check that i is positive and less than list1.Length. Something like this
private List<string> list1 = new List<string>();
public void AddText(string myText) {
if ((i < 0) || (i >= list1.Length)) {
MessageBox.Show(String.Format("i is {0}. Should be between 0 and {1}", i, list1.Length));
return;
}
if((list1[i] == "") && (k < 1)) {
k = i;
list1[i] = myText;
k++;
}
}
By the way, please mind the ampersand in line
if((list1[i] == "") && (k < 1)) {
Also, if you are looping, shouldn't there be a loop somewhere? I can't see it.
|
|
|
|
|
Hi, thanks for replying. I forgot to include a for loop in my code, so here it is.
public void AddText(string myText)
{
for (int i = 0; i<list1.Count;i++)
{ //Check to see if List element
// is empty
if(list1[i]=="" & k<1)
{
k = i;
list1[i] = myText;
k++;
}
}
return list1[k];
}
|
|
|
|
|
Based on this, try
for (int i = 0; i<list1.Count-1;i++)
|
|
|
|
|
In this example I imaging that you would receive the index out of range at the return list1[k]; If you notice inside your for loop you assign k to the value of i then assign the value to the list, then you increment k by one value.
this could work if you change the return list1[k] to return list1[k-1] (however you would also want to add some extra code to verify "k" is still within the index range of the list.
|
|
|
|
|
Try debugging and stepping through your source code.
It will help you figure out the exact line where you are getting this error.
Further, based on this, you will be able to diagnose this error.
|
|
|
|
|
Pardon my ignorance, but I don't see where k gets initialized. It gets a little confusing, too, when you use letters for different things. In class 1, it's an integer; in class 2 it's something else.
Will Rogers never met me.
|
|
|
|
|
Good points. I,j,k are quite confusing.
|
|
|
|
|
Hi, thank you all for responding. K is initialized outside of the function and I have modified my function as follows:
class Class1
{
private int k = 0;
private List<string> list1 = new List<string>();
//Passing in myTemp as a string
public string AddText(string myText)
{
int i = 0;
do
{
//check to see if element is empty
if (list1.Count == 0)
{
//Add the content of myText into list1
list1.Add(myText);
i++;
}
} while (i < list1.Count);
//Returns the content of the elements that were affected
return list1[i];
}
}
I have stepped through the function and Visual Studio says the line, return list1[i];is the cause of the error message "Index was out of range". I don't know what else to do. If you can explain why I'm getting the error by looking at my code, please point it out. Thanks for your help.
-- modified 7-Jul-12 9:16am.
|
|
|
|
|
That's a good clue! Now, add list1.Count and i to the Watch list and step through again, observing how each line of code affects them. I think you'll find that, when you hit the return statement, i = list1.Count . That will put it out of range, since the last element of list1 has an index of Count - 1. Just a guess...
Will Rogers never met me.
|
|
|
|
|
The reason this code would throw an out of range exception is if the code executes within this section
if (list1.Count == 0)
{
list1.Add(myText);
i++;
}
now you have added an item to the list and the count is now 1. You then increment i from zero to 1.
Now you are trying to return the first item in the collection (a zero based index collection) with the value of 1 when the value you should be requesting is 0
return list1[i-1] or list1[0] or list1[list1.Count - 1] etc. of course if your i value is 0 and you try list1[i-1] you will also receive an error because that would be the value -1 and that is out of range.
Hope that helps if you haven't already figured this out.
|
|
|
|
|
i'm working on an application that marks a computer that ever accessed it.
i mark it using computer name, but since computer name can be changed, i'd love to know whether static IP can be changed or not, thanks before.
|
|
|
|
|
|
PIEBALDconsult wrote: Of course they can.
guess i've to find something else that's really static.
btw thank you.
|
|
|
|
|
If you can get the MAC address of the network card of the computer connecting to your server, that should work for what you are describing.
There are ways to change the MAC address too, but it not something you will normally see.
Soren Madsen
|
|
|
|
|
Excellent answer, Soren. Yes, the MAC address can be spoofed, but 99.999% of users won't have any idea how to do so, nor any reason to. IIRC, on a local network the ARP command will return the MAC address. On the Internet, I'm not sure that there is a way to return this information, but it's worth looking into.
Will Rogers never met me.
|
|
|
|
|
Thanks Roger,
I agree, the OP (and just about all of us) is highly unlikely to run into anyone spoofing the MAC address, but I thought I would mention that part too.
Soren Madsen
|
|
|
|
|
You haven't said what kind of application you're working on, nor if you are writing the server-side code or client side.
On the server-side, it doesn't matter if you're writing a ASP.NET or Windows Forms app, you cannot get the client MAC address. You'll end up getting the MAC address of the near-side of the router closest to your server, not the client MAC.
If you're writing client-side code in a Windows Forms app, the client get easily get it's own MAC address and send that information in a request to the server. You'll have to implement the interface on the server and client for this to work.
|
|
|
|
|
I know the OP has not given a whole lot of detail, but since he posted his question in this forum, I figured it would be valid to mention the MAC address. He is looking for something that is both unique to a computer and does not change.
I totally agree he might not be able to acquire the MAC address and that totally depends on what he is developing.
Soren Madsen
|
|
|
|
|
i've tried it and i got something like 50E549A6XXXX.
thank you very much.
|
|
|
|