|
It depends whether it is selected and installed by the user, or forced on them.
|
|
|
|
|
It "may" be enforced by company-policies. If it is without the knowledge and consent of the owner then it would always be illegal, regardless of what it does.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
A quick look on MSDN shows that the "Body" string is read/write, but I'm not sure whether that means that editing is supported from code.
I'd prefer saving those mails in a SQL Server and processing them there - also a lot easier with debugging in the future, and no dependency on (a specific version of) Outlook.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Creating the function ReadMail() as below replaces text, as I want it.
static void ReadMail(){
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items Items = inboxFolder.Items.Restrict("[LastModificationTime] > '01/1/2003'");
foreach (var item in Items){
var mail = (Outlook.MailItem)item;
mail.Body = mail.Body.Replace("Text to be replaced", "Replacing text");
mail.Save();
}
}
|
|
|
|
|
Hi,
how can i set windows form over other programs at the desktop in c#?
i mean i have a form that is like a tool bar that always
has to be at top on the screen and all other programs that are running(like chrome, ie..) should be below it.
the form must by always visible to the user (topmost=true), and will not hide part of other programs windows.
|
|
|
|
|
That's not really possible, even for a topmost window - which is above all the others - you can't prevent other applications from "using" part of the desktop: there is no way to stop an app from (for example) maximizing and expecting to get the whole screen.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
|
You're welcome.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
I give users an option (check box) if they want a particular "window" "on top" (like a log).
Because, often a dialog / window they need to interact with will appear "below" this top window, and then they cannot interact with it (e.g. press "OK") because it is covered (and they don't know how to "move" it).
If a window has a "top most", at least allow the user to "minimize" it if it must always be "available".
I'll "flash" the title bar, so even if a window is minimized, the user knows I'm still "logging their mistakes" (or whatever).
(And "close" simply "hides" these windows; keeping content intact for the next item).
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Desktop toolbars are a thing of the past, but if you must...
Keep in mind that some applications don't respect the new Desktop size taking into consideration the toolbar boundaries. They will go by screen size instead, which toolbars don't change, overlaying their window on top of your toolbar.
|
|
|
|
|
hi
i'm getting the following error when trying to push notification to multiple ios devices
Error:
System.IO.IOException: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) when pushing notification to apple
any help?
Thank u
|
|
|
|
|
"any help?" How about, have you got any code?
|
|
|
|
|
not getting any code , just i'm getting that exception after pushing some tokens
|
|
|
|
|
If you don't show us any relevant code that you have written, you are just wasting our time and yours. You might as well just google what triggers that exception.
This space for rent
|
|
|
|
|
this is my code
int port = 2195;
String hostname = "gateway.push.apple.com";
try
{
TcpClient client = new TcpClient(hostname, port);
SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
try
{
sslStream.AuthenticateAsClient(hostname, certificatesCollection, System.Security.Authentication.SslProtocols.Tls, false);
for (int i = 0; i < Token.Length; i++)
{
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, dt=" + Token[i]);
MemoryStream memoryStream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(memoryStream);
writer.Write((byte)0);
writer.Write((byte)0);
writer.Write((byte)32);
writer.Write(HexStringToByteArray(Token[i]));
String payload = "{ \"aps\" : { \"alert\" : {\"title\" : \"" + szAppName + "\",\"body\" : \"" + message + "\",\"Type\" : \"" + szType + "\"} }}";
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, payload=" + payload.ToString());
writer.Write((byte)0);
byte[] b1 = System.Text.Encoding.UTF8.GetBytes(payload);
writer.Write((byte)b1.Length);
writer.Write(b1);
writer.Flush();
byte[] array = memoryStream.ToArray();
sslStream.Write(array);
sslStream.Flush();
}
client.Close();
}
catch (System.Security.Authentication.AuthenticationException ex)
{
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, AuthenticationException=" + ex.ToString());
client.Close();
}
catch (Exception exp)
{
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, Exception=" + exp.ToString());
client.Close();
}
}
catch (Exception ex)
{
HttpContext.Current.Trace.Warn("inside sendPushNotificationApple, Exception1=" + ex.ToString());
}
|
|
|
|
|
You're using a "TcpClient" (Socket), but I do not see you actually "opening" (and testing) the "connection".
i.e. You need to "connect" at some point.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
New to C# and want to know the best way to use the TaskFactory class and how to make sure I am populating my dataGridView rows correctly. Right now, I am only seeing a value in the last dataGridView row. Example: (If I have 3 dataGridView rows I am trying to populate, I only see the output in the 4th unpopulated row.) So, my question is: Am I using TaskFactory correctly and in the most efficient way and how do I make sure I am populating my dataGridView rows correctly. I am using .NET 4.5.51209 and VS 2010
if (dataGridView1.Rows.Count > 1)
{
for (int index = 0; index < dataGridView1.Rows.Count-1; index++)
{
string gridDevice = dataGridView1.Rows[index].Cells[0].Value.ToString();
string service = comboBox1.Text;
WebClient web = new WebClient();
web.UseDefaultCredentials = true;
List<Task> tasks = new List<Task>();
tasks.Add(Task.Factory.StartNew(() =>
{
System.IO.Stream stream = web.OpenRead("http://<some website>");
StreamReader reader = new StreamReader(stream);
String holdHTML = reader.ReadToEnd();
Match mTitle = Regex.Match(holdHTML, ">" + service + "(.*?)<");
if (mTitle.Success)
{
string package = mTitle.Groups[0].Value;
string[] package1 = package.Split('>', '<');
dataGridView1.Rows[index].Cells[5].Value = package1[1];
}
else
{
dataGridView1.Rows[index].Cells[5].Value = "N/A";
}
}));
}
}
|
|
|
|
|
There are a few issues with your code that you need to address. First, you are creating a list of tasks that you end up doing nothing with other than adding a single task. Why not just use that single task instead? Second issue, the StartNew is, essentially, fire and forget so you're calling it and letting the code fall back to the calling method immediately. You have nothing in there that's handling cases where the calling code errors out (for instance); to fix this, add something called a continuation that gets called when your task completes - you can handle your error cases in here for instance. Third, have you tested the core logic of the method inside the task to make sure that adds the data you would expect? Before moving your code into a task, it's generally worth seeing if the code runs successfully and only move it once you are sure it's rock solid.
What version of .NET are you using? It might be worth investigating using async/await and Task.Run if you can.
This space for rent
|
|
|
|
|
Thanks Pete for responding! Yes, my code was working before trying the TaskFactory. I have removed the List of tasks and the code below is working. But, my issue is, I am not sure how to use the task in the for loop. Currently, this is taking about 5 seconds for 3 rows whether I use the Task or not. I am trying to figure out where to place it so I can do all three calls at one time and reduce the time from 5 seconds to 1.75 seconds, which is about what it takes for 1 row.
<pre>
if (dataGridView1.Rows.Count > 1)
{
for (int index3 = 0; index3 < dataGridView1.Rows.Count-1; index3++)
{
string gridDevice = dataGridView1.Rows[index3].Cells[0].Value.ToString();
string service = comboBox1.Text;
WebClient web = new WebClient();
web.UseDefaultCredentials = true;
Task tasks = Task.Factory.StartNew( () =>
{
System.IO.Stream stream = web.OpenRead("http://<website>");
StreamReader reader = new StreamReader(stream);
String holdHTML = reader.ReadToEnd();
Match mTitle = Regex.Match(holdHTML, ">" + service + "(.*?)<");
if (mTitle.Success)
{
string package = mTitle.Groups[0].Value;
string[] package1 = package.Split('>', '<');
dataGridView1.Rows[index3].Cells[5].Value = package1[1];
}
else
{
dataGridView1.Rows[index3].Cells[5].Value = "N/A";
}
});
tasks.Wait();
}
}</pre>
|
|
|
|
|
You should rethink your whole design; too much "overlap".
WebClient supports asynchronous "call backs" (i.e. events); so no need to complicate things with "Tasks".
Since you're "updating the UI" directly, your approach will probably result in "UI thread" conflicts.
"Data Grids" are "views" of an underlying data source; updating grids directly is "hacking".
Better your "web interface" updates an "observeable-type" of collection that the data grid consumes as its data source.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Can anyone help with this? This code is working using Parallel.ForEach - I understand since I am doing I/O, I should be using Async/Await but need some help to incorporate this for my piece of code. I will comment about how/why/what I am doing below within my code. Thanks
// Piece of code to find out if a particular device has a specified piece of software entitled. Will have up to 10 devices in the grid.
// Someone has told me I am not using the Grid in the correct way, so I will eventually change the grid to a table.
if (dataGridView1.Rows.Count > 1)
{
string service = comboBox1.Text;
// Is it best to use a list or IEnumerable here? If IEnumerable, please help!
// populating internal url with device id from the grid, accessing same page,
// with different search parameter for each url
var urls = new List<string> { };
for (int index1 = 0; index1 < dataGridView1.Rows.Count - 1; index1++)
{
string gridDevice = dataGridView1.Rows[index1].Cells[0].Value.ToString();
urls.Add("http://<internal webite>.asp?type=search&OU=" + service + "<internal>&devicename=" + gridDevice + <internal>");
}
// Not sure how to use async/await - or any other suggestions and help would be appreciated.
Parallel.ForEach(urls, (url, state, index) =>
{
using (var client = new WebClient())
{
client.UseDefaultCredentials = true;
var contents = client.DownloadString(url);
// When I put Stopwatch ending here, I am seeing 1st time around 2 seconds, then increasing thru next 9 up to around 5 seconds.
// Total time I see to populate all 10 rows is around 15 seconds. Is it possible to get all 10 rows populated in approximately 3 seconds.
int vOut;
Match mTitle = Regex.Match(contents, ">" + service + "(.*?)<");
if (mTitle.Success)
{
string package = mTitle.Groups[0].Value;
string[] package1 = package.Split('>', '<');
vOut = Convert.ToInt32(index);
dataGridView1.Rows[vOut].Cells[5].Value = package1[1];
}
else
{
vOut = Convert.ToInt32(index);
dataGridView1.Rows[vOut].Cells[5].Value = "N/A";
}
}
});
}
c#
|
|
|
|
|
Hi all,
In my current project it is needed to work with CAN dbc files in order to extract the CAN messages and relevant data.
Is there a standard method for going about this?
So far my searches havent revealed anything helpful..
Thanks for any advice!
|
|
|
|
|
|
Thanks Maciej,
I have seen those but unfortunately they dont help with c#..
I am looking into reading the dbc as a text file now and then searching for the relevant data according to the message.
thanks
|
|
|
|