By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,289 Members | 1,224 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,289 IT Pros & Developers. It's quick & easy.

mpossible strange behaviour with sendmessage (make no sense at all)

P: n/a
Hi,

I use sendMessage to retrieve information from another application.

For some obscur reasons, my code work only in a button click event and
nowhere else in my application. I mean I get unexpected result
depending where the code is placed in my application ?!?!?!?!?

Here is my code:
================================
//retrieve all line in a win32 multiline textbox
IntPtr
NbOfLines=SendMessage(1050958,EM_GETLINECOUNT,IntP tr.Zero,IntPtr.Zero);
string CtrlContent="";
// MessageBox.Show("Uncomment this line and everything work....");
for (int cnt=0;cnt<(int)NbOfLines;cnt++)
{
StringBuilder textBuffer = new StringBuilder();
int NbOfChars=SendMessage(1050958,EM_GETLINE,cnt,textB uffer);
CtrlContent+=textBuffer.ToString();
}
MessageBox.Show("Content="+CtrlContent);
The preceding code placed in a button click event work
perfectly....but the same code in a TreeView afterSelect event is not
working at all, the content is always empty without any reasons...

if I put a messagebox before the loop, everything work
perfectly.....This is totally weird is anybody can explain what is
going on???

This non logic behaviour is a ***MAJOR PROBLEM*** in my application I
really need to find a way to fix this..

Thanks!
Jul 19 '08 #1
Share this Question
Share on Google+
4 Replies


P: n/a
On Jul 19, 7:29*am, michelqa <miche...@yahoo.cawrote:
Hi,

I use sendMessage to retrieve information from another application.

For some obscur reasons, my code work only in a button click event and
nowhere else in my application. *I mean I get unexpected result
depending where the code is placed in my application ?!?!?!?!?

Here is my code:
================================
//retrieve all line in a win32 multiline textbox
IntPtr
NbOfLines=SendMessage(1050958,EM_GETLINECOUNT,IntP tr.Zero,IntPtr.Zero);
string CtrlContent="";
// MessageBox.Show("Uncomment this line and everything work....");
for (int cnt=0;cnt<(int)NbOfLines;cnt++)
{
* * * * StringBuilder textBuffer = new StringBuilder();
* * * * int NbOfChars=SendMessage(1050958,EM_GETLINE,cnt,textB uffer);
* * * * CtrlContent+=textBuffer.ToString();}

MessageBox.Show("Content="+CtrlContent);

The preceding code placed in a button click event work
perfectly....but the same code in a TreeView afterSelect event is not
working at all, the content is always empty without any reasons...

if I put a messagebox before the loop, everything work
perfectly.....This is totally weird is anybody can explain what is
going on???

This non logic behaviour is a ***MAJOR PROBLEM*** in my application I
really need to find a way to fix this..

Thanks!
This could be a timing relating problem or it could be because
SendMessage does partial messaging pumping while waiting or maybe
something entirely different. It's going to be nearly impossible for
us to give you the answer without being able to replicate it
ourselves, but we may be able to offer clues. Have you tried placing
the code in other locations? How did you declare the SendMessage
function?
Jul 19 '08 #2

P: n/a
On Jul 19, 10:01*am, Brian Gideon <briangid...@yahoo.comwrote:
On Jul 19, 7:29*am, michelqa <miche...@yahoo.cawrote:
This could be a timing relating problem or it could be because
SendMessage does partial messaging pumping while waiting or maybe
something entirely different. *It's going to be nearly impossible for
us to give you the answer without being able to replicate it
ourselves, but we may be able to offer clues. *Have you tried placing
the code in other locations? *How did you declare the SendMessage
function
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(int hwnd, int msg, IntPtr
wparam, IntPtr lparam);
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, int msg, int wParam,
StringBuilder lParam);
const int EM_GETLINECOUNT = 0x00BA;
const int EM_GETLINE = 0x00C4;

Ok directly in Form1() function (first line of code at the very
begining of the application) it work in a c# new application.

the same thing in my application is not working....both are C#
project.

timing problem?? ...but why it work for a Button click event and not
for an afterSelect treeview event ??

..
this.InterfaceElementTreeView.AfterSelect += new
System.Windows.Forms.TreeViewEventHandler(this.Int erfaceElementTreeView_AfterSelect);
..
this.button1.Click += new System.EventHandler(this.button1_Click);
...
private void InterfaceElementTreeView_AfterSelect(Object sender,
System.Windows.Forms.TreeViewEventArgs e)
{
//The code is NOT WORKING properly if placed here
}
private void button1_Click(object sender, System.EventArgs e)
{
//The code is working properly if placed here
}
Jul 19 '08 #3

P: n/a
Just to add more informations...

in my application a lot of SendMessage works correctly, the problem
occurs only for the EM_GETLINE send message.

so look like something strange happen when lParam is a string and not
an IntPtr
Jul 19 '08 #4

P: n/a
Im still tinking the way .net manage the conversion of the lparam to
string in my sendmessage is the cause of this.
But WM_GETTEXT is working correctly.... the difference is that
WM_GETTEXT use a parameter for the size of the string.

I will use WM_GETTEXT as a workaround... so thanks to everybody who
try to help.

BUT still want to understand that behaviour...dont hesitate if you
have an explanation. Send an email to mi******@yahoo.ca if you want
to take a look at the problem in my C# project

Thanks again.

Jul 22 '08 #5

This discussion thread is closed

Replies have been disabled for this discussion.